Введение

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

АРИМА:-

ARIMA — это обобщенная модель авторегрессионного скользящего среднего (ARMA), которая объединяет процессы авторегрессии (AR) и скользящего среднего (MA) и создает составную модель временного ряда.

Как следует из аббревиатуры, ни один сезонный ARIMA(p, d, q) не имеет ключевых элементов модели:

· AR: авторегрессия. Модель регрессии, в которой используются зависимости между наблюдением и рядом запаздывающих наблюдений ( p).

· I: интегрировано. Сделать временной ряд стационарным, измеряя различия наблюдений в разное время ( d).

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

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

Графики ACF и PACF:

График ACF (график автокорреляции) — графики автокорреляции используются для нахождения члена p (AR) модели ARIMA. Или автокоррелированное отставание от текущего значения. Функция выборочной автокорреляции (ACF) для ряда дает корреляции между рядом xt и лаговыми значениями ряда для лагов 1, 2, 3 и т. д. По сути, ACF дает корреляции между xt и xt-1, xt и xt-2 и так далее. ACF можно использовать для определения возможной структуры данных временных рядов. Это может быть непросто, так как часто нет единой четкой интерпретации выборочной автокорреляционной функции. АКФ остатков для модели также полезен. Идеалом для выборочной АКФ остатков является отсутствие каких-либо существенных корреляций для любого лага.

График PACF (график частичной автокорреляции) — в общем случае «частичная» корреляция между двумя переменными — это степень корреляции между ними, которая не объясняется их взаимной корреляцией. с заданным набором других переменных. Например, если мы регрессируем переменную Y по другим переменным X1, X2 и X3, частичная корреляция между Y и X3 представляет собой степень корреляции между Y и X3, которая не объясняется их общими корреляциями с X1 и X2. Эта частичная корреляция может быть вычислена как квадратный корень из уменьшения дисперсии, которое достигается добавлением X3 к регрессии Y на X1 и X2. Интерпретировать графики acf и pacf не всегда легко, ниже приведена таблица, которая является руководством для поиска терминов AR и MA на этих графиках.

Общая форма модели ARIMA обозначается как ARIMA(p, d, q). При использовании данных сезонных временных рядов вероятно, что краткосрочные несезонные компоненты вносят свой вклад в модель. Следовательно, нам необходимо оценить сезонную модель ARIMA, которая включает как несезонные, так и сезонные факторы в мультипликативную модель. Общий вид сезонной модели ARIMA обозначается как ARIMA(p, d, q) × (P, D, Q)S, где p — несезонный порядок AR, d — несезонная разность, q — несезонный порядок MA, P — сезонный порядок AR, D — сезонная разность, Q — сезонный порядок MA, а S — временной интервал повторяющегося сезонного паттерна, соответственно. Мы говорили о компонентах p и q, которые мы получаем через ACF и PACF, а для d мы используем обратную автокорреляционную функцию (IACF).

Я надеюсь, что это дало вам общее представление об ARIMA и о том, как получить компонент для построения модели, однако, как я упоминал ранее, у ARIMA есть некоторые ограничения, и основное из них заключается в том, что в простой модели ARIMA трудно моделировать нелинейные отношения между переменных, а другой - предположение о том, что в модели ARIMA существует постоянное стандартное отклонение ошибок, которое на практике может быть не всегда. Чтобы устранить эти ограничения и другие проблемы с данными временных рядов, в настоящее время мы используем LSTM, который является особым случаем рекуррентной нейронной сети (RNN). Давайте разберемся с основами LSTM.

LSTM: –

Прежде чем я перейду к подробностям LSTM, я предполагаю, что у вас есть базовое представление о нейронной сети и RNN, поскольку LSTM — это тип RNN, который может хранить и учиться на основе длинной последовательности наблюдений. Это становится очень важным в данных временных рядов, поскольку в наборах данных временных рядов существует последовательность зависимости между входными переменными, а RNN очень сильны в обработке зависимости между входными переменными. Каждый LSTM представляет собой набор ячеек или системных модулей, в которых собираются и хранятся потоки данных. Ячейки напоминают транспортную линию (верхняя линия в каждой ячейке), которая соединяется из одного модуля в другой, передавая данные из прошлого и собирая их для настоящего. Из-за использования некоторых вентилей в каждой ячейке данные в каждой ячейке могут быть удалены, отфильтрованы или добавлены для следующих ячеек. Следовательно, ворота, которые основаны на слое сигмовидной нейронной сети, позволяют ячейкам опционально пропускать данные или удалять их. Каждый сигмовидный слой дает числа в диапазоне от нуля до единицы, отображающие объем каждого сегмента данных, который должен быть пропущен в каждой ячейке. Точнее, оценка нулевого значения подразумевает, что «ничего не пропускать»; в то время как; оценка в единицу указывает на то, что «пропустите все». В каждом LSTM задействованы три типа вентилей с целью управления состоянием каждой ячейки:

Забыть ворота: выводит число от 0 до 1, где 1 означает «полностью сохранить это»; тогда как 0 означает «полностью игнорировать это».

Memory Gate. Он выбирает, какие новые данные необходимо сохранить в ячейке. Во-первых, сигмовидный слой, называемый «слоем входной двери», выбирает, какие значения будут изменены. Затем слой tanh создает вектор новых значений-кандидатов, которые можно добавить к состоянию.

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

Теперь, когда мы поняли основы ARIMA и LSTM. Давайте посмотрим, как мы реализуем это в реальном мире. Я предпочитаю R для реализации любых традиционных статистических алгоритмов и Python для методов глубокого обучения, поэтому я реализую ARIMA в R и LSTM в Python.

Внедрение ARIMA: –

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

Необходимые условия для снижения тренда

Удаление тренда необходимо для устранения любого возрастающего или убывающего тренда в данных за определенный период времени.

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

kpss.test(x = dataset$sale, null = c("Тенденция"), lshort = TRUE)

Исправление:

- Подгонка линии регрессии. Это можно сделать, подгоняя линию регрессии к данным и вычитая ее из данных, оставляя только остатки.

- Фильтр из пакета mFilter — из множества доступных фильтров один из фильтров в hpfilter. Это помогает отделить тренд и циклическую составляющую временного ряда от необработанных данных.

summary.mFilter() — сводная статистика текущих, трендовых и циклических данных.

plot.mFilter() — отображает тренд на фактических данных.

fitted.mFilter() — дает компонент тренда

residuals.mFilter() — дает вам реальную — трендовую составляющую

Стационарные серии

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

Нахождение:

- Использование графика последовательности прогонов (S) › Переменная отклика в зависимости от времени

- Тест Дики-Фуллера › Этот тест используется для проверки стационарности ряда. Этот тест должен отвергнуть НУЛЕВУЮ гипотезу нестационарности.

adf.test() можно использовать для расчета расширенной статистики.

Исправление:

- Разность › Это подразумевает вычитание последующих наблюдений из текущего наблюдения, т.е. y(t) — y(t-1). Это помогает устранить любую нестационарность в ряду.

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

ПРИМЕЧАНИЕ. Тест ADF и тест KPSS могут дать вам некоторую информацию, чтобы определить, является ли тренд детерминированным или стохастическим.

Поскольку нулевая гипотеза теста KPSS противоположна нулевой гипотезе теста ADF, можно заранее определить следующий способ действий:

1. Примените KPSS, чтобы проверить нулевое значение того, что ряд является стационарным или стационарным вокруг тренда. Если ноль отклонен (при заданном уровне значимости), сделайте вывод, что тренд является стохастическим, в противном случае перейдите к шагу

2. Примените тест ADF, чтобы проверить нулевое значение существования единичного корня. Если нулевая гипотеза отвергнута, то сделать вывод об отсутствии единичного корня (стационарности), в противном случае результат процедуры не информативен, так как ни один из тестов не отверг соответствующую нулевую гипотезу. В этом случае может быть более осторожно рассмотреть существование единичного корня и удалить тренд ряда, взяв первые разности.

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

Другие тесты, которые можно изучить:

Тест Харке Бера — jarque.bera.test()

Коинтеграция Филлипса-Улиариса — Тест po.test()

Тест Филлипса-Перрона

Бдс.тест()

Сезонность

Проверьте сезонность.

Вывод:

а. График последовательности выполнения

б. График сезонных подсерий (S) — переменная отклика в зависимости от времени, упорядоченная по сезонам (например, с января по декабрь, с воскресенья по субботу, с 01 часа по 24 часа.

в. Несколько коробчатых диаграмм (S) - переменная отклика в зависимости от времени как факторная переменная

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

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

Исправление:

- Усреднить ряд на заданной временной частоте и вычесть его из соответствующего временного ряда. Используйте эту новую серию для запуска модели ARIMA.

Порядок построения модели ARIMA (p, d, q)

Несезонная модель ARIMA классифицируется как модель «ARIMA (p, d, q)», где:

- p - количество членов авторегрессии (ряд является стационарным и автокоррелированным, возможно, его можно предсказать как кратное своему предыдущему значению плюс константа)

- d - количество несезонных разностей, необходимых для стационарности

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

Вывод — графики ACF и PACF:

par(mfrow=c(2,1))

acf(набор данных$продажа)

pacf(набор данных$продажа)

Как объяснялось выше, используя эти графики ACF и PACF, можно получить порядок модели ARIMA. Тем не менее, я бы рекомендовал использовать функцию auto.arima: Auto.Arima возвращает лучшую модель ARIMA в соответствии со значением AIC, AICc или BIC. Функция выполняет поиск по возможной модели в рамках предоставленных ограничений порядка. Эта функция из пакета прогнозов Роба Хайндмана.

auto.arima(x, d = NA, D = NA, max.p = 5, max.q = 5, max.P = 2, max.Q = 2, max.order = 5, start.p = 2, start.q = 2, start.P = 1, start.Q = 1, стационарный = FALSE, ic = c («aic», «aicc», «bic»), пошаговый = TRUE, трассировка = FALSE, приближение = (длина (x) > 100 | частота (x) > 12), xreg = NULL, test = c ("kpss", "adf", "pp"), Season.test = c ("ocsb", " ch"), allowdrift = TRUE, lambda = NULL)

Внедрение LSTM: –

Чтобы реализовать LSTM, начнем с библиотеки Keras на питоне. Как упоминалось ранее, LSTM — это тип RNN, который может хранить и изучать длинную последовательность наблюдений, поэтому в качестве функции LSTM отображает последовательность прошлых наблюдений в качестве входных данных для выходного наблюдения. Из-за этой функции нам нужно подготовить данные таким образом, чтобы эта последовательность событий имела несколько наборов, из которых LSTM изучил шаблон. Я не даю код для этого шага подготовки данных, но он должен быть прямолинейным, чтобы разделить данные на несколько входов/выходов. Пример кода для модели LSTM: -

модель = Sequential()

model.add(LSTM(нейроны), stateful=True))

model.compile(loss=’mse’,optimizer=’adam’)

model.fit(X, y, epochs=i, verbose=0)

yhat = model.predict(x)

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

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

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

Первоначально опубликовано на https://www.linkedin.com.