В этом посте я покажу вам, как прогнозировать цены на акции, используя публично доступную модель прогнозирования от команды Facebook Data Science: The Prophet.

1. Введение

1.1. Временные ряды и модели прогнозирования

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

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

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

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

Наблюдение: данные временного ряда записываются в дискретном временном масштабе.

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

1.2 Модель прогнозирования: Пророк Facebook

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

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

Математическое уравнение, лежащее в основе модели Пророка, определяется как:

y(t) = g(t) + s(t) + h(t) + e(t)

  • где, g (t) представляет тренд. Prophet использует кусочно-линейную модель для прогнозирования тенденций.
  • s (t) представляет периодические изменения (еженедельно, ежемесячно, ежегодно).
  • h (t) представляет собой влияние праздников (напомним: праздники влияют на бизнес).
  • e (t) - член ошибки.

Процедура подбора модели Prophet обычно очень быстрая (даже для тысяч наблюдений) и не требует предварительной обработки данных. Он также имеет дело с отсутствующими данными и выбросами.

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

Давайте начнем !

2. Получение данных истории курсов акций

Благодаря Yahoo finance мы можем получать данные бесплатно. Используйте следующую ссылку, чтобы получить историю курсов акций Google: https://finance.yahoo.com/quote/GOOG/history?period1=1433548800&period2=1591833600&interval=1d&filter=history&frequency=1d

Вы должны увидеть следующее:

Нажмите Загрузить и сохраните файл .csv локально на своем компьютере.

Данные за период с 2015 по настоящее время (2020)!

3. Рабочий пример Python

Теперь, когда у нас есть данные, давайте проверим их, построим модель и спрогнозируем курс акций!

3.1. Загрузите и проверьте данные

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Load the dataset using pandas
data = pd.read_csv("/Users/loukas/Downloads/GOOG.csv") 
data.head(5)

Приведенный выше код должен напечатать следующее:

Теперь давайте напечатаем некоторую статистику, такую ​​как среднее, медианное, минимальное, максимальное и стандартное отклонение значений для вышеуказанных функций (столбцов).

data.describe()

За последние 5 лет (2015–2020 гг.) средняя цена акций на закрытии составила 983,45! Действительно высоко!

3.2. Постройте прогнозную модель

А теперь перейдем к моделированию. Мы будем только использовать даты и Закрыть цену в качестве функций для нашей модели.

# Select only the important features i.e. the date and price
data = data[["Date","Close"]] # select Date and Price
# Rename the features: These names are NEEDED for the model fitting
data = data.rename(columns = {"Date":"ds","Close":"y"}) #renaming the columns of the dataset
data.head(5)

Последняя команда python должна вернуть первые 5 строк нашего набора данных. Вы должны увидеть что-то вроде этого:

Здесь ds - это дата, а y - это цена акций Google.

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

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

Затем мы импортируем класс Prophet из модуля fbprophet и затем создаем объект класса Prophet.

Примечание. Страница модели на github выглядит так: https://github.com/facebook/prophet

Чтобы установить модуль на вашу консоль: pip install fbprophet.

from fbprophet import Prophet
m = Prophet(daily_seasonality = True) # the Prophet class (model)
m.fit(data) # fit the model using all data

Вы должны увидеть это после примерки:

Оптимизация завершена нормально:
Обнаружена сходимость: величина относительного градиента ниже допуска

3.3. Постройте прогнозы

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

future = m.make_future_dataframe(periods=365) #we need to specify the number of days in future
prediction = m.predict(future)
m.plot(prediction)
plt.title("Prediction of the Google Stock Price using the Prophet")
plt.xlabel("Date")
plt.ylabel("Close Stock Price")
plt.show()

Модель использовала все данные для обучения (черные точки) и предсказала будущую цену акций с июня 2020 года по июнь 2021 года! Синяя тень - доверительный интервал.

Заключение. Согласно прогнозу модели, в июне 2021 года цена акций Google будет около 1600.

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

Наблюдение: резкое падение в марте 2020 года из-за блокировки COVID-19.

БОНУС

3.4. Постройте тренд, недельный, сезонный, годовой и дневной компоненты.

Если вы хотите увидеть компоненты прогноза, то есть тренд, недельный, сезонный, годовой и дневной компоненты, вы можете сделать это с помощью следующей команды.

m.plot_components(prediction)
plt.show()

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

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

Вот и все, ребята! Надеюсь, вам понравилась эта статья!

использованная литература

[1] https://facebook.github.io/prophet/docs/quick_start.html#python-api

[2] https://en.wikipedia.org/wiki/Additive_model

Следите за обновлениями и поддержите эти усилия

Если вам понравилась эта статья, и вы нашли ее полезной, подпишитесь на меня, и я буду видеть все мои новые сообщения.

Вопросов? Отправьте их как комментарий, и я отвечу как можно скорее.

Последние посты













Свяжись со мной