Условие
Когда использовать ARIMA, Prophet, LSTM, GBDT для прогноза?
Решение
Подход
| ARIMA | Prophet | LSTM | GBDT (LightGBM) | |
|---|---|---|---|---|
| Stationarity req | да | нет | нет | нет |
| Сезонность | SARIMA explicit | автоматически | learn | через features |
| Множество серий | нет (по одной) | по одной | да (с panel) | да |
| Exogenous regressors | ARIMAX | да | да | да |
| Holiday calendar | вручную | встроено | вручную | через features |
| Скорость train | быстро | быстро | медленно | быстро |
| Интерпретация | формула | components | плохо | feature importance |
| Малая серия (n<100) | да | да | нет | плохо |
ARIMA(p,d,q)
(1 − Σ φ_i L^i)(1 − L)^d y_t = (1 + Σ θ_j L^j)·ε_t
p — autoregressive, d — differencing для stationarity, q — MA. Выбираются через ACF/PACF и AIC.
from statsmodels.tsa.arima.model import ARIMA
model = ARIMA(y, order=(2,1,2), seasonal_order=(1,1,1,7))
res = model.fit()
forecast = res.forecast(steps=14)Prophet
Additive model: y(t) = trend(t) + seasonality(t) + holidays(t) + ε. Trend — piecewise linear with automatic changepoints. Seasonality — Fourier series.
from prophet import Prophet
df = pd.DataFrame({'ds': dates, 'y': sales})
m = Prophet(yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=False,
changepoint_prior_scale=0.05)
m.add_regressor('promo')
m.fit(df)
future = m.make_future_dataframe(periods=30)
future['promo'] = ...
forecast = m.predict(future)LSTM / Transformer
Для multivariate, длинных серий, сложных нелинейных зависимостей. Не для серии из 200 точек.
import torch.nn as nn
class LSTMForecast(nn.Module):
def __init__(self, n_features, hidden=64, horizon=7):
super().__init__()
self.lstm = nn.LSTM(n_features, hidden, batch_first=True)
self.head = nn.Linear(hidden, horizon)
def forward(self, x):
out, _ = self.lstm(x)
return self.head(out[:, -1])GBDT с lag features
Часто работает лучше всех на panel data (много серий). Лаги, rolling agg, calendar features — описано в отдельном вопросе. M5 competition выиграл LightGBM.
Когда что
- Одна короткая серия (<500 точек), explicit AR pattern: ARIMA.
- Одна серия с трендом и сезонностью + holidays: Prophet.
- Panel из тысяч серий: LightGBM с lag features (M5 winner).
- Длинные multivariate серии, нелинейности: LSTM / Transformer / N-BEATS.
Подводные камни
- ARIMA на не-стационарной серии: автоматическое differencing не панацея, нужно проверять ACF.
- Prophet over-smooths changepoints: важные изменения могут быть утеряны, тюнить
changepoint_prior_scale. - LSTM на короткой серии = overfit. Минимум 1000 точек.
- Walk-forward CV обязателен для всех методов; random CV переоценивает качество.
- Exogenous regressors на forecast horizon должны быть известны (например, weather forecast). Если нет — нужен под-forecast.
Эталонный ответ
ARIMA: одна короткая серия с явным AR/MA. Prophet: одна серия с трендом + сезонностью + holidays, удобная. LSTM/Transformer: длинные multivariate. GBDT с lag features: panel из тысяч серий — M5 winner. Walk-forward CV всегда, не random.