Prophet – прогнозирование временных рядов от Facebook

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Prophet – прогнозирование временных рядов от Facebook: точные и интерпретируемые модели анализа данных

SEO Title: Prophet – прогнозирование временных рядов от Facebook: настройка, компоненты, прогноз
Meta Description: Освойте Prophet – прогнозирование временных рядов от Facebook: сезонность, праздники, визуализация, интерпретация и точные прогнозы.


Введение в Prophet

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


Основные принципы работы алгоритма

Модель Prophet базируется на аддитивной модели:

y(t) = g(t) + s(t) + h(t) + εₜ

где:

  • g(t) — тренд (линейный или логистический рост)

  • s(t) — сезонность (дневная, недельная, годовая)

  • h(t) — праздничные дни и события

  • εₜ — ошибка модели (шум)

Prophet автоматически подбирает параметры модели и хорошо справляется с пропущенными значениями, выбросами и нестандартными колебаниями.


Установка и подключение Prophet

Установка осуществляется командой:

bash
pip install prophet

Для Windows и macOS может потребоваться установка дополнительных зависимостей: pystan, cmdstanpy.

Подключение:

python
from prophet import Prophet

Подготовка данных для модели

Данные должны содержать два столбца:

  • ds — временная метка (datetime)

  • y — значение временного ряда

Пример:

python
import pandas as pd df = pd.read_csv('example.csv') df['ds'] = pd.to_datetime(df['date']) df['y'] = df['value']

Обучение модели и построение прогноза

python
model = Prophet() model.fit(df) future = model.make_future_dataframe(periods=30) forecast = model.predict(future)

Функция make_future_dataframe позволяет указать горизонт прогноза в днях. Возвращается DataFrame с точками прогноза, доверительными интервалами и компонентами сезонности.


Визуализация прогнозов

python
from prophet.plot import plot_plotly plot_plotly(model, forecast)

Также доступна встроенная функция model.plot(forecast) для статической визуализации.


Компонентный анализ временного ряда

python
model.plot_components(forecast)

Эта функция визуализирует:

  • тренд

  • недельную сезонность

  • годовую сезонность

  • влияние праздничных дней (если заданы)


Учёт праздничных и нестандартных дней

Для включения праздничных дней:

python
holidays = pd.DataFrame({ 'holiday': 'holiday_name', 'ds': pd.to_datetime(['2023-01-01', '2023-12-25']), 'lower_window': 0, 'upper_window': 1, }) model = Prophet(holidays=holidays)

Параметры lower_window и upper_window определяют временное влияние праздника.


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

Prophet поддерживает:

  • seasonality_mode: 'additive' или 'multiplicative'

  • changepoint_prior_scale: чувствительность к изменениям тренда

  • seasonality_prior_scale: регуляризация сезонных компонентов

  • daily_seasonality, weekly_seasonality, yearly_seasonality: True/False

Пример:

python
model = Prophet( seasonality_mode='multiplicative', changepoint_prior_scale=0.05 )

Прогнозирование с интервальной неопределённостью

В модели по умолчанию формируются 95% доверительные интервалы. Их можно изменить:

python
model = Prophet(interval_width=0.8)

Результаты содержат поля yhat_lower и yhat_upper.


Ежедневные, недельные и годовые сезонности

Можно добавить пользовательскую сезонность:

python
model.add_seasonality(name='monthly', period=30.5, fourier_order=5)

Это особенно полезно для бизнес-кейсов с нестандартной повторяемостью.


Обработка пропущенных значений и выбросов

Prophet автоматически интерполирует пропуски и устойчив к выбросам. Рекомендуется не заполнять пропущенные значения вручную. Для удаления выбросов используется предварительный анализ и фильтрация данных.


Интеграция с Pandas, Scikit-learn и PyCaret

Prophet полностью совместим с Pandas, а также может быть встроен в пайплайны Scikit-learn через обертки, такие как ProphetRegressor из skforecast или PyCaret Time Series.

Пример в PyCaret:

python
from pycaret.time_series import * exp = setup(df, fold=3, session_id=123) model = create_model('prophet')

Примеры практического применения Prophet

  • Прогнозирование продаж в розничной торговле

  • Планирование загрузки серверов и пропускной способности

  • Анализ посещаемости веб-сайтов

  • Предсказание производственных циклов в промышленности

  • Моделирование и предсказание спроса в логистике


Часто задаваемые вопросы

Что такое Prophet?

Это библиотека Facebook для прогнозирования временных рядов с учетом трендов, сезонностей и праздников.

На каких языках доступна библиотека?

Основные реализации — Python и R.

Подходит ли Prophet для больших данных?

Для больших наборов рекомендуется использовать cmdstanpy и агрегировать данные.

Можно ли использовать Prophet для регрессии?

Да, через добавление регрессоров с помощью add_regressor.

Как обработать несколько временных рядов?

Prophet не поддерживает мультивариантные ряды по умолчанию. Обработка производится по каждому идентификатору отдельно.

Полный справочник по ключевым функциям и методам библиотеки Prophet для Python

Установка

bash
pip install prophet

(Если возникают ошибки — убедитесь, что установлены зависимости: pystan, cmdstanpy, numpy, pandas.)


Формат входных данных

Требование Описание
ds Столбец с датами (datetime, string или pandas.Timestamp).
y Целевая переменная (числовая).
DataFrame Prophet принимает данные в виде pandas.DataFrame с колонками ds и y.

Основные шаги работы

1. Инициализация модели

python
from prophet import Prophet model = Prophet()

Можно указать параметры:

python
model = Prophet( daily_seasonality=True, yearly_seasonality=True, weekly_seasonality=True, seasonality_mode='additive' # или 'multiplicative' )

2. Обучение модели

python
model.fit(df) # df должен содержать колонки ds и y

3. Создание будущего датафрейма

python
future = model.make_future_dataframe(periods=30) # на 30 дней вперёд

Аргументы:

  • periods — сколько шагов предсказать;

  • freq='D' — шаг предсказания (день, час и т.д.).


4. Предсказание

python
forecast = model.predict(future)

Результат — DataFrame с колонками:

  • ds — даты,

  • yhat — прогноз,

  • yhat_lower / yhat_upper — границы доверительного интервала,

  • компоненты тренда, сезонности и праздников (если включены).


5. Визуализация результатов

python
model.plot(forecast) model.plot_components(forecast)

Работа с сезонностями

Метод Описание
Prophet(..., yearly_seasonality=True) Включает встроенную годовую сезонность.
add_seasonality(name, period, fourier_order) Добавление пользовательской сезонности.
model.add_country_holidays(country_name='RU') Добавляет праздничные дни указанной страны.

Работа с выбросами

Подход Описание
Добавление регрессора Можно указать бинарный признак для события или выброса.
Удаление точек Исключение "аномальных" значений вручную из обучающего датасета.

Пользовательские регрессоры

Метод Описание
model.add_regressor('column_name') Добавляет внешний фактор, который будет влиять на прогноз.
Данные в fit() и predict() должны содержать эту колонку.  

Получение параметров модели

Атрибут / Метод Описание
model.params Параметры после обучения (например, коэффициенты регрессоров).
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']] Основной прогноз.
forecast[['trend', 'seasonal', 'holidays']] Компоненты прогноза.

Пример полного прогноза

python
import pandas as pd from prophet import Prophet df = pd.read_csv("timeseries.csv") # Должен содержать колонки 'ds' и 'y' model = Prophet(yearly_seasonality=True) model.fit(df) future = model.make_future_dataframe(periods=60) forecast = model.predict(future) model.plot(forecast) model.plot_components(forecast)

Поддерживаемые частоты (freq)

Частота Описание
'D' День (daily)
'H' Час
'W' Неделя
'M' Месяц
'Y' Год

Особенности Prophet

  • Автоматически моделирует тренд, сезонность, праздники.

  • Поддерживает интервалы неопределённости.

  • Простой API, совместимый с pandas.

  • Можно использовать внешние регрессоры.

  • Не требует ручной настройки параметров ARIMA.


Заключение: Prophet как надёжный инструмент прогнозирования

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