Команда разработчиков:
Группа | Гитхаб | Роль в проекте | |
---|---|---|---|
Авилов Илья | DS-11 | https://github.com/Ilya2567 | DS, Frontend |
Дякин Николай | ML-11 | https://github.com/nickdndev | DS, Frontend |
Мунин Евгений | ML-12 | https://github.com/EvgeniiMunin | DS, ML, Frontend |
Орхан Гаджилы | DS-12 | https://github.com/Fianketto | DS, PM |
Стариков Андрей | ML-12 | https://github.com/andyst75 | ML, DevOps |
В условиях постоянной торговли на валютной бирже трейдерам приходится иметь дело с валютами, котировки которых могут с определенной точностью поддаваться прогнозированию. В качестве бизнес задачи для нашей демонстрации выбрано извлечение прибыли в краткосрочный период за счет изменений курсов валютных пар.
Вследствие того, что торги на динамичном рынке сопряжены с более высокими рисками и потерями, наше внимание акцентировалось на спокойном рынке (без частых и/или сильных выбросов).
Предоставляемый продукт в качестве прогноза будет указывать на направление рынка в будущем (рост или снижение стоимости одной валюты по отношению к другой валюте), тем самым оказывая помощь трейдеру в принятии решения.
Поскольку данные представляют собой временные ряды, а поставленной задачей является интервальное предсказание на несколько дней вперед целевой величины цены закрытия валютной пары (Multi Input Single Output Multi Step), будет правильным использовать методы, использующие скользящие окна и признаки в ближайшем прошлом. Модели-кандидаты для оптимизации были разбиты на 4 категории:
- Наивный метод скользящей средней в качестве референса
- Модель линейной регрессии для получения рабочего бейзлайна, которая быстро обучается и оптимизируется
- Модель бустинга на фичах из предыдущего пункта
- Более сложная LSTM сеть для проверки того, какой прирост в качестве предсказаний нам даст усложнение модели
В качестве итоговых моделей, которые можно выбрать для предсказания направления рынка, оставлены LSTM и линейная регрессия. Данные для обучения и валидации взяты из открытых источников. Обучение проводилось на данных за максимальное количество дней, которое позволяет выгрузить сервис (2000 дней).
- high
- low
- start
- volumefrom (только для LSTM)
- volumeto (только для LSTM)
- close - TARGET
В качестве референсной пары, относительно которой валидировалась модель, бралась пара BTC-USD (биткоин - доллар США).
В связи с тем, что рассматриваются только спокойные рынки, для валидации модели была использована метрика MAE, которая менее чувствительна к выбросам по сравнению с MSE. Использованная метрика позволяет наглядно интерпретировать полученные прогнозы в рамках бизнеса, т.к. имеет размерность искомой валюты.
Model | MAE val |
---|---|
Naive model: Moving average (40 days) | 1355 |
Linear Regression + Lag features (40 days) | 704 |
XGBRegressor | 2173 |
LSTM + Sliding window (40 days) | 1949 |
- Точность модели скользящего среднего является хорошим ориентиром для валидации более сложных моделей, который сложно перебить.
- Наилучший результат показа модель линейной регрессии с применением лаговых признаков, построенных из целевой переменной курса закрытия пары валют.
- Усложнение архитектуры модели не приводит к улучшению по сравнению с линейной моделью.
В качестве фреймворка для демонстрации результатов работы был выбран Streamlit который предоставляет широкие возможности по визуализации табличных данных.
- В центре экрана представлен график для валютной пары: красным цветом обозначены исторические значения котировки за предудыщие 200 дней, синим цветом показаны предсказания исторических значений, точки обозначают предсказания в будущем. Серая закрашенная область отвечает за интервал между максимальной и минимальной ценой в течении дня.
- В колонке слева имеются:
- выпадающее меню с возможностью выбора валютной пары
- слайдер для выбора количества дней предсказания в будущем 1..3
- календарь дня выбора даты 1го дня предсказания
- выпадающее меню для выбора модели
- Также, по ссылке внизу возможно выгрузить исторические данные в формате .csv