Обучення моделі прогнозування часових рядів (Prophet, NeuralProphet, TimesFM)
Prophet, NeuralProphet та TimesFM — три покоління інструментів для прогнозування часових рядів з різними компромісами між простотою, гнучкістю та точністю. Правильний вибір залежить від даних, горизонту та вимог до інтерпретуємості.
Prophet: декомпозиційна модель
Meta Prophet (2017) — адитивна модель:
y(t) = trend(t) + seasonality(t) + holidays(t) + ε(t)
Тренд: кусково-лінійний або логістичний ріст. Changepoints — автоматичне виявлення точок зміни тренду через L1-регуляризацію.
Сезонність: Ряди Фур'є:
- Річна: 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='UA')
m.add_seasonality(name='monthly', period=30.5, fourier_order=5)
m.fit(df) # df з колонками ds, y
Параметри для тюнінгу:
-
changepoint_prior_scale: 0.001-0.5, контролює overfitting тренду -
seasonality_mode: 'additive' для стаціонарних, 'multiplicative' для зростаючих рядів -
fourier_order: більше = гнучкіша сезонність = ризик переобучення
Cross-валідація 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('UA')
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 параметрами, cross-validation
- 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 для одного ряду з cross-validation — 1-2 тижні. Production pipeline з моніторингом та авто-переквалікуванням — 4-6 тижнів.







