Time Series на собеседовании Data Scientist
Зачем time series на собесе DS
Прогноз спроса, capacity planning, anomaly detection, аналитика метрик — задачи, где нужны временные ряды. На собесе DS в маркетплейсах (Ozon / WB), supply chain командах, ML для финансов time series — отдельный блок.
В applied-командах задачи практические: «прогноз спроса на SKU», «обнаружь аномалию в DAU». В research — модели ARIMA, Prophet, GluonTS, нейросетевые time-series подходы. На собесе Data Scientist минимум — понимать разницу batch ML и temporal ML.
Чем time series отличается от обычной задачи
Автокорреляция: значение в момент t зависит от t-1, t-2, .... Нельзя смешивать порядок наблюдений.
Time-based split: train = прошлое, validation = более позднее прошлое, test = самое свежее. Random split = leak в будущее, ROC-AUC взрывается.
Сезонность: дневная (24h), недельная (7d), годовая (365d). Нужно обнаруживать и моделировать.
Тренд: долгосрочное направление. Может быть линейным, экспоненциальным, кусочно-линейным.
Non-stationarity: mean / variance меняются со временем. Многие методы требуют сделать ряд stationary (через differencing).
Базовая декомпозиция
Любой ряд можно разложить:
y(t) = trend(t) + seasonal(t) + residual(t) -- additive
y(t) = trend(t) * seasonal(t) * residual(t) -- multiplicativeAdditive — если амплитуда сезонности не меняется со временем. Multiplicative — если растёт пропорционально тренду.
Классические модели
Naive: y(t+1) = y(t) или y(t+1) = y(t-7) (seasonal naive). Baseline.
Moving average: среднее за N последних точек. Сглаживает шум.
Exponential smoothing (Holt-Winters): взвешенное среднее с экспоненциально убывающими весами. Прогнозирует уровень + тренд + сезонность.
ARIMA(p, d, q): Autoregressive (p лагов), Integrated (d разностей для stationarity), Moving Average (q лагов ошибок). Классика для univariate.
SARIMA: ARIMA + сезонная компонента (P, D, Q, m), где m — период.
Подробнее — как посчитать exponential smoothing в SQL, как посчитать Holt-Winters в SQL.
Prophet (Meta)
Aditive модель: y = trend + seasonal + holidays + error. Робастна к пропускам, выбросам, легко настраивается.
Когда хорош: business time series с явной сезонностью, регулярные тренды.
Когда плохо: very short series, irregular events, сложные нелинейные зависимости.
ML на time series
Превращаем time series в табличную задачу через lag features:
features: y(t-1), y(t-2), y(t-7), rolling_mean_7, ...
target: y(t)Дальше — gradient boosting (XGBoost / LightGBM / CatBoost).
Лучшие практики:
- Time-based split
- Walk-forward validation (расширяющееся окно)
- Lag features + rolling statistics
- Календарные фичи (day_of_week, holiday, season)
Подробнее — как посчитать naive forecast, feature engineering на собесе DS.
Neural time series
DeepAR (Amazon): RNN-based, probabilistic forecasting.
N-BEATS: fully-connected, для univariate, SOTA на M-competitions.
Temporal Fusion Transformer: attention для multi-horizon forecasting.
Foundation models (Lag-Llama, TimesFM): zero-shot прогноз без обучения.
В production на 2026 — gradient boosting часто всё ещё лучше neural на бизнес-задачах. Нейросети дают преимущество при многих рядах или сложной мульти-вариантности.
Метрики
Симметричные:
- MAE — устойчив к выбросам, интерпретируем
- MSE / RMSE — наказывает большие ошибки
- MAPE — в процентах, но плохо работает при значениях около 0
- sMAPE — симметричная вариация
- WAPE — взвешенная MAPE
Probabilistic forecasting:
- CRPS (Continuous Ranked Probability Score)
- Pinball loss для quantile prediction
Подробнее — как посчитать MAPE в SQL, как посчитать forecast bias в SQL.
Аномалии в time series
Statistical:
- Z-score / IQR на residuals после декомпозиции
- ESD test (Generalized Extreme Studentized Deviate)
ML:
- Isolation Forest на признаках time series
- Autoencoder reconstruction error
- Prophet + threshold на residuals
Подробнее — как посчитать z-score outliers в SQL.
Типичные вопросы
«Прогноз спроса на SKU: какие модели возьмёшь?»
Baseline — seasonal naive (среднее последних 4 недель). Production — gradient boosting с lag-фичами + календарь + промо. Top-tier — combined (boosting + Prophet / DeepAR), особенно для long-tail SKU.
«Как валидировать time series модель?»
Walk-forward validation. Train на [0, t1] → predict [t1, t1+k] → следующий fold train [0, t2 = t1+k] → predict [t2, t2+k]. Никогда random split.
«Что делать с holidays?»
Включать как фичи (binary indicator + lookup-таблица праздников по стране). Prophet включает holidays-effect нативно. Boosting — через one-hot.
«ARIMA vs gradient boosting на time series — что лучше?»
ARIMA — для univariate с явной автокорреляцией. Boosting — когда много exogenous variables (промо, праздники, погода). На большинстве бизнес-задач boosting побеждает.
Частые ошибки
- Random split. Утечка в будущее, метрики искусственно высокие, в production модель ломается
- Игнор сезонности. Прогнозировать продажи в декабре по январским данным — провал
- Только лучшая модель. Не сравнить с naive baseline — слабо. Часто naive лучше «крутой» модели
- MAPE на нулевых значениях. Division by zero. Использовать sMAPE / WAPE
- Не учесть холодный старт. Новые SKU без истории — нельзя прогнозировать стандартными методами
FAQ
Когда time series надо stationarity?
ARIMA — да (через differencing). Prophet — нет, моделирует тренд явно. ML с lag-фичами — нет.
Prophet vs ARIMA на собесе?
Prophet — production-friendly, прощает ошибки. ARIMA — академичная классика, нужно знать для теоретических вопросов. На собесе спрашивают обе.
Нужно ли уметь fit'ить ARIMA вручную?
Junior — нет, понимать auto_arima достаточно. Senior — знать, как выбирать p/d/q по ACF/PACF, тесты на stationarity.
Foundation models для time series — это будущее?
Перспективно. На 2026 пока gradient boosting + статистические модели в большинстве production выигрывают. Через 2-3 года картина может измениться.
Multivariate vs univariate?
Univariate — один ряд, прогнозируем будущее. Multivariate — несколько рядов с взаимовлиянием (например, экзогенные фичи). На собесе чаще univariate с exogenous.