Программа для прогнозирования, классификации и регрессии временных рядов

Решение проблем науки о данных с данными временных рядов в Python является сложной задачей.

Почему? Существующие инструменты плохо подходят для задач временных рядов и их нелегко интегрировать друг с другом. Методы пакета scikit-learn предполагают, что данные структурированы в табличном формате, и каждый столбец является i.i.d. - допущения, которые не верны для данных временных рядов. Пакеты, содержащие обучающие модули временных рядов, такие как статистические модели, плохо интегрируются друг с другом. Кроме того, многие важные операции с временными рядами, такие как разделение данных на обучающие и тестовые наборы во времени, недоступны в существующих пакетах python.

Чтобы решить эти проблемы, был создан sktime.

sktime - это набор инструментов Python с открытым исходным кодом для машинного обучения с временными рядами. Это проект сообщества, финансируемый Советом по экономическим и социальным исследованиям Великобритании, Центром исследования потребительских данных и Институтом Алана Тьюринга.

sktime расширяет API scikit-learn для задач временных рядов. Он предоставляет необходимые алгоритмы и инструменты преобразования для эффективного решения задач регрессии, прогнозирования и классификации временных рядов. Библиотека включает специальные алгоритмы обучения временных рядов и методы преобразования, недоступные в других распространенных библиотеках.

sktime был разработан для взаимодействия с scikit-learn, простой адаптации алгоритмов для взаимосвязанных задач временных рядов и построения составных моделей. Как? Многие задачи временных рядов связаны. Алгоритм, который может решить одну задачу, часто может быть повторно использован для решения связанной. Эта идея называется редукцией. Например, модель регрессии временных рядов (использование ряда для прогнозирования выходного значения) может быть повторно использована для задачи прогнозирования временных рядов (прогнозируемое выходное значение является будущим значением).

Заявление о миссии: sktime обеспечивает понятное и компонуемое машинное обучение с временными рядами. Он предоставляет алгоритмы, совместимые с «scikit-learn, и инструменты для построения моделей, поддерживаемые четкой систематизацией учебных задач, инструктивной документацией и дружелюбным сообществом ».

В оставшейся части этой статьи я выделю некоторые уникальные особенности sktime.

Правильная модель данных для временных рядов

Sktime использует вложенную структуру данных для временных рядов во фреймах данных pandas.

Каждая строка в типичном фрейме данных содержит i.i.d. наблюдения и столбцы представляют разные переменные. Для методов sktime каждая ячейка во фрейме данных Pandas теперь может содержать весь временной ряд. Этот формат является гибким для многомерных, панельных и разнородных данных и позволяет повторно использовать методы как в Pandas, так и в scikit-learn.

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

В следующей таблице каждый элемент в серии X разделен на отдельный столбец, как того требуют методы в scikit-learn. Размерность довольно высока - 251 столбец! Кроме того, временной порядок столбцов игнорируется алгоритмами табличного обучения (но используется алгоритмами классификации временных рядов и регрессии).

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

Что умеет sktime?

На странице Github в настоящее время sktime предоставляет:

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

API sktime

Как упоминалось ранее, sktime следует базовому API scikit-learn с методами подгонки, прогнозирования и преобразования.

Для классов оценщиков (также называемых моделями) sktime предоставляет метод соответствия для обучения модели и метод прогнозирования для создания новых прогнозов.

Оценщики в sktime расширяют регрессоры и классификаторы scikit-learn на их аналоги временных рядов. Sktime также включает новые оценщики, специфичные для задач временных рядов.

Для классов преобразователей sktime предоставляет методы fit и transform для преобразования данных ряда. Доступно несколько типов преобразований:

  • преобразователи табличных данных, такие как PCA, которые работают через i.i.d. экземпляры;
  • преобразователи рядов в примитивы, которые преобразуют временные ряды в каждой строке в примитивное число (например, транзакция функции);
  • преобразователи серии в серию преобразуют серию в другую серию (например, преобразование Фурье ряда);
  • Трансформаторы с устранением тренда возвращают временные ряды с удаленным трендом в той же области, что и входные ряды (например, сезонное устранение тренда).

Примеры кода

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

Следующий пример - это адаптация учебника по прогнозированию на Github. Ряд в этом примере (набор данных об авиакомпаниях Бокса-Дженкинса) показывает количество пассажиров международных авиакомпаний в месяц с 1949 по 1960 год.

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

Прежде чем создавать какие-либо сложные прогнозы, полезно сравнить свой прогноз с наивным исходным уровнем - хорошая модель должна превзойти это значение. sktime предоставляет метод NaiveForecaster с различными «стратегиями» для создания базовых прогнозов.

Код и диаграмма ниже демонстрируют два наивных прогноза. Синоптик со стратегией = «последний» всегда предсказывает последнее наблюдаемое значение ряда. Синоптик со стратегией = «Season_last» предсказывает последнее значение ряда, наблюдаемого в данном сезоне. Сезонность в примере указана как «sp = 12» или 12 месяцев.

Следующий фрагмент прогноза показывает, как существующие регрессоры sklearn могут быть легко и правильно адаптированы для задач прогнозирования с минимальными усилиями. Ниже метод sktime ReducedRegressionForecaster прогнозирует ряды с использованием модели sklearnRandomForestRegressor. Внутри sktime разбивает обучающие данные на окна длиной 12, чтобы регрессор мог обучаться.

sktime также содержит собственные методы прогнозирования, такие как AutoArima.

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



Классификация временных рядов

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

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

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









Дополнительные ресурсы sktime

Чтобы узнать больше о sktime, посетите следующие ссылки для получения подробной документации и примеров.

Не средний участник? Вступайте сегодня!



Дальнейшее чтение