Facebook’s Prophet — очень полезный инструмент с открытым исходным кодом для прогнозирования временных рядов, доступный для Python и R. По их собственным словам:

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

Фейсбук пророк

Вы можете начать работу с Prophet, написав всего несколько строк кода.

import pandas as pd
from prophet import Prophet
# Load the data
df = pd.read_csv('../examples/example_wp_log_peyton_manning.csv')
df.head()
# Build and fit a Prophet model
m = Prophet()
m.fit(df)
# Create a data frame for predictions
future = m.make_future_dataframe(periods=365)
# Make predictions and print them
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

Результатом следующего фрагмента кода являются сделанные прогнозы:

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

Мульти пророк

Именно здесь вступает в игру Multi Prophet. Multi Prophet предназначен для управления всеми вашими моделями за вас. Он предоставляет те же функции, что и Prophet, и использует тот же API. В этой записи блога я расскажу, как начать работу с Multi Prophet, написав всего несколько строк кода.

Для начала давайте подготовим наш набор данных и добавим вторую зависимую переменную.

# Load the data
df = pd.read_csv("../examples/example_retail_sales.csv")
# Add a second dependent variable
df["y1"] = df["y"].apply(lambda x: x + 10 * x / 100)
df.head()

А вот так выглядят наши данные:

Следующий шаг — определить нашу модель, обучить ее и сделать прогнозы.

# Define our model with two dependent variables and train the model
m = multi_prophet.MultiProphet(columns=["y", "y1"], growth="linear")
m.fit(df)
# Make predictions for the next 10 periods
future_df = m.make_future_dataframe(periods=10)
forecast = m.predict(future_df)

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

forecast["y"][['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
forecast["y1"][['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

plots = m.plot(forecast)

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

# Define our configuration
config = {
    "y": {"weekly_seasonality": True, 
          "seasonality_mode": "additive"},
    "y1": {"yearly_seasonality": True, 
           "seasonality_mode": "multiplicative"}
}
# Create a model and plot our predictions
m = multi_prophet.MultiProphet(columns=["y", "y1"], config=config)
m.fit(df)
future_df = m.make_future_dataframe(periods=10)
forecast = m.predict(future_df)
plots = m.plot(forecast)

Вывод

Вот и все! Всего несколькими строками кода вы можете создать несколько настраиваемых моделей Prophet для каждой из ваших зависимых переменных. Multi Prophet также поддерживает другие функции, такие как добавление внешних регрессоров и праздников, построение компонентов вашего прогноза, перекрестная проверка и многое другое. Вы можете найти больше в документации.

Если этот пакет окажется полезным и будет использоваться, я планирую добавить поддержку распараллеливания и Neural Prophet.

Обратная связь и пулреквесты приветствуются!