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

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



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

Ковариация

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

Формулу для вычисления ковариации можно найти ниже, где E [X] обозначает математическое ожидание переменной x или, другими словами, среднее значение X. From формулы, мы также можем видеть, что когда тренд X, Y в одном направлении, математическое ожидание, в конце концов, также будет положительным.

Корреляция

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

Графики ACF и PACF

Объяснив предыдущие концепции, было бы намного легче понять рациональность графиков ACF и PACF.

ACF (также известная как функция автокорреляции) и PACF (также известная как функция частичной автокорреляции) - полезные инструменты, которые помогают нам визуализировать и понимать данные временных рядов. Авто здесь просто означает, что мы берем корреляцию переменной на себя, но с запаздывающей версией. С другой стороны, частичная автокорреляция измеряет корреляцию переменной после удаления эффектов предыдущих временных задержек. Например, значение PACF при запаздывании k является чистым эффектом y (t) и y (t + k), который не объясняется запаздыванием от 1 до k-1. В общем, вы можете считать, что график PACF описывает отношение остатка предыдущего дня (или предыдущих n дней в зависимости от коэффициента запаздывания) и фактического значения текущего дня.

Хотя вычисления кажутся сложными, statsmodels lib имеет встроенные функции, которые мы можем использовать напрямую для построения графиков ACF и PACF. Эти графики могут быть полезны, когда мы хотим определить параметры для выбора моделей ARIMA.

Стационарность

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

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

Различие

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

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

Статистика оценок

Прогнозирование временных рядов - это особый тип проблемы регрессии, поэтому должны применяться типичные метрики регрессии, включая RMSE, MSE, MAE и т. Д. Существует еще один тест, который очень часто используется при анализе временных рядов или оценке прогнозов, называемый AIC (например, информационные критерии Акаике). Преимущество теста AIC заключается в том, что он учитывает количество параметров, используемых как часть оценки, поскольку использование слишком большого количества параметров в модели может привести к переобучению. Более низкое значение AIC предполагает, что модель будет иметь лучшую производительность при прогнозировании.

Концепция модели ARIMA и ее варианты

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

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

  1. AR (p): модель авторегрессии, основанная на взаимосвязи между текущим наблюдением и наблюдениями в предыдущие временные лагы. Параметр p здесь обозначает количество лагов, которые необходимо включить в модель.
  2. I (d): Модель интеграции, которая тесно связана с концепцией различения, описанной нами ранее. Цель этой модели - найти оптимальный порядок дифференцирования, чтобы преобразовать данные временных рядов в стационарные. Параметр d здесь определяет требуемый порядок дифференциации.
  3. MA (q): модель скользящего среднего, которая исследует взаимосвязь между наблюдением и ошибкой остатка из модели скользящего среднего из запаздывающих наблюдений. Параметр q указывает длину окна скользящего среднего, то есть сколько временных меток следует учитывать при расчете значения MA.

На самом деле существует множество вариаций модели ARIMA. Например, если вы знаете, что целевой набор данных является стационарным, вы можете игнорировать разностную часть и использовать модель ARMA. С другой стороны, если есть явные доказательства сезонности, как то, что мы видим в данных о розничных продажах винных магазинов, мы вместо этого рассмотрим модель SARIMA. Модель SARIMA добавляет сезонное рассмотрение к ARIMA, вводя дополнительный набор параметров (P, D, Q) и m. Здесь параметры P, D, Q имеют те же значения, что и p, d, q в модели ARIMA, но в этом случае они используются для описания компонентов сезонности. m определяет количество записей в каждом цикле (например, для данных с годовым трендом обычно выбирается m равно 12.)

Теперь самый важный вопрос может заключаться в том, как узнать, какие значения выбрать для параметров p, d, q (плюс P, D, Q в случае модели SARIMA)? К счастью, есть одна библиотека, которая могла бы справиться с тяжелой работой за нас - функция auto_arima () из pmdarima. Чтобы установить pmdarima, вы можете просто запустить из командной строки следующее:

pip install pmdarima

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



Пример использования прогнозирования модели ARIMA

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

df = pd.read_csv(‘Retail Sales.csv’,parse_dates=True,index_col=’DATE’)
ax = df[‘Sales’].plot(figsize = (12,6))
ax.autoscale(axis = ‘both’,tight = True)
ax.set(ylabel=’Liquor Store Retail Sales(M)’,xlabel=”Dates”,title=’US Liquor Retail Sales Data (in Millions USD)’);

Далее мы можем использовать упомянутую ранее функцию auto_arima (), чтобы выяснить, какой набор параметров является лучшим.

from pmdarima import auto_arima
auto_arima(df['Sales'],seasonal=True,m=12).summary()

Краткое изложение функции auto_arima () можно найти ниже. Мы видим, что метрики eval для определения окончательных метрик включают AIC, о котором мы говорили ранее. Самое главное, что оптимальные возвращаемые параметры показаны в разделе Модель: SARIMAX (3,1,0) X (1,1,1,12). Двигаясь дальше, мы будем использовать эти параметры для обучения модели SARIMA для окончательного прогнозирования.

Обучите и оцените модель SARIMA

Теперь давайте оценим производительность нашей модели. Для этого нам нужно выполнить разделение на поезд / тест, подогнать модель к параметрам, которые мы получаем из функции auto_arima, а затем построить точки прогноза и фактических данных для сравнения. Фактический код можно найти ниже:

from statsmodels.tsa.statespace.sarimax import SARIMAX
df_train = df[:-12]
df_test = df[-12:]
model = SARIMAX(df_train['Sales'],order=(3,1,0),seasonal_order=(1,1,1,12))
result = model.fit()
start=len(df_train)
end=len(df_train)+len(df_test)-1
predictions = result.predict(start=start, end=end, dynamic=False, typ='levels').rename('SARIMA(3,1,0)(1,1,1,12) Predictions')
ax = df_test['Sales'].plot(legend=True,figsize=(12,6),title='US Liquor Retail Sales, Actual v.s. Forecasted')
predictions.plot(legend=True)
ax.autoscale(axis='x',tight=True)
ax.set(ylabel='Retail Sales Amount in MM USD');

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

В этом случае для более количественной оценки мы можем использовать такие показатели, как MES или RMSE.

from statsmodels.tools.eval_measures import rmse
error2 = rmse(df_test['Sales'],predictions)
print(f"The RMSE for test data is {error2}")

Полученное нами значение RMSE составляет ~ 353. Учитывая, что фактические данные о продажах находятся в диапазоне 2 тыс. И выше, RMSE тоже не так уж и плох.

Прогнозирование в будущее

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

full_model = SARIMAX(df['Sales'],order=(3,1,0),seasonal_order=(1,1,1,12))
res2 = full_model.fit()
forecast = res2.predict(len(df),len(df)+11,typ='levels',rename='SARIMA Model Forcast')
ax = df['Sales'].plot(legend = True, figsize=(12,6), title = 'US Liquor Retail Sales, Current and Forecast')
forecast.plot(legend = True)
ax.autoscale(axis='x',tight=True)
ax.set(ylabel = 'Retail Sales Amount in MM USD')

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

Резюме

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

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



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