ARIMA на собеседовании Data Scientist
Карьерник — 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} + ε_tMA(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)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 проще и часто точнее.
Связанные темы
- Time series CV и features на собесе DS
- Cross-validation на собесе DS
- Loss функции на собесе DS
- Linear vs logistic regression на собесе DS
- Подготовка к собесу Data Scientist
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+ вопросами для собесов.