Определите параметры модели arima p d q процесса y t 2 y t 1

Обновлено: 05.07.2024

Модель авторегрессии порядка \(p\) описывается как \[AR(p) : y_t = c + \phi_1y_+\phi_2y_ + \dots+ \phi_py_ + \varepsilon_t \] и показывает зависимость значения нынешнего периода от прошлых значений p-периодов.

Модель скользящего среднего порядка \(q\) описывается как \[MA(q): y_t = c +\varepsilon_t + \theta_1\varepsilon_+\theta_2\varepsilon_ + \dots + \theta_q\varepsilon_\] и показывает зависимость значения нынешнего периода от ошибок предсказания предыдущих \(q\) периодов.

Модель авторегрессии с интегрированием и скользящим средним порядков \((p, d, q)\) является суммой \(AR(p)\) и \(MA(q)\) моделей и может быть представлена в виде \[ARIMA(p, d, q): (1 - \phi_1L - \dots - \phi_pL^p)((1 – L)^dy_t-\mu) = (1 + \theta_1L+ \dots + \theta_qL^q)\varepsilon_t,\] где \(d\) – количество дифференцирований исходного временного ряда до достижения его стационарности, а \(L\) – величина лага.

Для выделения сезонности можно использовать модификацию базовой модели \(ARIMA(p,d,q)-SARIMA(P, D, Q)_m\) , где \(m\) – количество измерений в году, \(P, D, Q\) – порядки сезонной авторегрессии, сезонного интегрирования и сезонного скользящего среднего соответственно.

Соответственно, модель \(ARIMA(1,0,1)-SARIMA(1,0,1)_4\) для квартальных изменений имеет вид: \[(1 - \phi_1L)(1 - \Phi_1L^4)(y_t-\mu) = (1 + \theta_1L)(1 + \Theta_1L))\varepsilon_t\]

Временной ряд состоит из множества входных параметров (одним из которых является время) и одного выходного параметра, зависящего от входных. Наша задача – найти эту зависимость. Прямым и наивным подходом в данной ситуации будет линейная регрессия вида а1х1 + а2х2 + … + anxn.

Главной проблемой при таком подходе является автокорреляция временного ряда – зависимость показателей временного ряда от предыдущих значений. Это в итоге приводит к невозможности оценки значимости коэффициентов регрессии и делает доверительный интервал прогнозирования ненадежным.

Подготовка данных

Первым делом импортируем нужные библиотеки:

В качестве тестового датасета возьмем данные среднего ежедневного экспорта сырой нефти Канады с 1985 по 2021 год. Файл содержит период в месяцах и объемы ежедневного экспорта нефти в кубических метрах и баррелях. По каждому месяцу есть показатели по экспорту легкой, средней и тяжелой нефти, а также общий объем. Из датасета мы оставим только общий объем экспорта нефти.

Считываем данные в DataFrame библиотеки pandas, отсеиваем ненужные строки, преобразуем строки дат в объекты datetime и выставляем их в качестве индексов. Под конец можно преобразовать DataFrame в Series.

Наш объект Series выглядит так:


timeseries.plot()выдает нам такой график:


Подбор параметров регрессии

Модель ARIMA использует три целочисленных параметра: p, d и q.

  • p – порядок авторегрессии (AR). Его можно интерпретировать как выражение «элемент ряда будет близок к Х, если предыдущие р элементов были близки к Х».
  • d – порядок интегрирования (разностей исходного временного ряда). Можно понимать как «элемент будет близок по значению к предыдущим d элементам, если их разность минимальна».
  • q – порядок скользящего среднего (MA), который позволяет установить погрешность модели как линейную комбинацию наблюдавшихся ранее значений ошибок.

Создать модель ARIMA можно с помощью следующего кода:

На самом деле подбор параметров для ARIMA не является тривиальной задачей. В statsmodels нет возможности автоматизированного подбора параметров. Ручной подбор является рабочим методом, но при этом кропотливым и отнимающим много времени. Поэтому я предлагаю провести сеточный поиск или, иначе говоря, перебор различных наборов параметров.

Как же нам понять, какие параметры лучше всего подойдут к модели?

Предложенный ниже код пройдется по различным значениям p, d и q и подберет те, при которых AIC будет минимальным. При переборе моделей из-за неточности вычислений в окне вывода будет выводиться много предупреждений, поэтому будет разумно их отключить.

Модель с параметрами 9, 2 и 1 показала наименьшее значение AIC из диапазона. Её мы и будем использовать.

Проверка оптимальности

Проверить оптимальность модели можно при помощи встроенных процедур библиотеки.

result.summary() возвращает нам такую таблицу:


Будет выведено четыре графика:


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

Прогнозирование и оценка точности прогноза

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

Параметр dynamic=False отключает динамическое прогнозирование – иначе говоря, использует в создании прогноза все предыдущие показатели ряда вплоть до текущей точки.


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

Оценить точность прогноза можно не только с помощью графика, но и другими способами. Для наглядности мы возьмем среднюю абсолютную процентную ошибку (MAPE – Mean Absolute Percent Error):

Ошибка составляет 3,8 процента. Прогноз получился довольно точным.

Итак, при помощи Python и statsmodels мы создали простую модель ARIMA и убедились, что при хорошо подобранных параметрах модель имеет высокую точность. Вы можете посмотреть ноутбук Python с исходным кодом на GitHub.

Популярным и широко используемым статистическим методом для прогнозирования временных рядов является модель ARIMA.

ARIMA - это аббревиатура от AutoRegressive Integrated Moving Average. Это класс модели, который фиксирует набор различных стандартных временных структур в данных временных рядов.

В этом руководстве вы узнаете, как разработать модель ARIMA для данных временных рядов с помощью Python.

После завершения этого урока вы узнаете:

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

Модель авторегрессии с интегрированным скользящим средним

Модель ARIMAкласс статистических моделей для анализа и прогнозирования данных временных рядов.

Он явно обслуживает набор стандартных структур данных временных рядов и, как таковой, предоставляет простой, но мощный метод для создания искусных прогнозов временных рядов.

ARIMA - это аббревиатура от AutoRegressive Integrated Moving Average. Это обобщение более простой авторегрессионной скользящей средней и добавляет понятие интеграции.

Эта аббревиатура носит описательный характер и отражает ключевые аспекты самой модели. Вкратце, это:

  • Арканзас:авторегрессии, Модель, которая использует зависимую связь между наблюдением и некоторым количеством запаздывающих наблюдений.
  • я:интегрированный, Использование разности необработанных наблюдений (например, вычитание наблюдения из наблюдения на предыдущем временном шаге) для того, чтобы сделать временной ряд стационарным.
  • Массачусетс:Скользящая средняя, Модель, которая использует зависимость между наблюдением и остаточной ошибкой от модели скользящего среднего, примененной к лаговым наблюдениям.

Каждый из этих компонентов явно указан в модели в качестве параметра. Используется стандартное обозначение ARIMA (p, d, q), где параметры заменяются целочисленными значениями для быстрого указания конкретной используемой модели ARIMA.

Параметры модели ARIMA определяются следующим образом:

  • п: Число наблюдений отставания, включенных в модель, также называемое порядком отставания.
  • d: Количество раз, когда исходные наблюдения различаются, также называется степенью различия.
  • Q: Размер окна скользящей средней, также называемый порядком скользящей средней.

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

Значение 0 может быть использовано для параметра, который указывает, что этот элемент модели не используется. Таким образом, модель ARIMA может быть сконфигурирована для выполнения функции модели ARMA и даже простой модели AR, I или MA.

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

Далее, давайте посмотрим, как мы можем использовать модель ARIMA в Python. Начнем с загрузки простого одномерного временного ряда.

Набор данных по продажам шампуня

Этот набор данных описывает ежемесячное количество продаж шампуня за 3-летний период.

Единицами являются количество продаж и 36 наблюдений. Оригинальный набор данных приписан Макридакису, Уилрайту и Хиндману (1998).

Загрузите набор данных и поместите его в текущий рабочий каталог с именем файла «Шампунь-sales.csv«.

Ниже приведен пример загрузки набора данных Shampoo Sales с помощью Pandas с пользовательской функцией для анализа поля даты и времени. Набор данных базируется в произвольном году, в данном случае 1900.

При выполнении примера печатаются первые 5 строк набора данных.

Данные также представлены в виде временного ряда с месяцем по оси X и показателями продаж по оси Y.


Мы видим, что набор данных по продажам шампуней имеет четкую тенденцию.

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

Давайте также кратко рассмотрим график автокорреляции временных рядов. Это также встроено в Панд. В приведенном ниже примере показана автокорреляция для большого числа лагов во временном ряду.

Приведя пример, мы можем видеть, что существует положительная корреляция с первыми 10–12 лагами, которая, возможно, значима для первых 5 лагов.

Хорошей отправной точкой для параметра AR модели может быть 5.


Арима с питоном

Библиотека statsmodels предоставляет возможность соответствовать модели ARIMA

Модель ARIMA может быть создана с использованием библиотеки statsmodels следующим образом:

  1. Определите модель, позвонивАРИМА ()и проходя вп,d, а такжеQпараметры.
  2. Модель подготовлена ​​по данным обучения, позвонивпоместиться()функция.
  3. Прогнозы можно сделать, позвонивпредсказать, ()функция и указание индекса времени или времени, которые будут предсказаны.

Давайте начнем с чего-то простого. Мы подгоним модель ARIMA ко всему набору данных Shampoo Sales и рассмотрим остаточные ошибки.

Сначала мы подходим к модели ARIMA (5,1,0). Это устанавливает значение задержки равным 5 для авторегрессии, использует порядок разности 1, чтобы сделать временной ряд стационарным, и использует модель скользящего среднего 0.

При подгонке модели предоставляется много отладочной информации о подгонке модели линейной регрессии. Мы можем отключить это, установивИндик.точкиаргумент 0.

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

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


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


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

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

Далее, давайте посмотрим, как мы можем использовать модель ARIMA для составления прогнозов.

Скользящий прогноз Модель ARIMA

Модель ARIMA может использоваться для прогнозирования будущих временных шагов.

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

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

Мы также предпочли бы, чтобы прогнозируемые значения находились в исходной шкале, если мы выполнили какое-либо различие (д & при 0при настройке модели). Это можно указать, установивтиповоеаргумент к значению«уровни»:станд =»уровни,

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

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

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

Мы вручную отслеживаем все наблюдения в списке, называемом историей, который заполняется данными обучения и к которому добавляются новые наблюдения на каждой итерации.

Сложив все это вместе, ниже приведен пример скользящего прогноза с моделью ARIMA в Python.

Выполнение примера выводит прогноз и ожидаемое значение для каждой итерации.

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

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


Модель может использовать дальнейшую настройку параметров p, d и, возможно, даже q.

Конфигурирование модели ARIMA

Классический подход к подгонке модели ARIMA - следоватьМетодика Бокса-Дженкинса,

Это процесс, который использует анализ и диагностику временных рядов для определения хороших параметров модели ARIMA.

Таким образом, шаги этого процесса заключаются в следующем:

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

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

Процесс описан в классическом учебнике 1970 года по темеАнализ временных рядов: прогнозирование и контрольДжордж Бокс и Гвилим Дженкинс. Обновленное 5-е издание теперь доступно, если вы хотите углубиться в этот тип модели и методологии.

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

Резюме

В этом руководстве вы узнали, как разработать модель ARIMA для прогнозирования временных рядов в Python.

В частности, вы узнали:

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

У вас есть вопросы об ARIMA или об этом уроке?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.

TL; DR: В этой статье вы изучите основные этапы выполнения анализа временных рядов и такие понятия, как тренд, стационарность, скользящие средние и т. Д. Вы также изучите методы экспоненциального сглаживания и узнаете, как вписать модель ARIMA в нестационарные данные.

Ситуация 1: Вы несете ответственность за центр доставки пиццы и хотите знать, соответствуют ли ваши продажи определенному шаблону, потому что вы чувствуете, что каждый субботний вечер увеличивается количество ваших заказов .

Ситуация 2: Ваша компания продает продукт, и вы отвечаете за прогнозирование или прогнозирование поставок, необходимых для этого продукта в определенный момент в будущем…

Ситуация 3: Вы наблюдаете за центром обработки данных и хотите обнаружить любые аномалии, такие как ненормальное использование ЦП, которые могут привести к простою на ваших серверах. Вы следуете кривой использования процессора и хотите знать, когда происходит аномалия .

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

Временной ряд - это последовательность данных, упорядоченная (или проиндексированная) по времени. Это дискретно, и интервал между каждой точкой постоянен.

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

Сезонность: Говорят, что временной ряд является сезонным, когда на него влияют сезонные факторы (час дня, неделя, месяц, год и т. Д.). Сезонность можно наблюдать с хорошими циклическими моделями фиксированной частоты.

Цикличность: Цикл происходит, когда данные демонстрируют взлеты и падения, которые не имеют фиксированной частоты. Эти колебания обычно связаны с экономическими условиями и часто связаны с «деловым циклом». Продолжительность этих колебаний обычно составляет не менее 2 лет.

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

Значение ряда в момент времени t = прогнозируемое значение в момент времени t + остаток в момент времени t

Читайте также: