Собесов

Сценарий ML: ARIMA vs Prophet vs LSTM

ML / Data ScienceTime seriesСредняяSenior

Условие

Когда использовать 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.

Подводные камни

  1. ARIMA на не-стационарной серии: автоматическое differencing не панацея, нужно проверять ACF.
  2. Prophet over-smooths changepoints: важные изменения могут быть утеряны, тюнить changepoint_prior_scale.
  3. LSTM на короткой серии = overfit. Минимум 1000 точек.
  4. Walk-forward CV обязателен для всех методов; random CV переоценивает качество.
  5. 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.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти