Введение

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

Этот пост будет посвящен обнаружению выбросов и интерполяции данных временных рядов с использованием библиотеки Facebook Kats. Вы научитесь регистрировать визуализации в проекте Comet.ml.

Фейсбук Катс

Существует множество библиотек с открытым исходным кодом для анализа данных временных рядов, таких как Sktime, Darts, Prophet, Pyflux, Tsfresh, Flint, Arrow, Kats, Pastas, Orbit и т. д. В этом посте вы научитесь использовать библиотеку Kats благодаря к его легкой, универсальной и простой в использовании структуре.

В дополнение к одномерному и многомерному анализу он предлагает различные функции анализа и предварительной обработки, такие как:

  • Прогнозирование. В нем есть множество инструментов для прогнозирования, в том числе классические, такие как ARIMA, ARMA, SARIMA и т. д., и современные модели прогнозирования, такие как Prophet. Он также предлагает ансамбли, алгоритмы метаобучения, настройку гиперпараметров с использованием поиска по сетке, ретроспективное тестирование и интервалы эмпирического прогнозирования.
  • Обнаружение выбросов и точек изменения. Выявляет закономерности, такие как тенденция, сезонность, выбросы и точки изменения.
  • Разработка функций. Модуль TSFeature может генерировать множество статистических функций, используемых в моделях классификации и регрессии.
  • Утилиты. Kats предоставляет симуляторы временных рядов для экспериментов.

Установка так же проста, как:

pip install kats

Комета.мл

Платформа машинного обучения Comet — это интерактивный инструмент, который интегрируется с вашей существующей инфраструктурой и инструментами, чтобы упростить и ускорить управление, визуализацию и оптимизацию моделей. Это обеспечивает беспрепятственное сотрудничество в мультигеографических командах, включая регистрацию экспериментов, коммиты git, сравнение экспериментов и воспроизводимость.

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

Для установки выполните следующую команду в своем терминале:

pip install comet_ml

Теперь, когда у вас установлена ​​библиотека comet_ml, давайте создадим учетную запись Comet, чтобы вести журнал!

Создание вашего проекта Comet

Если вы новичок в Comet, откройте comet.com и нажмите «Создать бесплатную учетную запись».

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

Затем вы можете создать новый проект, нажав «+ Новый проект» и добавив имя проекта, описание, а также указать, следует ли оставить его закрытым или общедоступным.

Нажмите «Краткое руководство», чтобы перейти на страницу с инструкциями по настройке, где вы найдете свой ключ API.

Регистрация визуализаций

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

from comet_ml import Experiment
experiment = Experiment(
    api_key="add your api key here",
    project_name="add your project name here",
    workspace="add your workspace name here",
)

Теперь, когда вы разобрались с инструментами, давайте перейдем к делу. Вы будете экспериментировать с популярными данными Air Passenger, которые имеют сезонность и тенденцию, помимо функций авторегрессии и скользящего среднего.

Хотите попробовать Comet самостоятельно? "Создайте свой бесплатный аккаунт прямо сейчас!"

Подготовка данных

Вам необходимо преобразовать фрейм данных Pandas в формат данных временных рядов, используя метод «TimeSeriesData». Кроме того, для этого требуется измерение времени и измерение значения, что потребует от вас переименования столбцов фрейма данных.

Давайте сделаем это шаг за шагом.

Импорт необходимых библиотек

import pandas as pd
import matplotlib.pyplot as plt
from kats.consts import TimeSeriesData

Прочитайте данные CSV и просмотрите первые пять строк.

ap_df = pd.read_csv("AirPassengers.csv")
ap_df.head()

Это выглядит великолепно: у вас есть месячное количество авиапассажиров с января 1949 года по декабрь 1960 года. Вы можете получить это следующим образом:

# Start month in the Data Frame
ap_df.min()
# End month in the Date Frame
ap_df.max()

Нанесите данные об авиапассажире.

Установите размер фигуры в соответствии с вашими потребностями, затем постройте линейную диаграмму и, наконец, зарегистрируйте свою диаграмму в эксперименте в проекте Comet, используя log_figure(). Это можно посмотреть на вкладке «Графика» в веб-интерфейсе проекта.

Код для построения и регистрации рисунка приведен ниже:

plt.figure(figsize=(35,20))
fig = plt.plot(ap_df['Month'], ap_df["#Passengers"])
plt.xticks(rotation=90)
experiment.log_figure(figure_name = "Complete Data", figure=fig, overwrite=False)

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

Обнаружение выбросов

Данные Air Passenger представляют собой модельный набор данных, который не содержит никаких аномалий или выбросов. Для целей этого упражнения давайте добавим искусственный выброс и посмотрим, сможет ли Катс найти мышь. О, о! выброс!

Давайте изменим одно из значений во фрейме данных на очень большое значение, в данном случае 700.

ap_df['#Passengers'][50]=700

Давайте визуализируем данные, чтобы представить выброс.

plt.figure(figsize=(15,10))
fig = plt.plot(ap_df['Month'], ap_df["#Passengers"])
experiment.log_figure(figure_name = "Complete Data with Anomaly", figure=fig, overwrite=False)

Чтобы использовать Kats, давайте сделаем следующее:

  • Преобразуйте столбец «Месяц» в формат DateTime.
  • Переименуйте столбцы во фрейме данных в «время» и «значение» соответственно.
  • Преобразуйте объект фрейма данных в объект данных временного ряда.
  • Затем используйте метод детектора выбросов для выявления выбросов.
  • Теперь выведите верхний выброс при нулевых индексах объекта-детектора.
ap_df['Month'] = pd.to_datetime(ap_df['Month'])
ap_df.columns = ['time', 'value']
outlier_ts = TimeSeriesData(ap_df)
ts_outlierDetection = OutlierDetector(outlier_ts, 'multiplicative')
ts_outlierDetection.detector()
ts_outlierDetection.outliers[0]

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

outlier_ts_interpolated = ts_outlierDetection.remover(interpolate = True)

Преобразуйте объект данных временных рядов в объект Data Frame и переименуйте столбцы в исходные имена.

ap_df = outlier_ts_interpolated.to_dataframe()
ap_df.columns = ['Month', "#Passengers"]

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

plt.figure(figsize=(15,10))
fig = plt.plot(ap_df['Month'], ap_df["#Passengers"])
experiment.log_figure(figure_name = "Anomaly Removed", figure=fig, overwrite=False)

Вуаля! Вы снова получили исходные чистые данные.

Примечание. Если вы используете блокнот для проведения экспериментов, не забудьте вызвать experiement.end(), когда закончите.

Краткое содержание

В этом посте вы узнали, как обрабатывать выбросы с помощью библиотеки Facebook Kats. Вы также узнали, как создать бесплатную учетную запись сообщества на сайте comet.com и записывать графики с помощью API Comet Python.

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

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