Обучение модели предсказания временных рядов (Prophet, NeuralProphet, TimesFM)
Prophet, NeuralProphet и TimesFM — три поколения инструментов для прогнозирования временных рядов с разными компромиссами между простотой, гибкостью и точностью. Правильный выбор зависит от данных, горизонта и требований к интерпретируемости.
Prophet: декомпозиционная модель
Meta Prophet (2017) — аддитивная модель:
y(t) = trend(t) + seasonality(t) + holidays(t) + ε(t)
Trend: кусочно-линейный или логистический рост. Changepoints — автоматическое обнаружение точек изменения тренда через L1-регуляризацию.
Seasonality: Ряды Фурье:
- Годовая: N=10 (default)
- Недельная: N=3
- Пользовательская: любой период
Обучение и тюнинг:
from prophet import Prophet
import pandas as pd
m = Prophet(
changepoint_prior_scale=0.05, # гибкость тренда
seasonality_prior_scale=10.0, # гибкость сезонности
holidays_prior_scale=10.0,
seasonality_mode='multiplicative' # для данных с ростом
)
m.add_country_holidays(country_name='RU')
m.add_seasonality(name='monthly', period=30.5, fourier_order=5)
m.fit(df) # df с колонками ds, y
Параметры для тюнинга:
-
changepoint_prior_scale: 0.001-0.5, контролирует overfit к тренду -
seasonality_mode: 'additive' для стационарных, 'multiplicative' для растущих рядов -
fourier_order: больше = гибче сезонность = риск переобучения
Кросс-валидация Prophet:
from prophet.diagnostics import cross_validation, performance_metrics
df_cv = cross_validation(m, initial='730 days', period='180 days', horizon='365 days')
df_p = performance_metrics(df_cv)
NeuralProphet
NeuralProphet (2021) = Prophet + нейросетевые компоненты:
- Авторегрессивный компонент (AR-Net): захватывает нелинейные лаговые зависимости
- Lagged regressors: нелинейное влияние внешних факторов
- Обучение через PyTorch, значительно быстрее MCMC-Prophet
from neuralprophet import NeuralProphet
m = NeuralProphet(
n_forecasts=7, # горизонт прогноза
n_lags=14, # число лагов для AR
seasonality_mode='auto',
learning_rate=0.01
)
m = m.add_country_holidays('RU')
metrics = m.fit(df, freq='D', validation_df=df_val)
Когда NeuralProphet лучше Prophet:
- Есть нелинейные лаговые зависимости
- Нужны multiple-step ahead прогнозы с конкретными шагами
- Доступны lagged external regressors (погода с задержкой, продажи конкурентов)
TimesFM: Foundation Model от Google
TimesFM (2024) — pretrained foundation model для zero-shot прогнозирования:
import timesfm
tfm = timesfm.TimesFm(
context_len=512,
horizon_len=128,
input_patch_len=32,
output_patch_len=128,
num_layers=20,
model_dims=1280,
backend='gpu'
)
tfm.load_from_checkpoint(repo_id="google/timesfm-1.0-200m")
# Zero-shot inference
forecast_input = [np.array(historical_data)]
frequency_input = [0] # 0=high freq, 1=low freq
point_forecast, experimental_quantile_forecast = tfm.forecast(
forecast_input, freq=frequency_input
)
Преимущества TimesFM:
- Zero-shot: не требует обучения на ваших данных
- Быстрый старт: первый прогноз за минуты
- Сильный результат на большинстве бизнес-задач из коробки
Ограничения:
- Не учитывает known future covariates (праздники, промо) без fine-tuning
- Ограниченная интерпретируемость
- Требует значимого контекста (> 500 точек оптимально)
Сравнительный выбор
| Критерий | Prophet | NeuralProphet | TimesFM |
|---|---|---|---|
| Нужна интерпретируемость | ✓✓ | ✓ | ✗ |
| Есть known future events | ✓✓ | ✓✓ | ✗ |
| Мало данных (< 2 лет) | ✓ | ✓ | ✓✓ |
| Нелинейные лаги важны | ✗ | ✓✓ | ✓ |
| Нужна высшая точность | ✗ | ✓ | ✓✓ |
| Множество рядов (>1000) | ✗ | ✓ | ✓✓ |
Практика обучения и валидации
Pipeline обучения (пример с Prophet):
- Подготовка данных: ресемплинг к нужной частоте, обработка пропусков (interpolation / forward fill)
- Анализ: ACF/PACF, decompose, holiday analysis
- Baseline: Seasonal Naive (прогноз = значение год назад)
- Prophet fit с default params, кросс-валидация
- Hyperparameter search: Optuna / grid search по 4-6 параметрам
- Ансамблирование с конкурентом (ETS или NeuralProphet)
- Productionization: Airflow DAG, MLflow tracking, API endpoint
Метрики сравнения: SMAPE, MASE (Mean Absolute Scaled Error — нормирован на Seasonal Naive), Winkler Score для интервальных прогнозов.
Сроки: настройка и обучение Prophet/NeuralProphet для одного ряда с кросс-валидацией — 1-2 недели. Production pipeline с мониторингом и автопереобучением — 4-6 недель.







