Какво е 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 основни модела за прогнозиране:
- Линеен
- Квадратичен
- ARIMA
- САРИМА
- Холт-Уинтърс
- Пророк
- AR-Net
- LSTM
- Тета
- VAR
Извличане на функции с Kats
Kats предоставя модула TsFeatures за изчисляване на набор от значими характеристики за времева серия, включително:
- Характеристики на STL (сезонно и трендово разлагане с помощта на льос) -
- Сила на сезонността
- Силата на тенденцията
- шипове
- Линейност
- Степента на изместване на нивото
- Наличие на плоски сегменти
- 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 има перфектната прогноза за данни от времеви редове, и искаха да внесат котешка нотка в своя анализ на данни
🙂🙂🙂