Прогнозная модель и её предварительные результаты

Приветствую читателей блога! Хочу поделиться новостями по своему домашнему проекту.

По-хорошему стоило бы подготовить описание кода и решений, применённых в сервисах tbot, но я увлёкся написанием 4-го сервиса: demm (Decision Making Manager). И он оказался довольно сложным в алгоритмическом плане. Впрочем, это было ожидаемо. В нем у меня сосредоточена логика принятия решений и построение прогнозной модели. До принятия решений я ещё не дошёл, но с прогнозной моделью уже поэкспериментировал.

Модель я делаю на основе метода k ближайших соседей. Атрибуты — некоторые статистические показатели по минутных таймфреймам.

Алгоритм ближайших соседей вполне уместен в моем случае: я хочу достраивать/актуализировать модель в режиме реального времени, «на лету», а он как раз и позволяет это делать, т.к. хорошо отрабатывает дрейф понятий (concept drift).

Однако этот алгоритм не очень хорош с точки зрения производительности на стадии получения результата. Если решать задачу в лоб, то нужно пробегать по всем добавленным «точкам» из обучающей выборки (точки в n-мерном пространстве), считать расстояние по отношению к исследуемой точке, затем сортировать по расстоянию, чтобы в итоге выбрать k наименьших, т.е. алгоритмическая сложность O(n). На небольших объёмах это выполняется быстро, но как только данные накапливаются, в моем случае достаточно часа работы, начинается жор CPU. В общем пришлось подумать, как это правильно оптимизировать. К счастью, все получилось и сейчас с производительностью все ок.

В настоящий момент точность прогнозной модели в районе 60-70%, для примера привожу результаты логов. Это результаты по разным временным отрезкам (обучающим наборам), каждый из них продолжительностью чуть больше часа, т.е. за это время система успевает обучиться и выдает более-менее приличный результат.

prediction total for BBG000N9MNX3, true: 68, false: 37, accuracy: 0.647
prediction total for BBG000N9MNX3, true: 45, false: 17, accuracy: 0.725

BBG000N9MNX3 — тикер по акциям Tesla, true — количество правильных и false — неправильных прогнозов, accuracy — точность, которая равна true / (true + false). Прогнозировались три исхода: повышение цены, понижение цены, цена останется неизменной. Прогнозы делались на 1 минуту вперёд.

В общем и целом это повод для осторожного оптимизма, но пока уверенно говорить о том, что модель имеет приемлемую точность, я не могу. Во-первых, нужно больше прогонов на разных обучающих выборках, во-вторых, пока не понятно, хватит ли такой точности в реальных сделках с затратами на коммисию? А чтобы ответить на этот вопрос, нужно делать полноценное моделирование с фиктивным выставлением заявки, её исполнением и т.д. В общем работы ещё много.

Постараюсь в ближайшее время все же описать программную реализацию сервисов, относящихся к публичной части проекта, но когда это получится сделать — не знаю.

Валерий Чугреев, 04.06.2021

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии