Глубокое погружение в модель SARIMA и ее приложения

Фон

В одном из моих предыдущих постов мы рассмотрели, пожалуй, самую известную модель sk-прогнозирования, авторегрессионную интегрированную скользящую среднюю, более известную как ARIMA. Однако одним из недостатков этой модели является то, что в ней не учитывается какая-либо сезонность. Здесь на помощь приходит модель Сезонная авторегрессионная интегрированная скользящая средняя или SARIMA. В этом посте мы подробно рассмотрим в теорию и основные идеи модели SARIMA и способы ее реализации на Python.

Я настоятельно рекомендую прочитать мою предыдущую статью, если вы не слишком знакомы с ARIMA, так как в этой статье мы будем опираться на довольно много предполагаемых предварительных знаний о том, как работает исходная модель ARIMA!

Что такое САРИМА?

Обзор

SARIMA — это расширение обычной модели ARIMA, которое добавляет в модель компонент сезонности. Это позволяет нам лучше фиксировать сезонные эффекты, которые не позволяет обычная модель ARIMA.

Если вы хотите узнать больше о сезонности во временных рядах, я настоятельно рекомендую вам прочитать один из моих предыдущих постов:



Теория

Классическая модель ARIMA состоит из трех компонентов: Авторегрессионный, Интегрированный (разностный) и Скользящая средняя. Затем они линейно объединяются для формирования модели:

Где:

Модель часто компактно записывается ARIMA(p, d, q)где p, d и q относятся к порядку авторегрессоров, дифференциальных и компоненты скользящего среднего соответственно.

SARIMA добавляет компонент сезонности к каждому фактору уравнения ARIMA для получения SARIMA(p, d, q)(P, D, Q)m:

Где:

  • y': разные временные ряды, как обычные, d, так и сезонные, D, разность
  • P: количество сезонных авторегрессоров.
  • ω: коэффициенты сезонных компонентов авторегрессии.
  • Q: количество компонентов сезонной скользящей средней.
  • η:коэффициенты ошибок сезонного прогноза.
  • м: продолжительность сезона.




Требования

Как и исходная модель ARIMA, модель SARIMA должна иметь стационарные данные для моделирования и прогнозирования временных рядов. Стационарный временной ряд не демонстрирует какой-либо долгосрочной тенденции или явной сезонности, его статистические свойства, такие как среднее значение и дисперсия, остаются постоянными во времени.

Чтобы получить стационарный временной ряд, нам нужно стабилизировать среднее значение и дисперсию. Среднее значение может быть стабилизировано путем дифференцирования, а количество примененных дифференцирований равно dили Dв случае сезонных колебаний. различать. Дисперсия может быть стабилизирована с помощью таких преобразований, как логарифмическое преобразование и преобразование Бокса-Кокса,это позволяет сезонным колебаниям происходить на одном уровне каждый сезон.

Если вы хотите узнать больше о стационарности, ознакомьтесь с моими предыдущими сообщениями в блоге об этом здесь:





Выбор заказа

После того, как временной ряд станет стационарным, нам нужно вывести лучшие порядки (p, d, q) и (P, D, Q )m, для нашей модели. Проще всего вычислить сезонную, D,и регулярную разность, d . Это можно сделать с помощью статистического теста Расширенного Дики-Фуллера (ADF), который определяет, является ли временной ряд стационарным или нет.

Порядки авторегрессии и скользящего среднего (ошибки прогноза) (p, q, P, Q) можно вычислить путем анализа функции частичной автокорреляции (PACF) и функция автокорреляции соответственно. Идея этого метода состоит в том, чтобы построить коррелограммуавторегрессоров и значений скользящего среднего и определить, какие из них статистически значимы. Значимые указывают на то, что они оказывают существенное влияние на прогноз.

Эти коррелограммы также позволят нам наблюдать сезонную модель, если таковая имеется, поскольку мы можем видеть пики при определенных множественных задержках. Например, SARIMA(0,0,0)(1,0,0)4 покажет экспоненциальное затухание задержек для ACF, но значительный всплеск при задержке 4 в PACF. Если данные индексируются по месяцам, это будет примером ежеквартальной сезонности.

Если сейчас это кажется запутанным, не волнуйтесь. Позже в реализации Python мы рассмотрим этот процесс!





Оценка

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

StatQuest Джоша Стармера дает отличное объяснение MLE. Ссылка здесь.

Учебник по Python

Данные

Давайте начнем с построения временного ряда, который мы хотим спрогнозировать:

Данные от Kaggle с лицензией CC0.

Существует очевидная тенденция и сезонность, поэтому данные не являются стационарными, поскольку среднее значение и дисперсия меняются со временем. Поэтому нам нужно применить дифференцирование и преобразование Бокса-Кокса, чтобы сделать наш ряд стационарным, как того требует SARIMA:

Данные теперь выглядят достаточно стационарными.

Моделирование

Теперь мы будем использовать коррелограммы ACF и PACF, чтобы вывести порядки для компонентов авторегрессии и скользящего среднего:

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

Мы уже заметили годовую сезонность нашего ряда, m=12, но приведенные выше графики подтверждают это, поскольку у нас есть большие всплески на 12-й. > тормозит. Задержки также значительны и составляют около ~10-й задержки для обоих графиков. В целом это указывает на то, что модель SARIMA(10, 1, 10)(1, 1, 1)12 должна быть подходящей.

Теперь давайте подгоним модель, используя класс ARIMA из statsmodels, и создадим прогнозы. К счастью, этот класс выполняет за нас разность, поэтому нам нужно только передать преобразованный временной ряд Бокса-Кокса:

Анализ

Наконец, мы построим прогнозы:

Прогнозы SARIMA, похоже, сбылись!

Резюме и дальнейшие мысли

В этой статье мы обсудили расширение известной модели прогнозирования ARIMA, SARIMA. Эта модель добавляет компоненты сезонности к обычной модели ARIMA, что позволяет моделировать более сложные временные ряды. Модель SARIMA легко применить в Python с помощью пакета statsmodels.

Полный код, используемый в этой статье, можно найти на моем GitHub здесь:



Ссылки и дополнительная литература

Свяжись со мной!

(Все эмодзи разработаны OpenMoji — проектом эмодзи и значков с открытым исходным кодом. Лицензия: CC BY-SA 4.0)