Применение 4 популярных методов машинного обучения при подборе акций дает удивительные результаты

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

Мы подробно обсудим, как получить и визуализировать исторические данные о торговле и ценах, предысторию каждого используемого метода машинного обучения и оценку эффективности каждой модели при прогнозировании движения цен 8 активно торгуемых акций на фондовых биржах Гонконга и США. Мы рассмотрим четыре метода машинного обучения: SVM, Random Forrest, XGBoost и Deep Learning с LSTM и CNN.

Описание проблемы

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

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

Метрики

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

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

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

Подход

Ниже описывается подход, используемый для решения наших задач.

  1. Извлечение и изучение данных. Мы используем данные из Yahoo Finance, где мы извлекаем ежедневные торговые данные за последние 10 лет, в том числе: сколько акций было продано (объем) и цену закрытия с поправкой на дробление акций (скорректировано Закрывать).
  2. Разработка функций: мы разрабатываем новые функции на основе нашего набора торговых данных, чтобы помочь в обучении модели, включая скользящие средства, скользящее стандартное отклонение, скользящие верхние / нижние границы цен.
  3. Подготовка данных. Мы подготавливаем наши данные, включая разделение наборов для обучения и тестирования.
  4. Моделирование и оценка: классификация подъема / спада в невидимый день с использованием SVM и Random Forrest; за которым следует вторая постановка задачи прогнозирования цен с помощью моделей XGBoost и Deep Learning для изменения цены в невидимый день.
  5. Резюме, выводы и дальнейшие действия

Часть 1: Получение и изучение торговых данных

Мы сосредоточимся на 8 акциях Гонконгской фондовой биржи и американского NASDAQ. Они есть:

  • 0005.HK: Гонконгская и Шанхайская банковская корпорация (HSBC)
  • 0700.HK: Tencent Holdings
  • 1398.HK: ICBC Банк
  • 1299.HK: Группа компаний AIA
  • AAPL: Apple
  • TSLA: Тесла
  • MSFT: Microsoft
  • AMZN: Amazon

Для каждой из указанных выше акций мы получаем следующие торговые данные за каждый торговый день с января 2000 года по август 2021 года от Yahoo Finance:

  • Скорректированное закрытие: цена закрытия, скорректированная с учетом дробления акций.
  • Закрытие: цена последней сделки в определенный день.
  • High: самая высокая цена транзакции в данный день.
  • Низкая: самая низкая цена транзакции в определенный день.
  • Открыто: цена первой транзакции в определенный день.
  • Объем: количество акций, переходящих из рук в руки в определенный день.

Мы проводим исследовательский анализ по Скорректированной цене закрытия.

Чтобы сравнить цены на разные акции, мы нормализуем цены до 1 в начале нашего окна:

Часть 2: Разработка функций

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

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

Часть 3: Подготовка данных для моделирования

Чтобы подготовить наши данные и спроектированные функции для моделирования, мы создаем модифицированный Dataframe со следующими дополнениями:

  • Отсутствующие точки данных удаляются: выясняется, что все отсутствующие данные соответствуют праздникам, когда торговля не велась, и поэтому они были удалены.
  • Наборы данных с окнами: «Наблюдение» за каждым торговым днем ​​дополняется 5-дневным окном с предыдущими торговыми данными для обучения.

Часть 4а: определение того, будет ли в конкретный торговый день повышаться или понижаться

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

Машины опорных векторов (SVM)

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

Здесь мы обучаем нашу SVM, используя исторические данные с 2018 по 2021 год, со следующими функциями в обучающих данных: скорректированная цена закрытия, объем, скользящее среднее и стандартное отклонение скорректированного закрытия за скользящие 20 дней, скорректированная цена закрытия за последние 3 дня. . Наша модель SVM затем тестируется на невидимых данных с июля 2021 года по август 2021 года. Результаты показаны ниже:

Как видно, точность классификации 8 акций составляет от 50% до 70%; Это означает, что они чуть выше случайного шанса в 50%, что означает, что наша модель работает лучше, чем простое предположение. Чтобы улучшить нашу производительность, мы будем использовать «метод ансамбля», а именно случайный Форрест.

Случайный Форрест

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

Опять же, мы обучаем наш случайный форрест, используя исторические данные с 2018 по 2021 год со следующими функциями в обучающих данных: скорректированная цена закрытия, объем, скользящее среднее и стандартное отклонение скорректированного закрытия за скользящие 20 дней, скорректированная цена закрытия за последние 3 дня. . Затем мы тестируем нашу модель случайного Форреста на невидимых данных с июля 2021 года по август 2021 года. Результаты показаны ниже:

Как можно видеть, модель работала аналогично SVM, за заметным исключением 1398.HK и AAPL, где модель достигла точности хуже, чем предположение 50%.

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

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

Часть 4b: Прогнозирование прибыли на конкретный торговый день

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

XGBoost

Термин «повышение» относится к методике итеративного комбинирования слабых «учащихся» (то есть алгоритмов со слабой предсказательной силой) для формирования алгоритма с более сильной предсказательной силой. Усиление начинается со слабого учащегося (например, алгоритма дерева регрессии) и записывает ошибку между предсказаниями учащегося и фактическими результатами. На каждом этапе итерации он использует ошибку, чтобы улучшить слабого ученика на предыдущем этапе итерации. Если член ошибки вычисляется как отрицательный градиент функции потерь, метод называется «повышение градиента». Экстремальное повышение градиента (также известное как XGBoost) относится к оптимизированной реализации Чена и Гестрина, которая стала популярным алгоритмом контролируемого обучения, особенно для данных финансовых временных рядов.

Здесь мы сначала обучаем алгоритм XGBoost, используя исторические данные с 2010 по 2021 год, и тестируем наш алгоритм XGBoost на невидимых движениях цен с августа 2021 года. Результаты показаны ниже:

Как можно видеть, существует очень широкий спектр результатов производительности от модели XGBoost в зависимости от конкретной акции. 0005.HK (HSBC Bank) показал себя на удивление хорошо, достигнув точности 82%, а прогнозируемая траектория прибыли очень напоминала фактическое ценообразование. Однако этого нельзя сказать об AMZN (Amazon), где резкий подъем на 2-й день набора тестов был полностью пропущен.

Глубокое обучение

Чтобы еще больше повысить производительность моделирования, мы теперь используем алгоритм глубокого обучения с LSTM и CNN для обучения модели.

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

Мы обучаем глубокую нейронную сеть, используя исторические данные с 2010 по 2021 год, и тестируем нашу модель на невидимых движениях цен с августа 2021 года. Результаты показаны ниже:

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

Часть 5: Резюме, выводы и следующие шаги

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

Во-первых, мы обращаемся к более простой проблеме классификации того, будет ли цена определенной акции расти или падать в невидимый торговый день. Мы использовали относительно простой SVM и обнаружили, что он дает хорошие результаты со стабильной ›50% точностью при классификации положительного дня по сравнению с отрицательным. Случайный Форрест, метод ансамбля, использовался, чтобы попытаться улучшить результаты SVM. Но мы не смогли улучшить результаты с помощью Random Forrest; также не было дополнительных функций в обучающих данных.

Во-вторых, мы переходим от простой классификации дня вверх или вниз и переходим к более сложному прогнозированию цены. Мы обнаружили, что алгоритм XGBoost хорошо работал с несколькими акциями из «старой экономики», такими как HSBC (0005.HK), достигая очень высокой точности прогнозирования цен. Это могло быть связано с предсказуемостью движения таких запасов. Однако нам не удалось получить полезный прогноз для некоторых других акций, таких как Amazon (AMZN). Наконец, мы развертываем алгоритм глубокого обучения с LSTM и CNN. К сожалению, нам не удалось добиться более высоких результатов, чем при использовании метода XGBoost. Для достижения более желаемых результатов, вероятно, потребуется дополнительная настройка гиперпараметров, таких как скорость обучения, настройки нейронной сети.

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