УДК 330.4:004.032.26
https://doi.org/10.24158/рер.2018.5.12
Видмант Олег Сергеевич
Vidmant Oleg Sergeevich
аспирант Финансового университета при Правительстве Российской Федерации
ПРОГНОЗИРОВАНИЕ ФИНАНСОВЫХ ВРЕМЕННЫХ РЯДОВ С ИСПОЛЬЗОВАНИЕМ РЕКУРРЕНТНЫХ НЕЙРОННЫХ СЕТЕЙ ЬЭТМ
PhD student, Financial University under the Government of the Russian Federation
FORECASTING FINANCIAL TIME SERIES WITH LSTM RECURRENT NEURAL NETWORKS
Чуть более десяти лет назад, в середине 2000-х гг., машинное обучение получило новый виток развития, что было связано с именами двух исследователей Университета в Торонто - Джеффри Хинтона и Йошуа Бенджи, которые нашли более эффективный способ обучения. И в данный момент во многих областях лучшие результаты получаются именно с использованием глубоких нейронных сетей. Одним из прорывов было кардинальное улучшение результатов при решении задач распознавания, и сейчас многие лидеры мирового рынка используют глубокие нейросети для решения задач перевода (Microsoft [1], Google [2], IBM [3]), голосовых помощников (Siri, Amazon Echo), распознавания лиц (Facebook [4]), беспилотного вождения или даже игр (покер, го).
Сети прямого распространения, или многослойные перцептроны, исследованные ранее, имеют фиксированное число входов, и каждый из них воспринимается остальными как независимый. Однако в рекуррентных сетях связи между нейронами не ограничиваются исключительно движением информации в одну сторону, но также имеется возможность вернуть значение «самому себе». Таким образом, нейрон может запоминать информацию, которая была подана ранее на вход. Именно поэтому рекуррентные нейронные сети являются наилучшим выбором для прогнозирования временных рядов и последовательностей. Задачи по характеру входов и выходов разделяют на пять вариантов [5]:
- один вход, один выход (one-to-one);
- один вход, последовательность выходов (one-to-many);
- последовательность входов, один выход (many-to-one);
- последовательность на входе, последовательность на выходе (many-to-many);
- синхронизированные последовательности входов и выходов (synchronized many-to-many).
В данной статье решается регрессионная задача «many-to-one» при обучении с учителем
при использовании рекуррентных слоев. Обычные рекуррентные сети очень плохо справляются
с ситуациями, когда нужно что-то «запомнить» надолго: влияние скрытого состояния или входа с шага t на последующие состояния рекуррентной сети экспоненциально затухает. Именно поэтому в данном исследовании использована модель LSTM [6] (Long Short-Term Memory), где добавляется дополнительная ячейка для моделирования «долгой памяти». Подобная задача рассматривалась в статье Prediction Stock Prices Using LSTM [7], где в качестве инструмента выступал инструмент NIFTY 50 с 5-летней временной выборкой и последующим обучением на 250 и 500 эпохах, а также в работе М. Хэнссона [8], где после анализа было сформировано заключение о том, что рекуррентные нейронные сети LSTM могут прогнозировать события не на всех рынках и инструментах. Предполагается, что на более развитых рынках происходит снижение качества результатов за счет использования аналогичных/обратных моделей для спекулятивных действий.
Таким образом, целью данной статьи является проверка гипотезы о возможности прогнозирования российского финансового инструмента. Эта задача особенно актуальна в последние 5-6 лет, на протяжении которых мы могли наблюдать волатильное поведение большинства инструментов вследствие как страновых рисков, так и экономического кризиса.
В качестве инструмента для прогнозирования воспользуемся фьючерсом Сбербанка (SPFB.SBRF) с двухлетней глубиной выборки, а также 5-минутными временными интервалами (см. табл. 1).
Таблица 1 - Исходные данные инструмента_
<DATE> <TIME> <OPEN> <HIGH> <LOW> <VOL> Close
2016-02-01 10:05 9797 9797 9710 19876 9735
2016-02-01 10:10 9735 9736 9704 8611 9730
2018-02-01 23:45 26490 26490 26480 183 26481
2018-02-01 23:50 26480 26485 26472 649 26484
Для улучшения работы нейронных сетей воспользуемся нормализацией данных в пределах [0 : 1] [9] (см. табл. 2).
Таблица 2 - Нормализация данных инструмента
<DATE> <TIME> <OPEN> <HIGH> <LOW> <VOL> Close
2016-02-01 0.0000 0.0246 0.0233 0.0201 0.1927 0.0211
2016-02-01 0.0037 0.0211 0.0197 0.0197 0.0835 0.0281
2016-02-01 0.0074 0.0208 0.0195 0.0184 0.0978 0.0195
2016-02-01 0.0111 0.0195 0.0183 0.0173 0.1271 0.0176
2016-02-01 0.0148 0.0178 0.0181 0.1794 0.0862 0.0189
Рекуррентные нейронные сети будут принимать в качестве входных данных последовательность значений, в данном случае в качестве входных данных будет использована матрица, состоящая из 6 признаков и фиксированного скользящего окна длиной п (см. рис. 1).
Рисунок 1 - Данные для обучения модели рекуррентных слоев
Используем в качестве переменной скользящего окна значение п = 20, а также разделим выборку в соотношении 90 : 10 на тренировочные данные и данные для проверки гипотезы (отложенные данные). Также выделим 10 % от тренировочных данных на тестирование алгоритма. Таким образом получим следующее соотношение: - данные для тренировки: 75713 * 20 * 6;
- данные для тестирования: 8413 х 20 х 6. Конструирование нейронной сети показано на рис. 2.
Тип слоя
Входной Рекуррентный Рекуррентный Агрегирующий Выходной слой слой слой слой
Количество нейронов 20 LSTM 256 LSTM 256
Рисунок 2 - Строение нейронной сети
Relu 32
Linear 32
На вход нейронной сети подается матрица размерностью 20 х 6, далее значения передаются на рекуррентный слой, который состоит из 256 нейронов рекуррентной нейронной сети, далее процедура повторяется и по окончании результаты агрегируются слоем прямого распространения с функцией активации Relu [10]. Конечный результат поступает на выходной слой с одним нейроном и линейной функцией активации.
Для создания нейронной сети воспользуемся языком программирования Python, а также библиотеками для обработки и визуализации данных:
- pandas;
- numpy;
- matplotlib;
- keras (в качестве основы tensorflow);
- sklearn.
В качестве функции потерь в процессе обучения используется среднеквадратическая ошибка (Mean Squared Error), оптимизация осуществляется с использованием алгоритма Adam [11]. Обучение производится итеративно в течение 10 эпох для отслеживания возможного переобучения (рис. 3).
2 4 6 8
Эпоха
Рисунок 3 - Изменение ошибки на тестовой и проверочной выборке
Как можно заметить, потери тестовой выборки возрастают после первой эпохи, в которой наблюдается минимальное значение ошибки. Также можно заметить монотонное убывание