Учебное пособие по прогнозированию с использованием авторегрессионной модели в Python

Фон

Прогнозирование — это широкая область, в которой доступно множество моделей для моделирования ваших временных рядов. В моих предыдущих постах мы рассмотрели некоторые базовые модели прогнозирования и исследовали популярное семейство моделей экспоненциального сглаживания.

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

Что такое авторегрессия?

Обзор

Авторегрессия — это когда вы прогнозируете временной ряд, используя некоторую линейно-взвешенную комбинацию предыдущих значений (лагов) этого временного ряда. Поскольку мы регрессируем целевое значение относительно самого себя, это называется авто-регрессией.

Математически мы можем записать авторегрессию как:

Где y — временной ряд, который мы прогнозируем на различных временных шагах, ϕ — подобранные коэффициенты запаздывания. для временного ряда εявляется членом ошибки (обычно нормально распределенным) и >p – это количество компонентов с задержкой, включенных в модель, также известное как порядок.

Из этого уравнения авторегрессии всплывают несколько хорошо известных моделей:

  • Если у нас нет коэффициентов или все они равны нулю, то это просто белый шум
  • Если у нас есть только ϕ_1 = 1, а остальные коэффициенты равны нулю, то это случайное блуждание .

Требования

Для построения авторегрессионной модели рекомендуется иметь стационарныйвременной ряд. Стационарность означает, что временной ряд не демонстрирует какой-либо долгосрочной тенденции или очевидной сезонности. Причина, по которой нам нужна стационарность, заключается в том, чтобы гарантировать, что статистические свойства временных рядов непротиворечивы во времени, что упрощает их моделирование (более подробно объяснено позже).

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





Вы также можете провести статистический тест на стационарность. Наиболее популярным из них является расширенный тест Дики-Фуллера (ADF), где нулевая гипотеза состоит в том, что данные не стационарны.

Оценка

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

См. эту ветку statsexchange, чтобы узнать о многочисленных и подробных причинах требования стационарности для авторегрессионного моделирования.

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

Ссылка здесь для отличного и подробного объяснения MLE.

Существуют и другие методы выбора наилучших параметров и коэффициентов, такие как Информационный критерий Акаике (AIC),Байесовский информационный критерий иИнформационный критерий Ханнана-Куинна (HQIC).

Выбор заказа

Перед подгонкой и оценкой модели нам нужно знать, сколько лагов (порядка), p, нужно включить. Один из способов сделать это — построить график функции частичной автокорреляции (PACF) временного ряда. Он измеряет, насколько определенные задержки напрямую коррелируют друг с другом. Следовательно, мы можем определить, какие задержки являются наиболее статистически значимыми, и удалить те, которые не являются таковыми, при построении нашей модели. Мы рассмотрим, как выполнить этот процесс, в руководстве по Python далее в этой статье.

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



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

Прохождение Python

Теперь мы рассмотрим простое пошаговое руководство по авторегрессионному моделированию в Python с использованием набора данных о пассажирах авиакомпаний США!

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

Данные

Давайте сначала построим наш временной ряд:

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

Временной ряд теперь выглядит стационарным, однако мы можем подтвердить это более количественно, используя тест ADF, который мы описали ранее:

P-Value ниже 5%, поэтому есть основания отклонить нулевую гипотезу, и мы можем сказать, что временной ряд является удовлетворительно стационарным. Чтобы сделать его еще более стационарным, мы могли бы провести дифференцирование второго порядка и сезонное дифференцирование.

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

Мы начинаем фазу моделирования с построения графика PACF, чтобы увидеть, какие задержки являются статистически значимыми:

Задержки за пределами области, заштрихованной синим, классифицируются как значительно значимые и должны быть включены в качестве признаков нашей авторегрессионной модели. Судя по приведенному выше графику, задержки 1, 2, 4, 7, 8, 9, 10, 11, 12 и 13 значительны. Обратите внимание, что лаг 12 имеет самый большой пик. Это связано с тем, что наш временной ряд индексируется по месяцам и имеет годовую сезонность, поэтому отставание 12 — это точная разница в год.

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

Здесь мы используем статистические модели ar_select_order, чтобы определить оптимальное количество лагов для включения в авторегрессионную модель. В этом случае мы настроили нашу модель на попытки комбинаций до лага 15. Затем модель соответствует результатам ar_select_order с использованием класса AutoReg из statsmodels.

Полученные результаты

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

Прогнозы выглядят великолепно!

Наши прогнозы авторегрессионной модели адекватно отражают тенденцию и сезонность во временном ряду. Тем не менее, сезонность была зафиксирована в результате того, что модель имеет порядок (лаги) 13. Это означает, что она включает все лаги в прошлом году (по одному на каждый месяц) для прогнозирования, что позволяет легко улавливать сезонность. из-за того, насколько это регулярно.

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

В этом посте мы погрузились в общую модель прогнозирования авторегрессии. Это похоже на линейную регрессию, но функции — это просто предыдущие значения цели на разных временных шагах. Чтобы использовать авторегрессию, ваши данные должны быть стационарными, что означает, что они должны иметь постоянное среднее значение и дисперсию. Прогнозирование с помощью авторегрессии очень просто и может быть выполнено с помощью пакета Python statsmodels.

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



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

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

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