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. Он может обрабатывать отсутствующие данные и сезонность и включает в себя ряд встроенных функций для моделирования тенденций. Настраивая ключевые параметры модели, вы можете улучшить соответствие модели вашим данным и получать более точные прогнозы.