Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andriipanasiuk/transactions-prediction
Predicts category of financial transaction based on a transactions' history
https://github.com/andriipanasiuk/transactions-prediction
Last synced: 11 days ago
JSON representation
Predicts category of financial transaction based on a transactions' history
- Host: GitHub
- URL: https://github.com/andriipanasiuk/transactions-prediction
- Owner: andriipanasiuk
- Created: 2021-01-13T13:11:13.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-01-13T14:03:38.000Z (almost 4 years ago)
- Last Synced: 2024-12-07T17:36:44.970Z (19 days ago)
- Language: Kotlin
- Size: 59.6 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Описание алгоритма
Данный алгоритм базируется на двух показателях:
- насколько трата по конкретной категории "необходима" на данный момент
и
- насколько сумма близка к одной из сумм в предыдущих транзакциях по конкретной категорииАлгоритм предсказания проходится по категориям в истории транзакций и высчитывает эти 2 показателя для каждой категории
соотносительно к сумме и дате предсказываемой транзакции.## Как считаем "необходимость" транзакции по конкретной категории в конкретный день
Берем половину последних транзакций (допустим получится N транзакций) в категории. Делим сумму расходов этих транзакций на количество дней
в периоде на который эти транзакции растянулись. Получаем некий средний расход в день по конкретной категории.Потом берем последние N/2 транзакций и считаем средний расход по ним за период включая дату транзакции, категорию которой предсказываем.
Насколько эта сумма меньше среднего расхода по данной категории вообще (то, что посчитали выше) - настолько вероятней, что пользователю уже "нужно"
совершить транзакцию в данной категории.## Как считаем близость суммы
по_модулю ((сумма_в_предсказываемой_транзакции - сумма_в_транзакции_из_истории) / сумма_в_транзакции_из_истории )
Пройдясь по всем транзакциям в истории берем наименьшее число, то есть находим наилучшее сходство суммы.
Итого число получится от 0 до +бесконечности, чем меньше - тем ближе суммы.
## Общий "коэффициент правдоподобности"
Потом основываясь на показателях описанных выше высчитываем некий "коэффициент правдоподобности" и выдаем 3 категории (как предсказание)
с наибольшим значением этого коэффициента.При калькуляции коэффициента нормализуем эти показатели и берем корень из суммы их квадратов с определенными весами - показателю "нужности"
транзакции даем чуть больший вес.# Результаты
На реальной истории транзакций, которая есть в этом репозитории в файле `transactions.txt`, алгоритм показал точность около 60%.
Большинство из транзакций, в которых алгоритм ошибся, были в таких категориях, по которым было 3 или менее транзакций в истории.***P.S. Код далек от идеала, написан как Proof-of-Concept описанного алгоритма.***