Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

README

        

# Описание алгоритма
Данный алгоритм базируется на двух показателях:
- насколько трата по конкретной категории "необходима" на данный момент
и
- насколько сумма близка к одной из сумм в предыдущих транзакциях по конкретной категории

Алгоритм предсказания проходится по категориям в истории транзакций и высчитывает эти 2 показателя для каждой категории
соотносительно к сумме и дате предсказываемой транзакции.

## Как считаем "необходимость" транзакции по конкретной категории в конкретный день

Берем половину последних транзакций (допустим получится N транзакций) в категории. Делим сумму расходов этих транзакций на количество дней
в периоде на который эти транзакции растянулись. Получаем некий средний расход в день по конкретной категории.

Потом берем последние N/2 транзакций и считаем средний расход по ним за период включая дату транзакции, категорию которой предсказываем.
Насколько эта сумма меньше среднего расхода по данной категории вообще (то, что посчитали выше) - настолько вероятней, что пользователю уже "нужно"
совершить транзакцию в данной категории.

## Как считаем близость суммы

по_модулю ((сумма_в_предсказываемой_транзакции - сумма_в_транзакции_из_истории) / сумма_в_транзакции_из_истории )

Пройдясь по всем транзакциям в истории берем наименьшее число, то есть находим наилучшее сходство суммы.

Итого число получится от 0 до +бесконечности, чем меньше - тем ближе суммы.

## Общий "коэффициент правдоподобности"

Потом основываясь на показателях описанных выше высчитываем некий "коэффициент правдоподобности" и выдаем 3 категории (как предсказание)
с наибольшим значением этого коэффициента.

При калькуляции коэффициента нормализуем эти показатели и берем корень из суммы их квадратов с определенными весами - показателю "нужности"
транзакции даем чуть больший вес.

# Результаты

На реальной истории транзакций, которая есть в этом репозитории в файле `transactions.txt`, алгоритм показал точность около 60%.
Большинство из транзакций, в которых алгоритм ошибся, были в таких категориях, по которым было 3 или менее транзакций в истории.

***P.S. Код далек от идеала, написан как Proof-of-Concept описанного алгоритма.***