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

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

Монтаж

Чтобы использовать Facebook Prophet в Python, вам необходимо установить библиотеку fbprophet с помощью pip install fbprophet. Вам также потребуется установить PyStan, который зависит от Prophet. Вы можете установить PyStan, используя pip install pystan.

Подгонка модели пророка

После того, как вы установили необходимые библиотеки и пакеты, вы можете начать использовать Facebook Prophet, чтобы подогнать модель временных рядов к вашим данным. Первый шаг — загрузить ваши данные в фрейм данных Pandas и переименовать столбцы, чтобы они соответствовали формату, требуемому Prophet. Пророк ожидает, что данные будут иметь два столбца: ds для даты или времени и y для значения временного ряда.

import pandas as pd
from fbprophet import Prophet

# Load the data
df = pd.read_csv('data.csv')

# Rename the columns to match the format required by Prophet
df = df.rename(columns={'ds': 'ds', 'y': 'y'})
           ds   y
0  2018-01-01  10
1  2018-01-02  15
2  2018-01-03  20
3  2018-01-04  25
4  2018-01-05  30

Затем вы можете создать экземпляр класса Prophet и вызвать метод fit, чтобы подогнать модель к данным.

model = Prophet()
model.fit(df)

Вот и все! Теперь вы подогнали модель Пророка к своим данным временного ряда.

Делать прогнозы

Теперь, когда вы подогнали модель Prophet к своим данным, вы можете использовать модель для прогнозирования будущих значений временных рядов. Для этого вы можете использовать метод make_future_dataframe для создания кадра данных будущих дат, а затем передать этот кадр данных методу predict для получения прогнозируемых значений.

# Make future predictions
future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)

Метод make_future_dataframe принимает аргумент periods, который указывает количество будущих периодов для включения в кадр данных. В этом примере мы делаем прогнозы на следующие 365 дней.

Метод predict возвращает кадр данных с прогнозируемыми значениями, а также доверительными интервалами для прогнозов. Вы можете получить доступ к прогнозируемым значениям, используя столбец yhat, и к доверительным интервалам, используя столбцы yhat_lower и yhat_upper.

# Extract the forecasted values
y_hat = forecast['yhat']

# Extract the confidence intervals
y_hat_lower = forecast['yhat_lower']
y_hat_upper = forecast['yhat_upper']

Составление прогноза

После того, как вы сделали прогнозы, вы можете построить прогнозируемые значения вместе с доверительными интервалами, используя метод plot.

# Plot the forecast
model.plot(forecast)

Это создаст график прогнозируемых значений с доверительными интервалами, показанными в виде заштрихованных областей. Вы также можете отобразить исходные данные на том же графике, передав кадр данных df методу plot в качестве дополнительного аргумента.

# Plot the forecast and the original data
model.plot(forecast, df)

Настройка модели

Facebook Prophet включает ряд параметров, которые вы можете настроить, чтобы улучшить соответствие модели вашим данным. Некоторые из ключевых параметров:

  • growth: этот параметр указывает тип тренда, который должна использовать модель. Значение по умолчанию — linear, что предполагает, что тренд является линейной функцией времени. Вы также можете установить для этого параметра значение logistic, чтобы смоделировать тенденцию роста логистики.
  • changepoint_prior_scale: Этот параметр контролирует силу априорного мнения о расположении точек изменения в данных. Большее значение приведет к более гибким точкам изменения, а меньшее значение приведет к более строгим точкам изменения.
  • seasonality_prior_scale: этот параметр контролирует силу априорного мнения о силе сезонности в данных. Большее значение приведет к более гибкой сезонности, а меньшее значение приведет к более ограничительной сезонности.
  • holidays: этот параметр позволяет указать список праздничных событий, которые могут повлиять на данные временного ряда. Вы можете передать кадр данных со столбцами holiday и ds в метод add_country_holidays, чтобы добавить праздники для определенной страны.

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

# Set the growth parameter to logistic
model = Prophet(growth='logistic')

# Set the changepoint_prior_scale parameter to 0.5
model = Prophet(changepoint_prior_scale=0.5)

# Set the seasonality_prior_scale parameter to 10
model = Prophet(seasonality_prior_scale=10)

# Set the holidays parameter to a list of holiday events
holidays = pd.DataFrame({
  'holiday': 'holiday_name',
  'ds': pd.to_datetime(['2018-01-01', '2018-07-04', '2018-12-25']),
  'lower_window': 0,
  'upper_window': 0,
})
model = Prophet(holidays=holidays)

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

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