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

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

Во-первых, давайте углубимся в 4 алгоритма, которые используются для анализа.

  • Случайные лесные деревья
  • Деревья решений с усилением светового градиента
  • Глубокая нейронная сеть
  • Рекуррентная нейронная сеть с блоками LSTM

С такими пакетами, как sk-learn и light-gbm, реализация многих алгоритмов машинного обучения довольно проста, и вам не нужно знать, что делает алгоритм, хотя полезно понимать, что происходит, чтобы лучше понять работу эти модели.

Деревья решений в случайном лесу

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

Деревья с усилением светового градиента

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

Глубокие нейронные сети

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

Рекуррентная нейронная сеть с блоками LSTM

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

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

Я использовал Alpha Vantage API для сбора моих данных, он предоставляет простые в использовании API с огромным объемом данных бесплатно. Наш прогноз будет основан только на данных по акциям Apple на 10 дней вперед, это сделано для простоты использования. Ниже приведен код, который извлекает все исторические данные временных рядов для Apple за 20 лет и структурирует их в аккуратно сформированный фрейм данных pandas.

Аналогичным образом мы получаем данные для других параметров технического анализа, таких как ADX, RSI, SMA и MACD.

ADX или индекс среднего направления, изобретенный Дж. Уэллсом Уайлдером-младшим, является индикатором силы импульса. Он используется аналитиками для определения относительной силы тренда. ADX идентифицирует сильную положительную тенденцию, когда ADX выше 25, и слабую тенденцию, когда ADX ниже 20. Для получения дополнительной информации об этом прочтите.

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

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

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

Собрав все индикаторы импульса, которые мы могли придумать для анализа, мы объединяем их все в один объединенный фрейм данных.

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

Теперь, когда у нас есть наборы данных, созданные для всех моделей, кроме LSTM, мы можем сохранить их в файлы csv.

Подготовка набора данных для модели рекуррентной нейронной сети

Подготовка данных для рекуррентной нейронной сети немного отличается, поскольку для этого требуется набор данных 3D, а не только что подготовленный 2D.

3 измерения, как указано выше, - это образцы / примеры, временные шаги и характеристики / значения. То, как мы можем интерпретировать это, заключается в том, что все функции по-прежнему являются различными входными данными в наборе данных, такими как open, close, adx ... и т. Д. Временные шаги теперь представляют собой новые строки этих значений, которые по-прежнему представляют наш исходный набор данных, который имеет строки функций, но теперь мы отсекаем это каждые 10 временных шагов и вызываем этот образец данных.

Для этого нам нужно, чтобы данные можно было легко разделить на равные выборки по 10 временных шагов, каждый из которых мы обрезаем набор тестовых данных, чтобы он содержал первые 100 строк, прежде чем мы изменим их для LSTM.

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

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

Прогноз

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

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

Заключение

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

Пожалуйста, дайте мне знать, понравился ли вам этот пост или вы обнаружили какие-либо ошибки в комментариях ниже.