Что такое Катс? Как использовать Kats для анализа временных рядов. Примеры функций Kats.

Kats — это пакет Python, разработанный командой Facebook Core Data Science. Это расшифровывается как «Kats: Kit для анализа временных рядов». Kats предоставляет различные инструменты и алгоритмы для анализа и прогнозирования временных рядов. Он разработан, чтобы быть удобным и эффективным, облегчая аналитикам и специалистам по данным работу с данными временных рядов.

История

Первоначальный выпуск: Пакет Kats был первоначально выпущен Facebook в марте 2020 года. Он был представлен как инструмент с открытым исходным кодом, специально разработанный для анализа временных рядов и прогнозирования.

С момента своего выпуска пакет Kats претерпел значительные изменения и расширения. Команда Facebook постоянно добавляла новые функции, алгоритмы и функциональные возможности, чтобы расширить свои возможности анализа временных рядов.

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

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

Со временем Катс завоевал популярность среди специалистов по данным и аналитиков, работающих с данными временных рядов. Его простота использования, обширная функциональность и интеграция с другими библиотеками Python способствовали его принятию в сообществе специалистов по данным.

Функции

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

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

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

Анализ тенденций. Kats предоставляет инструменты для анализа тенденций в данных временных рядов. Пользователи могут выполнять декомпозицию тренда, в том числе выделять сезонные и долгосрочные тренды.

Диагностика модели. В пакет входят утилиты для оценки производительности моделей временных рядов. Пользователи могут оценивать точность модели, визуализировать невязки и выполнять другие диагностические задачи.

Прогнозирование с Kats

Kats поддерживает следующие 10 базовых моделей прогнозирования:

  1. Линейный
  2. квадратичный
  3. АРИМА
  4. САРИМА
  5. Холт-Уинтерс
  6. Пророк
  7. AR-Net
  8. ЛСТМ
  9. Тета
  10. ВАР

Извлечение признаков с помощью Kats

Kats предоставляет модуль TsFeatures для расчета набора значимых признаков для временного ряда, в том числе:

  • STL (сезонная и трендовая декомпозиция с использованием лесса) Особенности -
  1. Сила сезонности
  2. Сила тренда
  3. шипастость
  4. Линейность
  • Величина сдвига уровня
  • Наличие плоских сегментов
  • Функции ACF и PACF
  • Экспонента Херста
  • АРХ Статистика

Установить Катс

Чтобы установить пакет Kats, вы можете использовать pip, установщик пакетов для Python. Откройте интерфейс командной строки и выполните следующую команду:

pip install kats

Пример

Инициировать TimeSeriesData

Мы будем использовать наборы данных air_passenger и multi_ts, чтобы продемонстрировать, как создать объект TimeSeriesData для одномерных и многомерных временных рядов соответственно.

import numpy as np
import pandas as pd
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
from kats.consts import TimeSeriesData

air_passengers_df = pd.read_csv("air_passengers.csv")
air_passengers_df.columns = ["time", "value"]
air_passengers_df.head()

multi_ts_df = pd.read_csv("multi_ts.csv", index_col=0)
multi_ts_df.columns = ["time", "v1", "v2"]
multi_ts_df.head()

Здесь мы создаем объекты TimeSeriesData:

air_passengers_ts = TimeSeriesData(air_passengers_df)
multi_ts = TimeSeriesData(multi_ts_df)
# check that the type of the data is a "TimeSeriesData" object for both cases
print(type(air_passengers_ts))
print(type(multi_ts))

# For the air_passengers TimeSeriesData, check that both time and value are pd.Series
print(type(air_passengers_ts.time))
print(type(air_passengers_ts.value))

# For the multi_ts TimeSeriesData, time is a pd.Series and value is a pd.DataFrame
print(type(multi_ts.time))
print(type(multi_ts.value))

Заговор

air_passengers_ts.plot(cols=['value'])
plt.show()

multi_ts.plot(cols=['v1','v2'])
plt.show()

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

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

# deep copy the air_passenger_df 
air_passengers_outlier_df = air_passengers_df.copy(deep=True)

# manually add outlier on the date of '1950-12-01'
air_passengers_outlier_df.loc[air_passengers_outlier_df.time == '1950-12-01','value']*=5
# manually add outlier on the date of '1959-12-01'
air_passengers_outlier_df.loc[air_passengers_outlier_df.time == '1959-12-01', 'value']*=4


# visualize the raw data
air_passengers_outlier_df.plot(x='time', y='value', figsize=(15,8))
plt.show()

from kats.detectors.outlier import OutlierDetector

# transform the outlier data into `TimeSeriesData` Object
air_passengers_outlier_ts = TimeSeriesData(air_passengers_outlier_df)
ts_outlierDetection = OutlierDetector(air_passengers_outlier_ts, 'additive') # call OutlierDetector
ts_outlierDetection.detector() # apply OutlierDetector
# look at the outliers that the algorithm found
ts_outlierDetection.outliers[0]

  • Без интерполяции: точки данных с выбросами будут заменены значениями NaN.
  • С интерполяцией: точки данных с выбросами будут заменены значениями линейной интерполяции.
air_passengers_ts_outliers_removed = ts_outlierDetection.remover(interpolate = False) # No interpolation
air_passengers_ts_outliers_interpolated = ts_outlierDetection.remover(interpolate = True) # With interpolation

fig, ax = plt.subplots(figsize=(20,8), nrows=1, ncols=2)
air_passengers_ts_outliers_removed.to_dataframe().plot(x = 'time',y = 'y_0', ax= ax[0])
ax[0].set_title("Outliers Removed : No interpolation")
air_passengers_ts_outliers_interpolated.to_dataframe().plot(x = 'time',y = 'y_0', ax= ax[1])
ax[1].set_title("Outliers Removed : With interpolation")
plt.show()

Извлечение признаков

Мы увидим, как использовать TsFeatures для получения функций для набора данных air_passenger.

# Initiate feature extraction class
from kats.tsfeatures.tsfeatures import TsFeatures
tsFeatures = TsFeatures()
features_air_passengers = TsFeatures().transform(air_passengers_ts)

# features_air_passengers
features_air_passengers

Модель пророка

# import the param and model classes for Prophet model
from kats.models.prophet import ProphetModel, ProphetParams
# create a model param instance
params = ProphetParams(seasonality_mode='multiplicative') # additive mode gives worse results
# create a prophet model instance
m = ProphetModel(air_passengers_ts, params)
# fit model simply by calling m.fit()
m.fit()
# make prediction for next 30 month
fcst = m.predict(steps=30, freq="MS")

# visualize the results with uncertainty intervals
m.plot()

— — —

Почему эксперт по анализу временных рядов взял на работу свою кошку?

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

🙂🙂🙂