ARIMA на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

ARIMA — классика time series. На собесе DS: «как работает ARIMA», «зачем ADF тест», «когда SARIMA, когда Prophet». Senior — нюансы Box-Jenkins methodology, residual analysis.

Stationarity и ADF тест

Stationary series — статистические свойства не меняются со временем (mean, variance, autocorrelation).

ARIMA требует stationary input. Иначе модель плохо обобщает.

ADF (Augmented Dickey-Fuller). H0: ряд имеет unit root (нестационарный). p-value < 0.05 → отвергаем H0 → ряд стационарный.

from statsmodels.tsa.stattools import adfuller

result = adfuller(ts)
print(f"ADF stat: {result[0]}, p-value: {result[1]}")

KPSS — обратное направление: H0 = stationary. Дополнительная проверка.

Visualization. Plot ряд + rolling mean + rolling std. Stationary — mean / std примерно постоянны.

Differencing. Если ряд не стационарен — y_t - y_{t-1} (first difference). Часто превращает в stationary.

AR, MA, I компоненты

ARIMA(p, d, q):

  • AR(p) — Autoregressive. Зависит от прошлых значений.
  • I(d) — Integrated. Степень differencing.
  • MA(q) — Moving Average. Зависит от прошлых ошибок.

AR(p):

y_t = c + φ_1·y_{t-1} + φ_2·y_{t-2} + ... + φ_p·y_{t-p} + ε_t

MA(q):

y_t = c + ε_t + θ_1·ε_{t-1} + ... + θ_q·ε_{t-q}

ARMA(p,q) — комбинация. ARIMA(p,d,q) — ARMA на d-ой разности.

Выбор p, d, q через ACF/PACF

ACF (Autocorrelation Function). Корреляция y_t с y_{t-k}.

PACF (Partial ACF). Корреляция y_t с y_{t-k}, удалив влияние промежуточных лагов.

Эмпирические правила:

  • Чистый AR(p): PACF обрывается на лаге p, ACF постепенно убывает.
  • Чистый MA(q): ACF обрывается на лаге q, PACF постепенно убывает.
  • ARMA: обе постепенно убывают.

Auto-ARIMA. pmdarima.auto_arima — перебор параметров по AIC / BIC.

from pmdarima import auto_arima
model = auto_arima(ts, seasonal=False, stepwise=True)
forecast = model.predict(n_periods=30)
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

SARIMA

SARIMA(p,d,q)(P,D,Q,m) — ARIMA + сезонная компонента.

m — длина сезона (12 — месячные данные с годовой сезонностью, 7 — дневные с недельной).

(P,D,Q) — те же параметры, но на сезонной компоненте.

from statsmodels.tsa.statespace.sarimax import SARIMAX
model = SARIMAX(ts, order=(1,1,1), seasonal_order=(1,1,1,12)).fit()

SARIMAX — добавляет exogenous variables (внешние регрессоры).

Prophet и современные альтернативы

Prophet (Facebook). Декомпозиция:

y(t) = trend(t) + seasonality(t) + holidays(t) + ε(t)
  • Trend — piecewise linear / logistic.
  • Seasonality — Fourier series.
  • Holidays — выходные / праздники.
from prophet import Prophet
model = Prophet(yearly_seasonality=True, weekly_seasonality=True)
model.fit(df)
forecast = model.predict(future)

Плюсы: простая, robust к missing values, понятная декомпозиция.

Современные альтернативы:

  • NeuralProphet — Prophet + neural net.
  • N-BEATS — pure DL для time series.
  • Temporal Fusion Transformer (TFT) — attention для time series.
  • DeepAR (Amazon) — RNN для probabilistic forecasting.
  • GluonTS — фреймворк AWS.
  • darts — Python библиотека с десятками алгоритмов.

Для небольшого ряда — ARIMA / Prophet / ETS. Для тысяч рядов с фичами — gradient boosting (LightGBM с lag features) или DL.

Частые ошибки

ARIMA на нестационарном ряду без differencing. Модель плохая. Сначала ADF + differencing.

Тренировать на полном ряду. Утечка будущего в прошлое. Train/test split с временной осью.

Cross-validation random. Time series требует expanding / sliding window.

Не учитывать сезонность. ARIMA(p,d,q) пропускает sin-волну. Использовать SARIMA или явный seasonal lag.

Тестировать residuals только Ljung-Box. Тест на autocorrelation полезен, но не достаточен. Plot residuals vs time, Q-Q.

Сравнивать модели только по AIC. AIC — proxy. Test set MAE / RMSE — финальное слово.

Использовать ARIMA для тысяч SKU. Lag features + LightGBM проще и часто точнее.

Связанные темы

FAQ

ARIMA подходит для multi-step forecast?

Да, через rolling forecast. Точность падает с горизонтом — ε накапливается.

Что такое exogenous variables?

Внешние регрессоры (погода, рекламные расходы). SARIMAX или регрессия с lag features принимает их.

ARIMA для intermittent demand?

Нет. Для редких событий — Croston, ZIP-models, специальные методы.

Это официальная информация?

Нет. Статья основана на классике (Box-Jenkins «Time Series Analysis»), документации statsmodels и Prophet.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.