Какво е Kats? Как да използвате Kats за анализиране на времеви серии. Примери за функции на Kats.

Kats е пакет на Python, разработен от екипа на Facebook Core Data Science. Това означава „Kats: Комплект за анализиране на времеви серии“. Kats предоставя различни инструменти и алгоритми за анализ на времеви редове и прогнозиране. Той е проектиран да бъде удобен за потребителя и ефективен, което улеснява работата на анализаторите и специалистите по данни с данни от времеви серии.

История

Първоначално издание: Пакетът Kats първоначално беше пуснат от Facebook през март 2020 г. Той беше въведен като инструмент с отворен код, специално предназначен за анализ на времеви редове и прогнозиране.

От пускането си на пазара пакетът Kats претърпя значително развитие и разширение. Екипът на Facebook непрекъснато добавя нови функции, алгоритми и функционалности, за да подобри своите възможности за анализ на времеви серии.

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

Пакетът Kats се поддържа активно, с редовни актуализации и подобрения. Екипът на Facebook разгледа проблемите, включи отзивите на потребителите и въведе нови функции, за да направи пакета по-стабилен и удобен за потребителя.

С течение на времето Kats придоби популярност сред учените по данни и анализаторите, работещи с данни от времеви серии. Неговата лекота на използване, всеобхватна функционалност и интеграция с други библиотеки на Python допринесоха за приемането му в общността на науката за данни.

Характеристика

Прогнозиране на времеви редове: Kats предоставя различни модели за прогнозиране като ARIMA, Prophet и различни модели на пространството на състоянието. Тези модели позволяват на потребителите да правят прогнози и да оценяват несигурността за бъдещи времеви стъпки.

Откриване на аномалии: Kats включва алгоритми за откриване на аномалии в данни от времеви серии. Той предоставя техники като стабилни статистически мерки и смесени модели на Гаус за идентифициране на необичайни модели или отклонения.

Откриване на точка на промяна: Тази функция помага да се идентифицират значителни промени или промени в данните от времеви серии. Kats предлага алгоритми като Bayesian Change Point Detection и CUSUM (Cumulative Sum) за откриване на тези точки.

Анализ на тенденциите: Kats предоставя инструменти за анализиране на тенденциите в данните от времеви редове. Потребителите могат да извършват декомпозиция на тенденции, включително извличане на сезонни и дългосрочни тенденции.

Диагностика на модела: Пакетът включва помощни програми за оценка на ефективността на модели на времеви серии. Потребителите могат да оценят точността на модела, да визуализират остатъците и да изпълняват други диагностични задачи.

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

Kats поддържат следните 10 основни модела за прогнозиране:

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

Извличане на функции с Kats

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

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

Инсталирайте Kats

За да инсталирате пакета 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()

— — —

Защо експертът по анализ на времеви редове доведе котката им на работа?

Тъй като чуха, че Kats има перфектната прогноза за данни от времеви редове, и искаха да внесат котешка нотка в своя анализ на данни

🙂🙂🙂