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

Цель проекта

Основная цель этого проекта заключалась в разработке прогнозной модели, которая могла бы прогнозировать цены акций на заданную дату в будущем. Чтобы добиться этого, мы обратились к историческим данным по акциям, доступным на Yahoo Finance. Имея эти данные, мы приступили к анализу данных, предварительной обработке, выбору модели и оценке.

Стратегия решения проблемы

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

Описание входных данных

Как упоминалось ранее, мы обратились к Yahoo Finance за историческими данными по акциям, используя API yfinance для загрузки информации, связанной с акциями. Определение каждого входного данных представлено в таблице ниже.

Предварительная обработка данных

Данные, полученные из Yahoo Finance, уже имеют формат временных рядов, в котором даты служат индексом. Однако проблема возникает из-за того, что фондовый рынок работает исключительно в рабочие дни, что приводит к пробелам в наборе данных из-за выходных и праздников. В таблице ниже мы видим, что временной ряд перескакивает с 07.01.2022 на 10.01.2022, пропуская выходные.

Для решения этой проблемы был применен метод .asfreq(), преобразующий данные в регулярную частоту.

Кроме того, недостающие данные были устранены путем предварительного заполнения.

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

Фрагмент для масштабирования данных: мы использовали MinMaxScaler для выполнения операции масштабирования. Для масштабирования обучающих данных мы использовали метод fit_transform. Что касается тестовых данных, мы применили исключительно преобразование, избегая процесса подгонки, чтобы предотвратить утечку данных.

Выбор функций и дальнейшее изменение данных

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

Обратите внимание, что на графике ниже переменная «Объем» исключена из-за ее величины, которая может исказить визуализацию значений других переменных.

Дальнейшая визуализация для подтверждения того, что другие функции тесно связаны с целевой переменной «Adj Close». Что касается функции «Объем», мы решили исключить ее из нашей модели машинного обучения из-за ее слабой корреляции -0,3 с другими переменными. Более того, эти особенности исключаются, поскольку значительная часть из них становится известна только после определения целевой переменной. Эта присущая им недоступность делает их неэффективными для создания прогнозирующих выводов.

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

Приведенный ниже фрагмент кода демонстрирует, как мы реализовали этот процесс создания последовательности, а затем преобразовали данные в массивы numpy, подготовив их к обучению:

Выбор и оценка модели

Наше путешествие привело нас к изучению двух мощных типов рекуррентных нейронных сетей (RNN): долговременной краткосрочной памяти (LSTM) и GRU. Эти RNN хорошо подходят для последовательных данных, таких как временные ряды.

Мы использовали поиск по сетке, чтобы найти лучшие гиперпараметры для моделей LSTM и GRU. Модель LSTM стала явным победителем, предлагая превосходную точность прогнозирования. Для количественной оценки эффективности нашей модели мы использовали среднюю абсолютную процентную ошибку (MAPE), показатель, который рассчитывает процентную разницу между прогнозируемыми и фактическими значениями.

Визуализация производительности модели: сравнение прогнозируемых и истинных значений. Чтобы оценить точность и эффективность нашей модели LSTM, мы использовали визуализации, чтобы сопоставить прогнозируемые значения, генерируемые моделью, с фактическими истинными тестовыми значениями. Это графическое представление предоставило четкие и интуитивно понятные средства понимания того, насколько хорошо прогнозы нашей модели совпадают с фактическими данными.

Модельная архитектура — LSTM

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

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

Затем мы приступили к реализации оптимальных параметров, полученных с помощью поиска по сетке, в окончательной модели LSTM, показанной ниже:

Аналогичным образом мы применили тот же процесс к модели ГРУ; однако модель LSTM работала немного лучше, что привело к более низкому баллу MAPE. Это небольшое преимущество в производительности побудило нас выбрать модель LSTM в качестве окончательного варианта для нашего проекта прогнозирования цен на акции.

Метрики и обоснование

Успех проекта зависит от выбора показателей оценки. В качестве основного показателя была выбрана средняя абсолютная процентная ошибка (MAPE). MAPE вычисляет процентную разницу между прогнозируемыми и фактическими значениями, предоставляя интуитивно понятную меру точности прогноза.

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

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

Аналогично, мы следовали той же процедуре для модели ГРУ. Однако результаты оказались не такими многообещающими, как результаты, достигнутые с помощью модели LSTM. Модель LSTM дала оценку 0,5800, а модель GRU — 0,58648. Обе модели показали себя примерно одинаково, при этом модель LSTM немного опередила их с небольшим отрывом.

Результаты и ключевые выводы

Кульминацией проекта является оценка производительности модели. Благодаря тщательному тестированию и оценке модель LSTM достигла значения MAPE 0,58, что является многообещающим показателем ее прогностических возможностей.

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

Заключение

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

Будущие улучшения

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

Подтверждение

Мы выражаем признательность Yahoo Finance за предоставление доступа к ценным историческим данным. Их вклад сыграл решающую роль в успехе проекта.