В этом посте я покажу вам, как прогнозировать цены на акции, используя публично доступную модель прогнозирования от команды 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
Следите за обновлениями и поддержите эти усилия
Если вам понравилась эта статья, и вы нашли ее полезной, подпишитесь на меня, и я буду видеть все мои новые сообщения.
Вопросов? Отправьте их как комментарий, и я отвечу как можно скорее.
Последние посты
Свяжись со мной
- LinkedIn: https://www.linkedin.com/in/serafeim-loukas/
- ResearchGate: https://www.researchgate.net/profile/Serafeim_Loukas
- EPFL профиль: https://people.epfl.ch/serafeim.loukas
- Стек Переполнение: https://stackoverflow.com/users/5025009/seralouk