Обработка сезонных эффектов за несколько периодов

В этой статье вы узнаете, как моделировать множественную сезонность во временных рядах. Мы рассмотрим:

  • Как разложить временной ряд с помощью MSTL
  • Создание независимых переменных, отражающих сложную сезонность
  • Использование готовых методов на примере пакета прогнозирования orbit.

Сложная сезонность

Сезонность относится к систематическим изменениям, которые повторяются с определенной периодичностью. Эти закономерности связаны с частотой, с которой наблюдается временной ряд. Низкочастотный временной ряд обычно содержит один сезонный период. Например, месячные временные ряды демонстрируют годовую сезонность.

Все чаще временные ряды собираются с более высокой частотой дискретизации, например ежедневно или ежечасно. Это приводит к большим наборам данных со сложной сезонностью. Ежедневный временной ряд может отображать недельные, месячные и годовые повторяющиеся закономерности.

Вот пример почасового временного ряда с ежедневной и еженедельной сезонностью:

На первый взгляд неясно, содержит ли приведенный выше временной ряд более одного сезонного паттерна. Множественные сезонные эффекты могут накладываться друг на друга, что затрудняет определение всех соответствующих периодов.

Разложение с множественной сезонностью

Методы декомпозиции направлены на разделение временного ряда на его основные части: тренд, сезонность и остатки.

Большинство методов были разработаны для обработки сезонности в один заранее определенный период. Примеры включают, среди прочего, классический метод, x11 и STL.

Метод STL был расширен для обработки множественной сезонности. MSTL (для Multiple STL) доступен в пакете statsmodels Python:

import numpy as np
from statsmodels.tsa.seasonal import MSTL

# creating an artificial time series with complex seasonality
# daily and weekly seasonality
period1, period2 = 24, 24 * 7
# 500 data points
size = 500
beta1…