Введение в авторегрессивную модель распределенных задержек с использованием Python.

Здесь вы узнаете, как создавать модели прогнозирования с многомерными временными рядами.

Это продолжение моего предыдущего поста. Там я описываю основные этапы контролируемого обучения с одномерными временными рядами.

Введение

Временной ряд является многомерным, если он содержит более одной переменной.

См. пример на рис. 1. Он показывает ежемесячные многомерные временные ряды о продажах различных видов вина. Каждый тип вина является переменной во временном ряду.

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

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

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

Продажи игристых вин (вторая строка) показывают достойную корреляцию с продажами других вин.

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

Мы можем сделать это с помощью подхода под названием Авторегрессивная распределенная задержка (ARDL).

Авторегрессивная распределенная задержка

Авторегрессия с одномерными временными рядами

Как следует из названия, модель ARDL основывается на авторегрессии.

Авторегрессия является основой большинства одномерных моделей временных рядов. Он работает в два основных этапа.

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

Затем мы строим регрессионную модель. Будущие значения представляют целевую переменную. Объясняющие переменные — это прошлые недавние значения.

Многомерный случай

Идея аналогична для многомерных временных рядов. Но вы также добавляете прошлые значения других переменных к независимым переменным. Это приводит к методу под названием Авторегрессивные распределенные задержки. Название Распределенные лаги относится к использованию лагов дополнительных переменных.

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

Давайте закодируем этот метод, чтобы было понятно.

Руки вверх

Многомерные временные ряды часто относятся к данным о продажах многих связанных продуктов. В качестве примера мы будем использовать временные ряды продаж вина. Получить его можно здесь или здесь. Тем не менее, подход ARDL применим и к другим областям помимо розничной торговли.

Преобразование временного ряда

Начнем с преобразования временных рядов с помощью приведенного ниже сценария.

Мы применяем функцию time_delay_embedding к каждой переменной временного ряда (строки 18–22). Результаты объединяются в один фрейм данных pandas в строке 23.

Независимые переменные (X) — это последние 12 известных значений каждой переменной на каждом временном шаге (строка 29). Вот как они выглядят для задержки t-1 (другие задержки опущены для краткости):

Целевые переменные определены в строке 30. Они относятся к будущим 6 значениям продаж игристых вин:

Построение модели

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

После подгонки модели (строка 11) мы получаем прогнозы в тестовом наборе (строка 14). Модель получает среднюю абсолютную ошибку 288,13.

Выбор количества лагов

Мы использовали 12 лагов каждой переменной в качестве объясняющих переменных. Это было определено в параметре n_lags функции time_delay_embedding.

Как установить значение этого параметра?

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

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

Вот упрощенная версия этого процесса. Лучшие 10 функций выбираются в соответствии с оценками важности Random Forests. Затем цикл обучения и тестирования повторяется.

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

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

Расширения для АРДЛ

Несколько целевых переменных

Мы стремились прогнозировать одну переменную (игристое вино). Что, если мы заинтересованы в прогнозировании нескольких?

Это привело бы к методу, называемому векторной авторегрессией (VAR).

Как и в ARDL, каждая переменная моделируется на основе ее лагов и лагов других переменных. VAR используется, когда вы хотите предсказать множество переменных, а не одну.

Связь с глобальными моделями прогнозирования

Стоит отметить, что ARDL — это не то же самое, что Глобальная модель прогнозирования.

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

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

Вынос

  • Многомерный временной ряд содержит две или более переменных;
  • Метод ARDL можно использовать для контролируемого обучения с многомерными временными рядами;
  • Оптимизируйте количество задержек, используя стратегии выбора функций.
  • Используйте метод VAR, если вы хотите предсказать более одной переменной.

Спасибо за прочтение и до встречи в следующей истории!

Рекомендации

[1] Роб Хайндман и Янчжуоран Ян (2018). tsdl: Библиотека данных временных рядов. v0.1.0. https://pkg.yangzhuoranyang.com/tsdl/