Анализ временных рядов: по сравнению с традиционным машинным обучением
Что такое временной ряд? Многие из реальных данных представляют собой данные временных рядов, которые содержат важную временную ось. Данные временного ряда могут быть многомерными или одномерными, а время t может быть непрерывным, например, временной ряд электрических сигналов и напряжений, или дискретным, например, дневная цена закрытия различных акций. или общий ежемесячный объем продаж различных продуктов в конце каждого месяца. На практике мы обычно берем наблюдения только в оцифрованные дискретные моменты времени для анализа, даже временной ряд носит непрерывный характер. [1]
Основное различие между временными рядами и статическими данными заключается в наличии корреляции между прошлыми, настоящими и будущими значениями. Помня об этом важном атрибуте, должны быть реализованы отличные от традиционного машинного обучения методы вменения отсутствующих данных, обнаружения выбросов и перекрестной проверки. Например, пропущенные значения в статических данных могут быть заполнены средним значением или на основе алгоритма kNN, тогда как во временных рядах нет смысла заполнять пропущенные значения, беря подсказки из будущего. Распространенным методом для данных временных рядов для заполнения пропущенных значений и устранения шума является метод скользящего среднего. Также нецелесообразно проверять прошлые прогнозы временных рядов будущими значениями, что является ограничением при разработке метода оценки точности. Метод перекрестной проверки для одноэтапного прогнозирования с данными временных рядов показан ниже:
В следующих разделах мы проиллюстрируем декомпозицию и особенности временных рядов, а затем объясним и продемонстрируем широко используемый алгоритм ARIMA.
Разложение временных рядов
Мы можем извлечь определенные признаки из временных рядов для дальнейшего анализа, такого как классификация и интерполяция. Функции, происходящие от оси времени, могут быть связаны с другими общими функциями данных.
Начнем с декомпозиции временных рядов. Обычно используемая декомпозиция относится к тренду, сезонности, циклу, остаткам.
- Тренд (Tₜ): отражает долгосрочное развитие серии. Тенденция существует, когда в данных наблюдается постоянное увеличение или уменьшение направления, и она не обязательно должна быть линейной.
- Цикл (Cₜ): отражает повторяющиеся, но непериодические колебания.
- Сезонность (Sₜ): происходит в течение фиксированного и известного периода (например, квартал года, месяц или день недели).
- Остатки (Rₜ): это остаток временного ряда после удаления других компонентов, часто рассматриваемый как случайные нерегулярные шумы.
Классическое разложение является мультипликативным или аддитивным, формально:
Есть много способов описать описанные выше декомпозированные компоненты с помощью признаков. Например, сезонность может быть описана коэффициентами в повторяющихся моментах времени: например. «время суток», «день недели», «месяц года»; тенденция может быть описана с использованием регрессионной функции 1-го или 2-го порядка по оси времени. Что еще более важно, очень полезно использовать функцию запаздывания, прошлые значения целевого ряда, для описания разложенных компонентов, особенно циклов. Далее мы продемонстрируем алгоритм под названием ARIMA (авторегрессионное интегрированное скользящее среднее), который использует задержки для прогнозирования временных рядов. ARIMA лучше всего работает для аддитивной декомпозиции, а для мультипликативной декомпозиции можно рассмотреть возможность использования логарифмического преобразования временных рядов.
АРИМА
ARIMA представляет собой комбинацию авторегрессии (AR), интегрированной (I) и скользящей средней (MA).
- Авторегрессия (AR): спрогнозируйте интересующую переменную, используя линейную комбинацию прошлых значений переменной.
- Интегрированный (I): примените разность необработанных наблюдений, чтобы временной ряд стал стационарным. Стационарные средние статистические свойства не зависят от времени наблюдения ряда. (т. е. временные ряды с тенденциями или сезонностью не являются стационарными)
- Скользящее среднее (MA): использует прошлые ошибки прогноза в регрессионной модели.
Полная модель может быть записана следующим образом (где y’ₜ — разностный ряд):
Параметры
Параметры модели ARIMA определяются следующим образом:
- Порядок запаздывания (p): количество наблюдений запаздывания, включенных в модель.
- Степень различия (d): количество раз, когда необработанные наблюдения различаются.
- Порядок скользящей средней (q): размер окна скользящей средней.
Поиск степени различия
Сначала следует определить степень разности (d), чтобы сделать временной ряд стационарным. Одним из способов определения этого параметра является применение теста ADF к разностным сериям. Нулевая гипотеза теста ADF относится к нестационарности временного ряда. Таким образом, если p-значение теста меньше уровня значимости (0,05), то нулевая гипотеза отвергается, и разностные временные ряды действительно стационарны.
Поиск порядка задержки
Как правило, нецелесообразно включать в модель каждую задержку, и количество задержек для включения следует определять на основе последовательной зависимости, которую можно оценить, проверив график частичной автокорреляционной функции (PACF). Что такое ПАКФ? Частичную автокорреляцию можно представить как корреляцию между рядом и его лагом после исключения вкладов промежуточных лагов. В уравнении авторегрессии частичная автокорреляция запаздывания (k) ряда представляет собой коэффициент этого запаздывания. Количество лагов, которые имеют значения частичной автокорреляции выше определенного уровня значимости, определяет значение порядка лага.
Поиск порядка скользящей средней
Подобно нахождению порядка запаздывания, порядок скользящего среднего можно определить с помощью графика автокорреляционной функции (ACF). В отличие от PACF, ACF просто измеряет корреляцию между серией и ее запаздыванием, включая эффекты, вызванные промежуточными задержками. Количество лагов, у которых значения автокорреляции выше определенного уровня значимости, определяет значение порядка скользящего среднего.
Существуют различные другие способы поиска параметров, такие как функция auto.arima() в pmdarima, которая использует пошаговый подход для поиска нескольких комбинаций параметров p, d, q и выбирает лучшую модель с наименьшим AIC. [3]
Запуск ARIMA со статистическими моделями
В Python пакет statsmodels имеет отличную простую реализацию ARIMA, которую можно легко применять для прогнозирования временных рядов.
Данные
Мы выбираем простой небольшой набор данных из https://github.com/jbrownlee/Datasets/blob/master/monthly-writing-paper-sales.csv, который отслеживает ежемесячные продажи специализированных письменных работ CFE. Эти данные отслеживают данные за 147 месяцев, поэтому это относительно небольшой набор данных. На рисунке ниже мы также видим, что он, скорее всего, не стационарен, так как наблюдается постоянный рост продаж по месяцам.
Фитинг АРИМА
Поскольку данных довольно мало (и они основаны на предыдущих экспериментах), мы можем сохранить порядок члена скользящей средней (MA) равным 0 в этом анализе. Однако нам необходимо определить порядок запаздывания и степень различия.
Определение степени различия
Во-первых, мы запускаем тест ADF, чтобы увидеть, являются ли данные стационарными. При выполнении этого для нескольких показателей, как видно на рисунке ниже, мы находим значение p около 0,34. Поскольку это не меньше 0,05, мы не можем отвергнуть нулевую гипотезу, что указывает на то, что наши данные не являются стационарными.
Используя numpy для вычисления разницы второго порядка временного ряда, мы находим значение p ниже 0,05, что означает, что это делает данные стационарными. Следовательно, мы используем d=2 в качестве нашего разностного значения:
Определить порядок задержки
Мы можем использовать функцию plot_pacf в библиотеке statsmodels для построения графика функции частичной автокорреляции, результаты которого можно увидеть на рисунке ниже. Исходя из этого графика, мы можем быть уверены, что порядок запаздывания больше 15 не потребуется.
Запуск ARIMA
Используя статистические модели, мы можем легко запустить ARIMA, просто предоставив наши временные ряды и параметры p, d и q. На рисунке ниже мы показываем сводные статистические модели для модели ARIMA. Почти каждый параметр считается значимым, что является хорошим признаком. Поскольку последние несколько параметров запаздывания несущественны, способ улучшить и упростить модель — уменьшить порядок запаздывания с 15 до 12.
Чтобы определить, насколько хорошо работает эта модель, мы можем обучить модель на первых двух третях данных и указать ей прогнозировать оставшиеся данные. Мы можем сделать это, просто вызвав метод прогноза в нашей обученной модели ARIMA, как показано на рисунке ниже.
При выполнении этого мы находим результат, показанный на рисунке ниже. Хотя модель не идеальна, она эффективно учится, когда ожидается падение и увеличение продаж.
Краткие выводы
Запустить ARIMA с пакетом statsmodels очень просто! Модель также легко расширяется до сезонных или более сложных трендов.
Авторы
Юци Шао является членом KTH AI Society, студентом магистра прикладной и вычислительной математики в Королевском технологическом институте KTH. Вы можете связаться с ней в LinkedIn или по электронной почте [email protected].
Натан Бош — руководитель отдела образования KTH AI Society, студент магистратуры по машинному обучению в Королевском технологическом институте KTH и кандидат диссертации в компании Ericsson. Вы можете связаться с ним в LinkedIn или по электронной почте [email protected].
Рекомендации
[1] Уильям В. С. Вей, Многомерный анализ временных рядов и приложения, 2019 г.
[2] Роб Дж. Хайндман, Джордж Атанасопулос, Прогнозирование: принципы и практика, https://otexts.com/fpp3/tscv.html
[3] Сельва Прабхакаран, Модель ARIMA — Полное руководство по прогнозированию временных рядов в Python, 2021 г., https://www.machinelearningplus.com/time-series/arima-model-time-series-forecasting-python/