машинное обучение
August 10, 2021

Быстрый старт предсказаний временных рядов с Facebook Prophet

Рассмотрим основы применения разработанной Facebook библиотеки для предсказаний временных данных - Prophet.

Для изучения вопроса построим датафрейм:

from fbprophet import Prophet
import numpy as np
import pandas as pd

days = pd.date_range(start='2019-01-01', end='2021-03-01', freq='D')
df = pd.DataFrame({'per':days,'data':np.arange(len(days))})
# приводим dataframe к нужному формату
df.columns = ['ds', 'y']

df.tail()

Отметим, что для библиотеки важно, чтобы входом был датафрейм с двумя колонками ds и y. В первом хранятся даты формата YYYY-MM-DD или отметки времени - YYYY-MM-DD HH:MM:SS. В другом столбце хранятся численные значения предсказываемой метрики.

Использование модели следует канонам sklearn и предполагает создание экземпляра класса и вызова методов fit и predict. Важным нюансом является то, что предсказание осуществляется для объекта DataFrame, включающего будущие даты. Для его построения используется вспомогательный метод make_future_dataframe:

fit_df = df[df.ds<pd.Timestamp('2021-01-01', freq='D')]
model = Prophet(daily_seasonality=True)
model.fit(fit_df)

future = model.make_future_dataframe(periods=df.shape[0]-fit_df.shape[0])

forecast = model.predict(future)

Обратите внимание на результаты, модель легко установила наши простые зависимости (приращение значения на единицу):

Используя метод plot можно начертить предсказания: