Расходы финансовых учреждений во всем мире на ИТ неуклонно растут, и ожидается, что к 2025 году они превысят 750 миллиардов долларов. Отчасти это связано со значительным увеличением разработки и развертывания систем ИИ. Системы на базе ИИ могут обрабатывать большие объемы данных очень быстро и в больших масштабах. Вот лишь некоторые примеры применения ИИ в финансах:

  • Прогнозы финансовых рынков (включая использование альтернативных наборов данных)
  • Выявление и предотвращение мошенничества и отмывания денег
  • Торговое исполнение
  • Обслуживание клиентов (чат-боты)
  • Консультации по инвестициям (роботы-консультанты)

Применение ИИ, на котором мы сосредоточимся в этой статье, — это предсказание финансовых временных рядов в UbiOps. Основное внимание уделяется не самой фактической модели, поскольку разработка модели для прогнозирования финансовых временных рядов требует значительных исследований, которые выходят за рамки этой статьи.

Прогнозирование финансовых временных рядов, таких как цены на фондовом рынке, является сложным, но быстрое развитие методов машинного обучения, таких как нейронные сети с глубоким обучением, доступность крупномасштабных данных и расширенные вычислительные возможности создают новые возможности для применения сложных моделей машинного обучения для прогнозирования. биржевые цены. Модели машинного обучения делают мало предположений о структуре исходных данных и, следовательно, лучше способны находить сложные и нелинейные закономерности, чем традиционные модели временных рядов, которые мы будем использовать здесь для прогнозирования цен S&P 500. Эти системы ИИ могут быть автоматизированы для производства с использованием хороших практик MLOps.

Прогноз индекса фондового рынка

Будущая цена индекса зависит от множества разных факторов, таких как текущее состояние финансовых рынков (ликвидность, торговая активность), фундаментальные данные (выручка, расходы, займы и т.д. компаний), отраслевая специфика данные и макроэкономические данные, такие как процентные ставки, мировые события и инфляция.

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

Пример: применение LSTM для прогнозирования индекса S&P 500

Что такое модель LSTM?

Модель, которую мы реализуем на UbiOps в этой статье, — это нейронная сеть с долговременной кратковременной памятью (LSTM). Модели LSTM представляют собой разновидности рекуррентных нейронных сетей (RNN). Это класс нейронных сетей, в которых связи между узлами образуют циклы. Поэтому RNN очень подходят для последовательного ввода данных, поэтому они часто используются при обработке естественного языка или, как мы будем делать здесь, финансовых временных рядов! Они запоминают информацию из предыдущих компонентов последовательности, чтобы влиять на конечный результат. На следующей диаграмме изображена ячейка в стандартной RNN, а также ячейка в сети LSTM.

Глубокие RNN подвержены влиянию проблемы взрывающегося/исчезающего градиента, в основном вызванной серией умножений чисел, которые больше 1 или меньше 1 соответственно. LSTM решают эту проблему, определяя для каждого значения во входной последовательности, достаточно ли оно актуально для вывода. Эта статья Райана Дельфина объясняет, как они это делают очень хорошо.

Модели LSTM устраняют проблему взрывающегося/исчезающего градиента

Короче говоря, сети LSTM пропускают входные данные через разные шлюзы, чтобы определить их актуальность. Ворота забывания определяют, какая часть долговременной памяти сети является релевантной, ворота ввода определяют, какую новую информацию следует добавить в долговременную память, а ворота вывода определяют выходные данные, используя свою краткосрочную и долговременную память. Комбинация этих трех ворот называется ячейкой, и вы можете иметь несколько ячеек в одной сети LSTM, соответствующих количеству временных шагов во входной последовательности (одна ячейка для каждого временного шага). Окончательное скрытое состояние клеток проходит через обычные слои нейронов, прежде чем достигнет выходного слоя. Размерность скрытого состояния равна количеству нейронов в следующем плотном слое.

Зачем использовать модель LSTM для прогнозирования индекса S&P 500?

Из-за возможности эффективно использовать длинные последовательности данных временных рядов сети LSTM были популярным выбором моделей машинного обучения для финансовых временных рядов. Кроме того, LSTM легко реализовать с помощью Python, который затем легко загружается как развертывание, см. ниже.

Обучение и развертывание модели LSTM требуют больших вычислительных мощностей. Возможности параллельной обработки графических процессоров могут ускорить процессы обучения и логического вывода. Графические процессоры являются стандартом де-факто для развертывания LSTM. Стоимость создания и обслуживания вычислительной инфраструктуры для выполнения этих задач высока, потому что графические процессоры и инженеры по машинному обучению дороги и дефицитны! «UbiOps может сэкономить ваши усилия и деньги благодаря нашей мощной платформе производственного уровня с автоматически масштабируемым доступом по запросу к графическим процессорам, подходящим для больших учебных заданий, а также для логического вывода с малой задержкой.

LSTM On UbiOps для прогнозирования рынка индексов

Теперь давайте развернем нашу модель LSTM для прогнозирования рынка индексов в UbiOps! Развертывание модели машинного обучения в UbiOps — это быстро и просто, и мы предлагаем поддержку в развертывании и обслуживании вашей модели. Мы создадим простой LSTM на основе этой статьи Hum Nath Bhandari et al..

К каким наборам данных мы применим его?

В статье Бхандари и др. Они находят структуру и гиперпараметры LSTM, которые оптимально подходят для данных S&P 500. S&P 500 — популярный индекс рынка США. Бхандари обнаружил, что для этого набора данных наиболее эффективная модель LSTM имеет один слой и 150 нейронов (с оптимизатором Adagrad, скоростью обучения 0,01 и размером пакета 16). Мы применим ту же настройку и применим ее к набору ежедневных данных за последние три года. Набор данных включает на каждый день цену открытия (Open) и цену закрытия индекса, федеральную процентную ставку США (EFFR), индекс доллара США (USDX) и три технических индикатора: скользящую среднюю конвергенция-расхождение (MACD), средний истинный диапазон (ATR) и индекс относительной силы (RSI).

Первые четыре являются общедоступной информацией, а три технических индикатора легко рассчитываются на основе цены открытия, дневной максимальной цены, дневной минимальной цены и цены закрытия индекса S&P 500 с использованием библиотеки pandas_ta на Python. Прежде чем использовать данные индекса S&P 500, мы удалили из них шум с помощью вейвлет-преобразования Хаара.

Внедрение LSTM и развертывание в UbiOps

Это легко реализуется на Python. Кроме того, мы также будем обучать нашу модель. Также возможно сделать это на платформе UbiOps.

https://gist.github.com/AlexanderNeutel/271dc9de86ef77dbc7ffb51654bf7b08

Мы импортируем необходимые библиотеки, считываем данные с помощью Pandas и разделяем эти данные на обучающий и тестовый наборы. Мы использовали гиперпараметры от Bhandari, поэтому можем сразу создать и обучить модель с помощью Tensorflow Keras.

Наконец, мы сохраняем обученную модель в UbiOps, чтобы использовать ее для логического вывода.

Развертывание модели LSTM в UbiOps

Теперь, когда у нас есть предварительно обученная модель для прогнозов на один период вперед, мы можем загрузить ее в UbiOps и начать использовать. Развернуть модель в UbiOps очень просто. Все, что вам нужно сделать, это создать пакет развертывания, который содержит файл Python с кодом вашей модели и файл requirements.txt, в котором указаны библиотеки, которые необходимо установить UbiOps, чтобы ваш код заработал. Затем UbiOps создает микросервис модели с собственной конечной точкой API.

Развертывание.py

https://gist.github.com/AlexanderNeutel/acf285b345ea516fb1257893db64b198

Файл deployment.py содержит класс Deployment, который UbiOps использует для обработки инициализации модели и запросов. Функция __init__() запускается, когда ваша модель инициализируется в UbiOps, а функция request() запускается, когда вы создаете запрос на использование вашей модели.

Шаблон этого кода можно найти в документации. Вам нужно только добавить код, уникальный для вашего варианта использования. В нашем случае функция инициализации загружает нашу модель и параметры обученной модели (веса и смещения) в память.

Теперь, когда у нас есть обученная модель, мы хотим иметь возможность использовать ее для прогнозирования самых последних данных, отправив запрос к конечной точке API нашей развернутой модели. Функция запроса находит соответствующие данные в сети, форматирует их, масштабирует, а затем возвращает предсказанные значения.

Требования.txt

https://gist.github.com/AlexanderNeutel/42809615ca764cf785663583e6a50c38

Файл требований — это простой текстовый файл, в котором указываются библиотеки, необходимые для запуска нашего развертывания.

Развертывание в UbiOps

Чтобы развернуть нашу модель, мы сначала заархивируем наши файлы deployment.py и requirements.txt, которые мы затем загрузим позже. Теперь мы входим в UbiOps, нажимаем «Создать новый проект». Назовем это «lstm-on-ubiops».

Первым шагом в создании развертывания является создание для него токена API. Мы создаем токен API в разделе разрешений в левой части экрана. Нам нужно будет использовать этот токен на более позднем этапе, поэтому мы копируем его в блокнот, чтобы мы могли легко найти его позже.

Затем я создаю новую корзину на странице «Хранилище», содержащую файл обученной модели. Перейдите в «Хранилище» -> «Создать новое ведро», дайте ему имя и создайте. Как только он будет создан, я могу загрузить файл model.h5, который содержит веса нашей обученной модели LSTM.

Затем мы идем в «Развертывания», нажимаем «Создать» и просматриваем два экрана параметров. В первом случае вы даете развертыванию имя и описание, а также определяете тип входных и выходных данных, которые развертывание будет принимать и давать. В нашем случае ввод пуст, потому что наша функция запроса загружает данные из Интернета. Здесь мы также подключаем развертывание к только что созданной корзине. Ставим только для чтения.

На следующем экране мы перетаскиваем наш заархивированный пакет развертывания в поле перетаскивания и открываем дополнительные/дополнительные настройки. Нам нужно добавить две переменные среды: токен UbiOps API и имя корзины.

Теперь мы вставляем созданный ранее токен API в созданную для него переменную среды. А для переменной имени корзины мы просто вводим имя, которое мы создали ранее. Есть еще несколько параметров, которые мы можем изменить, например, параметры масштабирования и ресурсов, но в этом случае параметры по умолчанию будут работать нормально.

Вот и все! Мы нажимаем Создать, и UbiOps сделает остальную настройку за нас. Он установит все пакеты и сохранит наше развертывание, поэтому его можно будет быстро запустить в любое время. Если мы сейчас перейдем к нашему развертыванию, мы можем нажать Создать запрос, чтобы использовать нашу модель. Также есть возможность создавать запросы с помощью UbiOps API.

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

Теперь давайте посмотрим, как работает наша модель. Мы еще не представили нашу модель для последних пятидесяти дней наших данных S&P 500. Мы создадим запрос на UbiOps с этими данными и посмотрим на прогнозы LSTM о ценах закрытия S&P 500 на один день вперед для этих дней. Мы нарисовали прогнозы на один день вперед за последние пятьдесят дней вместе с реальными данными ниже. Вы можете видеть, что это работает хорошо!

Заключение

С UbiOps вы можете быстро и надежно запустить модель LSTM в облаке на основе финансовых временных рядов из различных источников. Если у вас есть какие-либо вопросы о том, что еще возможно с UbiOps, или если вы заинтересованы в развертывании своей модели в UbiOps, не стесняйтесь обращаться к нам по электронной почте, в Slack или на нашем веб-сайте!

Отказ от ответственности:

«Как запустить модель прогнозирования рынка индексов в UbiOps» регулируется Условиями использования, опубликованными на сайте newyorkfed.org. Федеральный резервный банк Нью-Йорка не несет ответственности за публикацию данных EFFR компанией UbiOps, не [санкционирует] и не [одобряет] какую-либо конкретную публикацию, а также не несет ответственности за ваше использование.

Отказ от ответственности:

UbiOps имеет разрешение от S&P DJ Indices на повторную публикацию данных/информации индекса.

Ссылка

https://www.sciencedirect.com/science/article/pii/S2666827022000378