Работали ли вы с SARIMA-моделями для прогнозирования?

«Работали ли вы с SARIMA-моделями для прогнозирования?» — вопрос из категории Временные ряды, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, применял SARIMA (Seasonal ARIMA) для прогнозирования бизнес-метрик с выраженной сезонностью, например, ежедневной активности пользователей или ежемесячных продаж.

Ключевые этапы работы:

  1. Анализ стационарности: Проверяю ряд с помощью теста Дики-Фуллера (ADF). Если ряд нестационарен, применяю дифференцирование (d и сезонное D).
  2. Определение порядка модели: Анализирую ACF (автокорреляционную) и PACF (частичную автокорреляционную) функции для подбора параметров p, q, P, Q.
  3. Подбор модели: Часто использую pmdarima.auto_arima для автоматического поиска наилучших параметров по критерию AIC/BIC.

Пример построения прогноза:

import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX
import matplotlib.pyplot as plt

# data - временной ряд с DateTimeIndex
model = SARIMAX(data,
                order=(1, 1, 1),           # (p, d, q) несезонные
                seasonal_order=(1, 1, 1, 7), # (P, D, Q, s) сезонные, s=7 (неделя)
                enforce_stationarity=False)
results = model.fit(disp=False)

# Прогноз на 14 шагов вперед
forecast = results.get_forecast(steps=14)
forecast_mean = forecast.predicted_mean
confidence_intervals = forecast.conf_int()

# Визуализация
plt.plot(data, label='historical')
plt.plot(forecast_mean, label='forecast', color='red')
plt.fill_between(confidence_intervals.index,
                 confidence_intervals.iloc[:, 0],
                 confidence_intervals.iloc[:, 1], color='pink', alpha=0.3)

Сильные стороны SARIMA:

  • Отлично работает с четкой сезонностью (сутки, неделя, год).
  • Дает статистически обоснованный прогноз с доверительными интервалами.
  • Интерпретируемость параметров.

Ограничения и когда ищу альтернативы:

  • Множественные сезонности: Например, ежечасная + еженедельная. Тут лучше подходят модели типа TBATS или Prophet.
  • Внешние регрессоры: SARIMAX позволяет добавить экзогенные переменные, но если их много и связи нелинейны, часто перехожу на градиентный бустинг (XGBoost, LightGBM) или LSTM.
  • Большие объемы данных: Классические методы плохо масштабируются, в этом случае использую распределенные реализации или перехожу к ML-подходам.