- 11 Классических методов прогнозирования временных рядов в Python (Шпаргалка)
- обзор
- Авторегрессия (AR)
- Код Python
- Дополнительная информация
- Скользящая средняя (мА)
- Код Python
- Дополнительная информация
- Авторегрессионная скользящая средняя (ARMA)
- Код Python
- Дополнительная информация
- Авторегрессионное интегрированное скользящее среднее (ARIMA)
- Код Python
- Дополнительная информация
- Сезонные авторегрессионные интегрированные скользящие средние (SARIMA)
- Код Python
- Дополнительная информация
- Сезонные авторегрессионные интегрированные скользящие средние с экзогенными регрессорами (SARIMAX)
- Код Python
- Дополнительная информация
- Векторная авторегрессия (VAR)
- Код Python
- Дополнительная информация
- Скользящее среднее векторной авторегрессии (VARMA)
- Код Python
- Дополнительная информация
- Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX)
- Код Python
- Дополнительная информация
- Простое экспоненциальное сглаживание (SES)
- Код Python
- Дополнительная информация
- Экспоненциальное сглаживание Холта Винтера (HWES)
- Код Python
- Дополнительная информация
- Дальнейшее чтение
- Резюме
- Прогнозирование временных рядов с LSTM в Python
- Прогнозирование временных рядов с LSTM в Python
- Набор данных и определение проблемы
- Предварительная обработка данных
- Создание модели LSTM
11 Классических методов прогнозирования временных рядов в Python (Шпаргалка)
Дата публикации 2018-08-06
Методы машинного обучения могут использоваться для классификации и прогнозирования проблем временных рядов.
Прежде чем исследовать методы машинного обучения для временных рядов, рекомендуется убедиться, что вы исчерпали классические методы прогнозирования линейных временных рядов. Классические методы прогнозирования временных рядов могут быть ориентированы на линейные отношения, тем не менее, они являются сложными и хорошо справляются с широким спектром проблем, при условии, что ваши данные подготовлены надлежащим образом и метод хорошо настроен.
В этой статье вы познакомитесь с набором классических методов прогнозирования временных рядов, которые вы можете проверить на своей проблеме прогнозирования до изучения методов машинного обучения.
Пост структурирован как шпаргалка, чтобы дать вам достаточно информации о каждом методе, чтобы начать работу с примером работающего кода и где искать дополнительную информацию о методе.
Все примеры кода на языке Python и используют библиотеку Statsmodels. API для этой библиотеки могут быть сложными для начинающих (поверьте мне!), Поэтому использование примера рабочего кода в качестве отправной точки значительно ускорит ваш прогресс.
Это большой пост; Вы можете добавить в закладки.
обзор
Этот шпаргалка демонстрирует 11 различных классических методов прогнозирования временных рядов; они есть:
- Авторегрессия (AR)
- Скользящая средняя (мА)
- Авторегрессионная скользящая средняя (ARMA)
- Авторегрессионное интегрированное скользящее среднее (ARIMA)
- Сезонные авторегрессионные интегрированные скользящие средние (SARIMA)
- Сезонные авторегрессионные интегрированные скользящие средние с экзогенными регрессорами (SARIMAX)
- Векторная авторегрессия (VAR)
- Скользящее среднее векторной авторегрессии (VARMA)
- Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX)
- Простое экспоненциальное сглаживание (SES)
- Экспоненциальное сглаживание Холта Винтера (HWES)
Я пропустил ваш любимый классический метод прогнозирования временных рядов?
Позвольте мне знать в комментариях ниже.
Каждый метод представлен в согласованной манере.
- Описание, Краткое и точное описание техники.
- Код Python, Краткий рабочий пример подгонки модели и прогнозирования в Python.
- Дополнительная информация, Ссылки на API и алгоритм.
Каждый пример кода демонстрируется на основе простого надуманного набора данных, который может или не может быть подходящим для метода. Замените надуманный набор данных своими данными, чтобы протестировать метод.
Помните: каждый метод потребует настройки под вашу конкретную проблему. Во многих случаях у меня есть примеры того, как настроить и даже сеточные параметры поиска в блоге, попробуйте функцию поиска.
Если вы нашли этот шпаргалку полезным, пожалуйста, дайте мне знать в комментариях ниже.
Авторегрессия (AR)
Метод авторегрессии (AR) моделирует следующий шаг в последовательности как линейную функцию наблюдений на предыдущих временных шагах.
Обозначения для модели включают в себя указание порядка модели p в качестве параметра для функции AR, например, АР (р). Например, AR (1) является моделью авторегрессии первого порядка.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Скользящая средняя (мА)
Метод скользящего среднего (MA) моделирует следующий шаг в последовательности как линейную функцию от остаточных ошибок из среднего процесса на предыдущих временных шагах.
Модель скользящего среднего отличается от вычисления скользящего среднего временного ряда.
Обозначение для модели включает в себя указание порядка модели q в качестве параметра функции MA, например, М. А. (д). Например, MA (1) является моделью скользящего среднего первого порядка.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Мы можем использовать класс ARMA для создания модели MA и установки модели AR нулевого порядка. Мы должны указать порядок модели MA в аргументе order.
Дополнительная информация
Авторегрессионная скользящая средняя (ARMA)
Метод авторегрессионного скользящего среднего (ARMA) моделирует следующий шаг в последовательности как линейную функцию наблюдений и случайных ошибок на предыдущих временных шагах.
Он объединяет модели авторегрессии (AR) и скользящей средней (MA).
Обозначение модели включает в себя указание порядка для моделей AR (p) и MA (q) в качестве параметров функции ARMA, например, ARMA (p, q). Модель ARIMA может использоваться для разработки моделей AR или MA.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Авторегрессионное интегрированное скользящее среднее (ARIMA)
Метод авторегрессионного интегрированного скользящего среднего (ARIMA) моделирует следующий шаг в последовательности как линейную функцию разностных наблюдений и остаточных ошибок на предыдущих временных шагах.
Он объединяет модели авторегрессии (AR) и скользящего среднего (MA), а также этап предварительной обработки разностной последовательности, чтобы сделать последовательность стационарной, называемой интеграцией (I).
Обозначения для модели включают указание порядка для моделей AR (p), I (d) и MA (q) в качестве параметров функции ARIMA, например, АРИМА (p, d, q). Модель ARIMA также может быть использована для разработки моделей AR, MA и ARMA.
Метод подходит для одномерных временных рядов с трендом и без сезонных компонентов.
Код Python
Дополнительная информация
Сезонные авторегрессионные интегрированные скользящие средние (SARIMA)
Метод сезонного авторегрессионного интегрированного скользящего среднего (SARIMA) моделирует следующий шаг в последовательности как линейную функцию разностных наблюдений, ошибок, разностных сезонных наблюдений и сезонных ошибок на предыдущих временных шагах.
Он сочетает в себе модель ARIMA с возможностью выполнения той же модели авторегрессии, дифференцирования и скользящего среднего на сезонном уровне.
Обозначения для модели включают указание порядка для моделей AR (p), I (d) и MA (q) в качестве параметров функции ARIMA и AR (P), I (D), MA (Q) и m. параметры на сезонном уровне, например SARIMA (p, d, q) (P, D, Q) m, где «m» — количество временных шагов в каждом сезоне (сезонный период). Модель SARIMA может использоваться для разработки моделей AR, MA, ARMA и ARIMA.
Метод подходит для одномерных временных рядов с трендовыми и / или сезонными компонентами.
Код Python
Дополнительная информация
Сезонные авторегрессионные интегрированные скользящие средние с экзогенными регрессорами (SARIMAX)
Сезонная авторегрессионная интегрированная скользящая средняя с экзогенными регрессорами (SARIMAX) является расширением модели SARIMA, которая также включает моделирование экзогенных переменных.
Экзогенные переменные также называются ковариатами, и их можно рассматривать как параллельные входные последовательности, наблюдения которых выполняются с теми же временными шагами, что и исходный ряд. Первичные серии могут быть названы эндогенными данными, чтобы отличать их от экзогенной последовательности (последовательностей). Наблюдения за экзогенными переменными включаются в модель непосредственно на каждом временном шаге и не моделируются так же, как первичная эндогенная последовательность (например, процесс AR, MA и т. Д.).
Метод SARIMAX также можно использовать для моделирования подгруппированных моделей с внешними переменными, такими как ARX, MAX, ARMAX и ARIMAX.
Метод подходит для одномерных временных рядов с трендовыми и / или сезонными компонентами и экзогенными переменными.
Код Python
Дополнительная информация
Векторная авторегрессия (VAR)
Метод векторной авторегрессии (VAR) моделирует следующий шаг в каждом временном ряду, используя модель AR. Это обобщение AR на несколько параллельных временных рядов, например, многомерный временной ряд.
Обозначение модели включает в себя указание порядка для модели AR (p) в качестве параметров функции VAR, например, ВДП (р).
Метод подходит для многомерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Скользящее среднее векторной авторегрессии (VARMA)
Метод скользящей средней векторной авторегрессии (VARMA) моделирует следующий шаг в каждом временном ряду, используя модель ARMA. Это обобщение ARMA для нескольких параллельных временных рядов, например, многомерный временной ряд.
Обозначение модели включает в себя указание порядка для моделей AR (p) и MA (q) в качестве параметров функции VARMA, например, Варма (р, д). Модель VARMA также может быть использована для разработки моделей VAR или VMA.
Метод подходит для многомерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX)
Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX) является расширением модели VARMA, которая также включает моделирование экзогенных переменных. Это многовариантная версия метода ARMAX.
Экзогенные переменные также называются ковариатами, и их можно рассматривать как параллельные входные последовательности, наблюдения которых выполняются с теми же временными шагами, что и исходный ряд. Первичный ряд (ы) называют эндогенными данными, чтобы отличать их от экзогенной последовательности (последовательностей). Наблюдения за экзогенными переменными включаются в модель непосредственно на каждом временном шаге и не моделируются так же, как первичная эндогенная последовательность (например, процесс AR, MA и т. Д.).
Метод VARMAX также можно использовать для моделирования подгруппированных моделей с внешними переменными, такими как VARX и VMAX.
Метод подходит для многомерных временных рядов без трендовых и сезонных компонентов и экзогенных переменных.
Код Python
Дополнительная информация
Простое экспоненциальное сглаживание (SES)
Метод простого экспоненциального сглаживания (SES) моделирует следующий временной шаг как экспоненциально взвешенную линейную функцию наблюдений на предыдущих временных шагах.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Экспоненциальное сглаживание Холта Винтера (HWES)
Экспоненциальное сглаживание Холта Винтера (HWES) также называется методом тройного экспоненциального сглаживания, моделирует следующий временной шаг как экспоненциально взвешенную линейную функцию наблюдений на предыдущих временных шагах с учетом тенденций и сезонности.
Метод подходит для одномерных временных рядов с трендовыми и / или сезонными компонентами.
Код Python
Дополнительная информация
Дальнейшее чтение
Этот раздел предоставляет больше ресурсов по теме, если вы хотите углубиться.
Резюме
В этой статье вы обнаружили набор классических методов прогнозирования временных рядов, которые вы можете протестировать и настроить в своем наборе данных временных рядов.
Я пропустил ваш любимый классический метод прогнозирования временных рядов?
Позвольте мне знать в комментариях ниже.
Вы пробовали любой из этих методов в своем наборе данных?
Дайте мне знать о ваших выводах в комментариях.
У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.
Источник
Прогнозирование временных рядов с LSTM в Python
Данные временных рядов меняются со временем. В этой статье мы будем использовать Pitch для анализа данных временных рядов и прогнозирования будущих значений с помощью глубокого обучения.
Автор: Usman Malik
Дата записи
Прогнозирование временных рядов с LSTM в Python
Данные временных рядов, как следует из названия, – это тип данных, который изменяется со временем. Например, температура в течение 24-часового периода времени, цена различных продуктов в течение месяца, цены акций конкретной компании в течение года. Продвинутые модели глубокого обучения, такие как Long Short Term Memory Networks (LSTM), способны улавливать закономерности в данных временных рядов и поэтому могут быть использованы для прогнозирования будущего тренда данных. В этой статье вы увидите, как использовать алгоритм LSTM для прогнозирования будущего с использованием данных временных рядов.
В одной из моих предыдущих статей я объяснил, как выполнить анализ временных рядов с использованием LSTM в библиотеке Keras для прогнозирования будущих цен акций. В этой статье мы будем использовать библиотеку Python , которая является одной из наиболее часто используемых библиотек Python для глубокого обучения.
Прежде чем продолжить, предполагается, что вы владеете языком программирования Python среднего уровня и установили библиотеку PyTorch. Кроме того, поможет знание основных концепций машинного обучения и концепций глубокого обучения. Если вы еще не установили PyTorch, вы можете сделать это с помощью следующей команды pip:
Набор данных и определение проблемы
Набор данных, который мы будем использовать, встроен в библиотеку Python Seaborn . Давайте сначала импортируем необходимые библиотеки, а затем импортируем набор данных:
Давайте распечатаем список всех наборов данных, встроенных в библиотеку Seaborn:
Набор данных, который мы будем использовать, – это набор данных flights . Давайте загрузим набор данных в наше приложение и посмотрим, как он выглядит:
Набор данных состоит из трех столбцов: год , месяц и пассажиры . Столбец пассажиры содержит общее количество путешествующих пассажиров за указанный месяц. Давайте построим график формы нашего набора данных:
Вы можете видеть, что в наборе данных есть 144 строки и 3 столбца, что означает, что набор данных содержит 12-летнюю историю путешествий пассажиров.
Задача состоит в том, чтобы предсказать количество пассажиров, путешествовавших за последние 12 месяцев, исходя из первых 132 месяцев. Помните, что у нас есть запись 144 месяцев, а это означает, что данные за первые 132 месяца будут использоваться для обучения нашей модели LSTM, в то время как производительность модели будет оцениваться с использованием значений за последние 12 месяцев.
Давайте построим график частоты поездок пассажиров в месяц. Следующий сценарий увеличивает размер участка по умолчанию:
И этот следующий сценарий строит ежемесячную частоту числа пассажиров:
Вывод показывает, что с годами среднее количество пассажиров, путешествующих воздушным транспортом, увеличилось. Количество пассажиров, путешествующих в течение года, колеблется, что имеет смысл, потому что во время летних или зимних каникул количество путешествующих пассажиров увеличивается по сравнению с другими частями года.
Предварительная обработка данных
Типы столбцов в нашем наборе данных-это object , как показано в следующем коде:
Первым шагом предварительной обработки является изменение типа столбца passengers на float .
Теперь, если вы распечатаете массив all_data numpy, вы увидите следующие значения плавающего типа:
Далее мы разделим наш набор данных на обучающие и тестовые наборы. Алгоритм LSTM будет обучаться на обучающем наборе. Затем модель будет использоваться для составления прогнозов на тестовом наборе. Прогнозы будут сравниваться с фактическими значениями в тестовом наборе для оценки производительности обученной модели.
Первые 132 записи будут использоваться для обучения модели, а последние 12 записей будут использоваться в качестве тестового набора. Следующий сценарий делит данные на обучающие и тестовые наборы.
Теперь давайте напечатаем длину тестовых и тренировочных наборов:
Если вы сейчас распечатаете тестовые данные, то увидите, что они содержат последние 12 записей из массива all_data numpy:
Наш набор данных на данный момент не нормализован. Общее число пассажиров в первые годы значительно меньше по сравнению с общим числом пассажиров в последующие годы. Очень важно нормализовать данные для предсказаний временных рядов. Мы выполним минимальное/максимальное масштабирование набора данных, которое нормализует данные в определенном диапазоне минимальных и максимальных значений. Мы будем использовать класс MinMaxScaler из модуля sklearn.preprocessing для масштабирования наших данных. Для получения более подробной информации о реализации шкалы min/max посетите эту ссылку .
Следующий код нормализует наши данные с помощью скалера min/max с минимальными и максимальными значениями -1 и 1 соответственно.
Теперь давайте напечатаем первые 5 и последние 5 записей наших нормализованных данных о поездах.
Вы можете видеть, что значения набора данных теперь находятся в диапазоне от -1 до 1.
Здесь важно отметить, что нормализация данных применяется только к обучающим данным, а не к тестовым. Если нормализация применяется к тестовым данным, существует вероятность того, что некоторая информация будет просочена из обучающего набора в тестовый набор.
Следующим шагом является преобразование нашего набора данных в тензоры, поскольку модели PyTorch обучаются с использованием тензоров. Чтобы преобразовать набор данных в тензоры, мы можем просто передать наш набор данных конструктору объекта FloatTensor , как показано ниже:
Последний этап предварительной обработки-преобразование обучающих данных в последовательности и соответствующие метки.
Вы можете использовать любую длину последовательности, и это зависит от знания предметной области. Однако в нашем наборе данных удобно использовать последовательность длиной 12, так как у нас есть ежемесячные данные, а в году 12 месяцев. Если бы у нас были ежедневные данные, лучшая длина последовательности была бы 365, то есть количество дней в году. Поэтому мы установим длину входной последовательности для обучения равной 12.
Далее мы определим функцию с именем create_input_sequences . Функция примет необработанные входные данные и вернет список кортежей. В каждом кортеже первый элемент будет содержать список из 12 пунктов, соответствующих количеству пассажиров, путешествующих за 12 месяцев, второй элемент кортежа будет содержать один пункт, т. е. количество пассажиров за 12+1-й месяц.
Выполните следующий сценарий для создания последовательностей и соответствующих меток для обучения:
Если вы распечатаете длину списка train_in out_seq , то увидите, что он содержит 120 элементов. Это происходит потому, что, хотя обучающий набор содержит 132 элемента, длина последовательности равна 12, что означает, что первая последовательность состоит из первых 12 элементов, а 13-й элемент является меткой для первой последовательности. Аналогично, вторая последовательность начинается со второго элемента и заканчивается на 13-м элементе, тогда как 14-й элемент является меткой для второй последовательности и так далее.
Теперь давайте напечатаем первые 5 элементов списка train_in out_seq :
Вы можете видеть, что каждый элемент является кортежем, где первый элемент состоит из 12 элементов последовательности, а второй элемент кортежа содержит соответствующую метку.
Создание модели LSTM
Мы предварительно обработали данные, теперь самое время обучить нашу модель. Мы определим класс LSTM , который наследуется от класса nn.Module библиотеки PyTorch. Посмотрите мою последнюю статью, чтобы увидеть как создать классификационную модель с помощью PyTorch . Эта статья поможет вам понять, что происходит в следующем коде.
Позвольте мне кратко изложить то, что происходит в приведенном выше коде. Конструктор класса LSTM принимает три параметра:
- input_size : Соответствует количеству объектов во входных данных. Хотя длина нашей последовательности равна 12, для каждого месяца у нас есть только 1 значение, то есть общее количество пассажиров, поэтому входной размер будет равен 1.
- hidden_layer_size : Определяет количество скрытых слоев вместе с количеством нейронов в каждом слое. У нас будет один слой из 100 нейронов.
- output_size : Количество элементов в выводе, так как мы хотим предсказать количество пассажиров на 1 месяц в будущем, размер вывода будет равен 1.
Далее в конструкторе мы создаем переменные hidden_layer_size , lstm , linear и hidden_cell . Алгоритм LSTM принимает три входа: предыдущее скрытое состояние, предыдущее состояние ячейки и текущий вход. Переменная hidden_cell содержит предыдущее скрытое состояние и состояние ячейки. Переменные lstm и linear layer используются для создания слоев LSTM и linear.
Внутри метода forward в качестве параметра передается input_seq , который сначала передается через слой lstm . Выход слоя lstm – это скрытое состояние и состояние ячейки на текущем временном шаге, а также выход. Выходные данные из слоя lstm передаются в слой linear . Прогнозируемое количество пассажиров сохраняется в последнем элементе списка predictions , который возвращается вызывающей функции.
Следующим шагом является создание объекта класса LSTM () , определение функции потерь и оптимизатора. Поскольку мы решаем задачу классификации, мы будем использовать кросс-энтропийные потери . Для функции оптимизатора мы будем использовать adam optimizer .
Источник