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)  -- multiplicative

Additive — если амплитуда сезонности не меняется со временем. 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.

Смотрите также