Работали ли вы с сезонностью во временных рядах?

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

Ответ

Да, работа с сезонностью — обязательная часть анализа большинства бизнес-рядов (продажи, трафик, энергопотребление).

Мои подходы к выявлению и учету сезонности:

  1. Визуальный и статистический анализ:

    • Построение графиков ряда, скользящего среднего.
    • Анализ автокорреляционной функции (ACF) для обнаружения сезонных лагов (пики на лагах 7, 30, 365).
  2. Моделирование:

    • SARIMA: Явное задание сезонных параметров (P, D, Q, m).
      # SARIMA(1,1,1)(1,1,1,12) для месячных данных с годовой сезонностью
      model = SARIMAX(series, order=(1,1,1), seasonal_order=(1,1,1,12))
    • Prophet: Автоматическое выделение нескольких сезонностей (суточной, недельной, годовой) и учет эффектов праздников.
    • Методы на основе декомпозиции: Прогнозирование тренда и сезонности по отдельности с последующей рекомпозицией.
  3. Feature Engineering для моделей машинного обучения:

    • Добавление тригонометрических фичей (синус/косинус) для циклического кодирования времени.
      df['hour_sin'] = np.sin(2 * np.pi * df['hour'] / 24)
      df['hour_cos'] = np.cos(2 * np.pi * df['hour'] / 24)
    • Создание лаговых признаков (значение неделю/год назад).

Ключевой момент — проверка, является ли сезонность стабильной во времени, или ее амплитуда и форма меняются (например, из-за тренда).