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

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

Это включает в себя две вещи:

  • преобразование временных рядов из последовательности в табличный формат;
  • добавление новых функций на основе сводной статистики.

Введение

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

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

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

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

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

Встраивание временной задержки

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

Как это сделать с временными рядами?

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

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

Вот функция Python для этого:

Вот набор данных, когда эта функция применяется к последовательности от 1 до 9:

Возьмем для примера первую строку. Цель состоит в том, чтобы предсказать число 4 (столбец Series(t+1)). Независимые переменные — это последние 3 значения перед ним: 3, 2 и 1.

Встраивание с временной задержкой имеет прочную теоретическую основу. Вы можете проверить ссылку [1] для получения подробной информации. Теоремы вложения утверждают, что временные ряды эквивалентны до и после преобразования.

Полный пример

Давайте напишем полный пример. Мы будем использовать временные ряды солнечных пятен. Этот набор данных доступен в библиотеке pmdarima. Вот как это выглядит:

Ниже приведен пример преобразования временного ряда и обучения авторегрессионной модели.

Проверьте комментарии для получения дополнительной информации о каждом шаге.

Количество лагов и горизонт прогнозирования

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

Для этого есть несколько рецептов. Например, проверка частичной автокорреляции и определение того, где она значима. Вы также можете оптимизировать этот параметр с помощью перекрестной проверки.

Еще одним параметром является горизонт прогнозирования. Это количество будущих шагов, которые вы хотите спрогнозировать. Если это значение равно 1, проблема называется прогнозированием на один шаг вперед. Или прогнозирование на несколько шагов вперед иначе.

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

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

Извлечение признаков

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

Тем не менее, вы можете получить больше информации из них.

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

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

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

Вот пример. Я повторил приведенный выше код, но добавил шаг проектирования функций (строки 20–22).

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

Вот как выглядит важность функции:

Средняя характеристика является наиболее важной.

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

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

Выводы

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

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

Предыдущие истории, которые вы, возможно, захотите прочитать



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

[1] Такенс, Флорис. «Обнаружение странных аттракторов в турбулентности». Динамические системы и турбулентность, Warwick 1980. Springer, Берлин, Гейдельберг, 1981. 366–381.

[2] Бонтемпи, Джанлука, Сухайб Бен Тайеб и Янн-Аэль Ле Борн. «Стратегии машинного обучения для прогнозирования временных рядов». Европейская летняя школа бизнес-аналитики. Спрингер, Берлин, Гейдельберг, 2012.