Автор Francesca Lazzeri. Эта статья является выдержкой из книги Машинное обучение для прогнозирования временных рядов с помощью Python , также выпущенной Lazzeri, опубликованной Wiley.

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

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

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

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

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

В следующих разделах я рассмотрю четыре категории временных характеристик, которые чрезвычайно полезны в сценариях временных рядов:

  • Дата, время, особенности
  • Особенности лагов и особенности окон
  • Статистика скользящего окна
  • Статистика расширяемого окна

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

Дата, время, особенности

Функции даты и времени - это функции, созданные на основе значения отметки времени каждого наблюдения. Несколько примеров этих функций: целые часы, месяц и день недели для каждого наблюдения. Специалисты по обработке данных могут выполнять преобразования этих функций даты и времени с помощью панд и добавлять новые столбцы (столбцы часов, месяцев и дней недели) в исходный набор данных, где информация о часах, месяцах и днях недели извлекается из значения временной метки для каждого наблюдения. .

Ниже приведен пример кода Python для выполнения этого с набором ts_data:

ts_data['hour'] = [ts_data.index[i].hour for i in range(len(ts_data))]
ts_data['month'] = [ts_data.index[i].month for i in range(len(ts_data))]
ts_data['dayofweek'] = [ts_data.index[i].day for i in range(len(ts_data))]

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

                    load     temp  hour month dayofweek 
2012-01-01 00:00:00 2,698.00 32.00 0    1     1 
2012-01-01 01:00:00 2,558.00 32.67 1    1     1 
2012-01-01 02:00:00 2,444.00 30.00 2    1     1 
2012-01-01 03:00:00 2,402.00 31.00 3    1     1 
2012-01-01 04:00:00 2,403.00 32.00 4    1     1

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

  • Выходные или нет
  • Минут в день
  • Летнее время или нет
  • Государственный праздник или нет
  • Квартал года
  • Час дня
  • Время года

Как видно из приведенных выше примеров, функции даты и времени не ограничиваются только целочисленными значениями. Специалисты по обработке данных также могут создавать двоичные функции, например, функцию, в которой, если информация о временной метке находится до рабочего времени, ее значение равно 1, а если информация о временной метке находится в нерабочее время, ее значение равно 0. Наконец, при работе При работе с данными временных рядов важно помнить обо всех свойствах даты и времени, к которым вы можете получить доступ с помощью Timestamp или DatetimeIndex.

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

Особенности лагов и особенности окон

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

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

Библиотека pandas предоставляет функцию shift (), которая помогает создавать эти смещенные или запаздывающие функции из набора данных временных рядов: эта функция сдвигает индекс на желаемое количество периодов с дополнительной временной частотой. Метод shift принимает аргумент freq, который может принимать класс DateOffset или объект, подобный timedelta, или также псевдоним смещения.

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

Операция добавления функций задержки называется методом скользящего окна или w функциями indow. В приведенном выше примере показано, как применить метод скользящего окна с шириной окна восемь. Функции окна - это сводка значений за фиксированное окно предыдущих временных шагов.

В зависимости от сценария временных рядов вы можете расширить ширину окна и включить больше запаздывающих функций. Распространенный вопрос, который специалисты по данным задают перед выполнением операции добавления функций задержки, - насколько большим сделать окно. Хорошим подходом было бы создать серию окон различной ширины и, в качестве альтернативы, добавить и удалить их из набора данных, чтобы увидеть, какое из них оказывает более очевидное положительное влияние на производительность модели.

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

Статистика скользящего окна

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

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

Одна из наиболее популярных скользящих статистик - это скользящая средняя. Это берет скользящее окно времени и вычисляет среднее или среднее значение этого периода времени как текущее значение. Что-то, что предоставляет pandas, - это функция Rolling (), которая обеспечивает вычисления скользящего окна и создает новую структуру данных с окном значений на каждом временном шаге. Затем можно выполнять статистические функции в окне значений, собранных для каждого временного шага, например, вычислять среднее значение.

Специалисты по обработке данных могут использовать функцию concat () в пандах для создания нового набора данных только с новыми столбцами. Эта функция объединяет объекты pandas вдоль определенной оси с необязательной логикой установки вдоль других осей. Он также может добавить уровень иерархической индексации на оси конкатенации, что может быть полезно, если метки совпадают (или перекрываются) на переданном номере оси.

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

Статистика расширяемого окна

Статистика расширяемого окна состоит из функций, которые включают все предыдущие данные. Что-то, что предлагает pandas, - это функция expanding (), которая обеспечивает расширяющиеся преобразования и собирает наборы всех предыдущих значений для каждого временного шага. Python предлагает тот же интерфейс и возможности для функций Rolling () и expanding ().

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

# create expanding window features 
from pandas import concat
load_val = ts_data[['load']] window = load_val.expanding() 
new_dataframe = concat([window.min(),  window.mean(), window.max(), load_val. shift(-1)], axis=1) new_dataframe.columns = ['min', 'mean', 'max', 'load+1']
print(new_dataframe.head(10))

При выполнении примера печатаются первые десять строк нового набора данных с дополнительными функциями расширения окна:

                    min      mean     max      load+1 
2012-01-01 00:00:00 2,698.00 2,698.00 2,698.00 2,558.00 
2012-01-01 01:00:00 2,558.00 2,628.00 2,698.00 2,444.00 
2012-01-01 02:00:00 2,444.00 2,566.67 2,698.00 2,402.00 
2012-01-01 03:00:00 2,402.00 2,525.50 2,698.00 2,403.00 
2012-01-01 04:00:00 2,402.00 2,501.00 2,698.00 2,453.00 
2012-01-01 05:00:00 2,402.00 2,493.00 2,698.00 2,560.00 
2012-01-01 06:00:00 2,402.00 2,502.57 2,698.00 2,719.00 
2012-01-01 07:00:00 2,402.00 2,529.62 2,719.00 2,916.00 
2012-01-01 08:00:00 2,402.00 2,572.56 2,916.00 3,105.00 
2012-01-01 09:00:00 2,402.00 2,625.80 3,105.00 3,174.00

Заключение

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

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

использованная литература

Франческа Лаззери находится в LinkedIn и Twitter.