Машинное обучение в финансах

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

В этой статье я расскажу об использовании модели долгосрочной краткосрочной памяти (LSTM) для прогнозирования будущих цен на определенные акции. Выбор этой модели призван стать введением в приложения машинного обучения в увлекательных финансовых сценариях использования. Можно ли использовать машинное обучение для прогнозирования движения цен и увеличения прибыли? Абсолютно. Можно ли это сделать с помощью методов, описанных в этой статье? Нет, отраслевые эксперты используют гораздо более сложные модели с гораздо большим объемом данных. Чтобы действительно повысить доходность при прогнозировании цен на акции, специалисту по обработке данных необходимо использовать данные и стратегии, которых нет у конкурентов. Скорее, этот пример служит введением в рекуррентные нейронные сети (RNN) и их сценариями использования в финансах, а также доказывает, что машинное обучение можно использовать для прогнозирования рыночной активности. Более подробное описание передовых методов машинного обучения и финансов можно найти в книге Стефана Янсена по этой теме. Только небольшая часть кода будет включена непосредственно в эту статью, а всю кодовую базу можно найти в репозитории GitHub.

Мы используем фреймворк PyTorch от Facebook для построения и реализации нашей модели. Решение использовать TensorFlow от Google или PyTorch от Facebook в конечном итоге сводилось к тому, что, на мой взгляд, для PyTorch доступно меньше руководств. Реализовать эту модель в TensorFlow, возможно, проще, чем в PyTorch, и это интересная задача для всех, кто пытается изучить и стать более опытными с RNN.

Рекуррентные нейронные сети

RNN - это тип нейронной сети, которая обеспечивает дополнительное преимущество поддержки последовательных данных. В нашем случае последовательные данные относятся к изменяющимся ценам акций с течением времени. Данные о ценах на акции (X), которые мы будем рассматривать, являются примером данных временных рядов. Как видно на схеме архитектуры выше, модель прогнозирует выход (O) в каждый заданный день и обновляет параметры своего скрытого состояния (H). Здесь переменные состояния хранят информацию о входах с каждого шага. Каждый данный день или шаг имеет определенное значение, которое может повлиять на стоимость завтрашней цены акций. У нашей модели есть дополнительное преимущество, заключающееся в том, что она двунаправленная, что означает, что неверные прогнозы на основе более ранних цен на акции корректируются на будущие дни, поэтому со временем она самокорректируется. Более подробный анализ RNN можно найти в этой главе книги Dive into Deep Learning.

Сети с долгосрочной краткосрочной памятью

Сети LSTM являются подклассом RNN, которые обладают дополнительным преимуществом сохранения памяти (C) в каждой ячейке, чтобы лучше фиксировать долгосрочные тенденции. Для более длинных последовательностей данных важно помнить значения, обнаруженные на ранних этапах последовательности. Для поддержки этого LSTM использует ячейки памяти для отслеживания скрытого состояния (H) и дополнительной информации. Эти ячейки памяти построены на трех воротах: забыть (F), ввести (I) и выйти (O). Это дает нам возможность решить, что запомнить, а что забыть из предыдущих значений в последовательности. Входной вентиль принимает новые данные (X) из последовательности, а вентиль забывания решает, какую часть нашей памяти мы должны сбросить. Затем память обновляется после прохождения входных и забытых ворот. Затем выходной вентиль принимает во внимание входные и предыдущие значения скрытого состояния. Значение этого шлюза передается в следующую ячейку в последовательности как скрытое состояние, а также используется для обновления памяти. Для более подробного анализа математической модели см. Этот раздел в Dive into Deep Learning.

Очистка данных

Намного более важными, чем сама модель, являются данные, которые мы ей вводим. Финансовые данные очень ценны, и, к счастью, в последние годы их стало намного проще получать. Есть много API, которые предоставляют обширные финансовые данные за плату за подписку, но есть несколько, которые предлагают более ограниченные данные бесплатно. Одним из источников бесплатных данных является yfinance. На протяжении многих лет Yahoo! Finance предоставил исторические данные, но эта служба была выведена из эксплуатации, и поэтому yfinance был создан для предоставления разработчикам той же функциональности. В нашем примере мы будем использовать ежедневные исторические данные о ценах на Coca-Cola. Мы выбрали Coca-Cola, потому что это очень известная международная компания по производству напитков, которая является личным фаворитом легендарного инвестора Уоррена Баффета. Coca-Cola, в отличие от криптовалют или технологических компаний, не очень волатильна, что делает ее более простым примером для предсказания нашей модели. Данные содержат цены открытия, закрытия, максимума и минимума, а также общий объем за каждый торговый день за 8 лет. После получения данных из yfinance мы масштабируем и разделяем данные и оставляем последние 20% торговых дней невидимыми во время обучения, чтобы использовать их в целях тестирования. Поскольку мы используем данные временных рядов, нам нужно определить размер последовательности, и мы выбрали 50 для этого сценария. Это означает, что каждый прогноз будет напрямую учитывать торговые данные за последние 50 дней. Нашим ярлыком будет столбец Будущее, который представляет собой цену закрытия на следующий день и то, что мы пытаемся предсказать.

Модель прогнозирования цен на акции

После того, как наши данные отформатированы и готовы, мы приступаем к разработке и реализации нашей модели. Мы будем использовать скрытый слой размером 512 и двунаправленную сеть LSTM с использованием одного слоя. См. Ниже обзор архитектуры нашей модели, созданной с помощью TensorBoard.

Скрытое состояние нашей модели будет инициализировано трехмерным тензором всех нулей с формой (2 * количество слоев, размер пакета, размер скрытого состояния). Мы умножаем количество слоев на два, потому что наша модель двунаправленная, поэтому нам понадобится вдвое больше значений состояния. Мы обнаружили, что правильная инициализация измерений состояния нашей модели является одним из самых сложных аспектов этого проекта. После преобразования наших данных в тензоры PyTorch и настройки наших функций потерь и оптимизатора мы начинаем обучение. Мы обучили нашу модель в Google Colab с использованием графических процессоров в течение десяти эпох, и это заняло несколько минут.

Окончательные результаты

После завершения обучения мы захотим визуально взглянуть на наши результаты. На наших графиках показано количество дней от начальной точки данных обучения и тестирования соответственно. Для справки, данные обучения начинаются в 2013 году, а данные тестирования - с конца 2019 года до середины 2021 года.

Выше мы видим прогнозы по ранее увиденным обучающим данным. Наша модель хорошо фиксирует линию тренда. Мы только прогнозируем курс акций на следующий день, и, как правило, в короткие периоды времени не бывает слишком много колебаний цен, так что это ожидаемо. Если бы мы попробовали что-то более изменчивое, например недавнюю сагу о GameStop, мы бы увидели огромное несоответствие между прогнозируемыми и фактическими ценами. Мы видим несколько периодов более высокой волатильности в обучающих данных примерно через 200 и 600 шагов после начала последовательности, когда производительность нашей модели падает, но наша модель четко отражает более широкую картину ценовых тенденций.

Легендарный боксер Майк Тайсон однажды сказал: «У каждого есть план до тех пор, пока он не получит удар в рот». В общем, модели машинного обучения имеют ценность только в том случае, если они хорошо работают с невидимыми данными. У нас есть данные о ценах на акции за почти два года, которых наша модель не нашла, поэтому мы вставляем эти последовательности, чтобы увидеть, как наша модель работает в реальных условиях. Мы видим, что наша модель очень хорошо предсказывает завтрашние цены на акции. Когда цена начинает менять направление, мы видим небольшую задержку наших прогнозируемых цен, чтобы догнать фактическую цену, но обычно это отражает как величину, так и направление фактического движения цены.

Вывод

Как упоминалось ранее в статье, эта модель очень ограничена в возможности использования в качестве эффективной торговой стратегии. Он предназначен для введения в сети LSTM в PyTorch и доказательства того, что машинное обучение можно применить в мире финансов. С этой простой моделью есть много других интересных областей для исследования. Как эта модель работает на разных ложах? Как изменение формы и размера модели влияет на прогнозы цен? Можно ли это использовать в других классах активов, помимо акций? Дайте нам знать, что вы найдете! Мы обнаружили, что уменьшение количества слоев и увеличение размера скрытого слоя дает наилучшие результаты.

Авторы

Следующие люди внесли свой вклад в эту статью:

Руководитель проекта - Марк Бентивенья, менеджер по проектированию данных Cloudreach

Советник - Dr. Иоаннис Кутис , профессор NJIT

Автор - Джин Игл

Автор - Дэвид Аполинар

Автор - Рохит Тикьяни

Автор - Джеймс Джардинелла

Диаграммы архитектуры в этой статье использованы с разрешения авторов Dive into Deep Learning. Эта чрезвычайно содержательная книга доступна в Интернете бесплатно (да, вы правильно прочитали. На самом деле она бесплатна!) Для всех. Это отличная отправная точка для всех, кто хочет стать более опытным в области глубокого обучения, и используется университетами по всему миру. Благодарим авторов книги:

Доктор Астон Чжан - старший научный сотрудник Amazon

Доктор Зак С. Липтон - ученый Amazon, доцент CMU

Му Ли - старший научный сотрудник Amazon

Доктор Алекс Дж. Смола - вице-президент Amazon / выдающийся ученый

Ссылки

Астон Чжан и Захари К. Липтон, Му Ли и Александр Дж. Смола. Погрузитесь в глубокое обучение. 2020 г.

Стефан Янсен. Машинное обучение для алгоритмической торговли: прогнозные модели для извлечения сигналов с рынка и альтернативных данных для систематических торговых стратегий с Python, 2-е издание. 2020 г.