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