Модель Facebook Prophet с использованием Python
Учебное пособие по созданию модели Facebook Prophet с помощью Python.
В этой статье я расскажу вам, как прогнозировать цены на акции с помощью модели Facebook Prophet, используя язык программирования Python, который используется для задач прогнозирования временных рядов.
Введение в модель Facebook Prophet
Исследовательская группа Facebook разработала более простую реализацию прогнозирования временных рядов с помощью своей новой библиотеки под названием Prophet (Предсказатель). Редко можно встретить аналитика, способного давать качественные прогнозные данные. Это одна из причин, по которой исследовательская группа Facebook придумала легко доступный способ использования передовых концепций для прогнозирования временных рядов.
Мы, пользователи Python, можем легко познакомиться с этой библиотекой, потому что она использует API, похожий на Scikit-Learn. Основная цель команды Prophet – дать возможность экспертам и неспециалистам делать качественные прогнозы, удовлетворяющие существующие запросы.
На мой взгляд, Prophet лучше всего работает с наборами данных, на которые сильно влияет сезонность, например, коммунальные платежи, количество посетителей ресторанов и т. д.
Реализация модели Facebook Prophet с помощью Python
А теперь давайте проанализируем цены на акции и воспользуемся моделью Facebook Prophet с языком программирования Python. Я начну с импорта необходимых библиотек Python и набора данных:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
from fbprophet import Prophet
df = pd.read_csv('all_stocks_5yr.csv')
df.head()
Результат:
|
date |
open |
high |
low |
close |
volume |
Name |
|
|---|---|---|---|---|---|---|---|
|
0 |
2013-02-08 |
15.07 |
15.12 |
14.63 |
14.75 |
8407500 |
AAL |
|
1 |
2013-02-11 |
14.89 |
15.01 |
14.26 |
14.46 |
8882000 |
AAL |
|
2 |
2013-02-12 |
14.45 |
14.51 |
14.10 |
14.27 |
8126000 |
AAL |
|
3 |
2013-02-13 |
14.30 |
14.94 |
14.25 |
14.66 |
10259500 |
AAL |
|
4 |
2013-02-14 |
14.94 |
14.96 |
13.16 |
13.99 |
31879900 |
AAL |
Здесь я заменю название столбца на «Ticks»:
1 df = df.rename(columns={'Name': 'Ticks'})
В этой простой реализации модели Facebook Prophet на Python я проанализирую акции Amazon и посмотрю, как будет выглядеть тренд в ближайшем будущем для этих акций на основе прошлых цен на акции:
amzn = df.loc[df['Ticks'] == 'AMZN']
Нам нужно убедиться, что столбец даты относится к категориальному типу или типу данных. В нашем случае столбец даты является категориальным типом данных, поэтому нам нужно изменить его на DateTime. Перед этим я сначала создам копию данных, чтобы избежать Предупреждений (SettingWarning):
amzn_df = amzn.copy() # Change to datetime datatype. amzn_df.loc[:, 'date'] = pd.to_datetime(amzn.loc[:,'date'], format="%Y/%m/%d")
Визуализация данных
Теперь давайте нарисуем наши данные, чтобы увидеть, для чего нам нужно создать модель:

Использование модели Facebook Prophet с Python
Шаги по использованию шаблона Facebook Prophet:
- Обязательно замените цену закрытия на 'y' и дату на 'ds'.
- Подгоните этот фрейм данных к Prophet, чтобы обнаружить будущие закономерности.
- Предскажите цены выше и ниже цены закрытия.
Теперь давайте посмотрим, как использовать модель Facebook Prophet с помощью языка программирования Python:
m = Prophet()
# Drop the columns
ph_df = amzn_df.drop(['open', 'high', 'low','volume', 'Ticks'], axis=1)
ph_df.rename(columns={'close': 'y', 'date': 'ds'}, inplace=True)
ph_df.head()
Результат:
|
ds |
y |
|
|---|---|---|
|
46387 |
2013-02-08 |
261.95 |
|
46388 |
2013-02-11 |
257.21 |
|
46389 |
2013-02-12 |
258.70 |
|
46390 |
2013-02-13 |
269.47 |
|
46391 |
2013-02-14 |
269.24 |
m = Prophet()
m.fit(ph_df)
# Create Future dates
future_prices = m.make_future_dataframe(periods=365)
# Predict Prices
forecast = m.predict(future_prices)
import matplotlib.dates as mdates
# Dates
starting_date = dt.datetime(2018, 4, 7)
starting_date1 = mdates.date2num(starting_date)
trend_date = dt.datetime(2018, 6, 7)
trend_date1 = mdates.date2num(trend_date)
pointing_arrow = dt.datetime(2018, 2, 18)
pointing_arrow1 = mdates.date2num(pointing_arrow)
# Learn more Prophet tomorrow and plot the forecast for amazon.
fig = m.plot(forecast)
ax1 = fig.add_subplot(111)
ax1.set_title("Amazon Stock Price Forecast", fontsize=16)
ax1.set_xlabel("Date", fontsize=12)
ax1.set_ylabel("Close Price", fontsize=12)
# Forecast initialization arrow
ax1.annotate('Forecast \n Initialization', xy=(pointing_arrow1, 1350), xytext=(starting_date1,1700),
arrowprops=dict(facecolor='#ff7f50', shrink=0.1),
)
# Trend emphasis arrow
ax1.annotate('Upward Trend', xy=(trend_date1, 1225), xytext=(trend_date1,950),
arrowprops=dict(facecolor='#6cff6c', shrink=0.1),
)
ax1.axhline(y=1260, color='b', linestyle='-')
plt.show()

fig2 = m.plot_components(forecast) plt.show()
m = Prophet(changepoint_prior_scale=0.01).fit(ph_df)
future = m.make_future_dataframe(periods=12, freq='M')
fcst = m.predict(future)
fig = m.plot(fcst)
plt.title("Monthly Prediction \n 1 year time frame")
plt.show()

Наблюдения:
Из описанных визуализаций выше мы можем заметить, что:
- Курс акций Amazon с каждым годом демонстрирует признаки восходящего тренда.
- Цена акций Amazon показывает признаки восходящего тренда в январе (декабрьские продажи, как правило, повышают цену акций Amazon).
- Недельный тренд цен на акции отсутствует.
Надеюсь, вам понравилась эта статья о реализации модели Facebook Prophet с помощью языка программирования Python.



