Kats - Фреймворк для Анализ временных рядов
Цель Kats - предоставить универсальное решение для анализа временных рядов, от понимания ключевых статистических данных и обнаружения аномалий до прогнозирования тенденций, извлечения/встраивания признаков, многомерного анализа и т.д.
Анализ временных рядов - это фундаментальная область в науке о данных и машинном обучении, имеющая широкое применение в различных отраслях, таких как электронная коммерция, финансы, планирование мощностей, управление цепочками поставок, медицина, погода, энергетика, астрономия и многие другие.
Анализ временных рядов
Анализ временных рядов как статистическая техника используется для изучения и моделирования данных, зависящих от времени. Некоторые общие особенности инструментов анализа временных рядов включают:
- Разложение временного ряда: возможность разложить временной ряд на его составные части, такие как тренд, сезонность и остатки.
- Прогнозирование: возможность предсказать будущие значения временного ряда на основе прошлых данных
- Определение аномалий: способность идентифицировать необычное или неожиданное поведение временного ряда
- Многомерный анализ: способность анализировать несколько временных рядов одновременно, принимая во внимание взаимосвязи между ними
- Извлечение/вставка признаков: способность извлекать значимые признаки из данных временного ряда или представлять данные временного ряда в более низкоразмерном пространстве для дальнейшего анализа.
Это лишь несколько примеров типов функциональности, которые могут быть включены в инструмент анализа временных рядов. Давайте посмотрим, что может предоставить нам Kats.
Kats - универсальный инструмент
Kats - это легкая, простая в использовании и обобщаемая структура для общего анализа временных рядов, включая прогнозирование, обнаружение аномалий, многомерный анализ и извлечение/встраивание признаков.
Kats - это первая комплексная библиотека Python для общего анализа временных рядов, которая предоставляет как классические, так и продвинутые методы моделирования данных временных рядов.
Kats связывает различные области анализа временных рядов, где пользователи могут изучать основные характеристики данных временных рядов, прогнозировать будущие значения, отслеживать аномалии и включать их в свои модели и конвейеры ML.
Что он делает
Kats предоставляет набор алгоритмов и моделей для четырех областей анализа временных рядов: прогнозирование, обнаружение, извлечение и встраивание признаков и многомерный анализ.
Прогнозирование: Kats предоставляет полный набор инструментов для прогнозирования, который включает 10+ индивидуальных моделей прогнозирования, ансамблирование, модель самообучения (мета-обучения), бэктестинг, настройку гиперпараметров и эмпирические интервалы прогнозирования.
Обнаружение: Kats поддерживает функциональные возможности для обнаружения различных закономерностей в данных временных рядов, включая сезонность, выбросы, точки изменения и медленные изменения тренда.
Извлечение и встраивание признаков: Модуль извлечения признаков временных рядов (TSFeature) в Kats может создавать 65 признаков с четкими статистическими определениями, которые могут быть включены в большинство моделей машинного обучения (ML), таких как классификация и регрессия.
Полезные утилиты: Kats также предоставляет набор полезных утилит, таких как симуляторы временных рядов.
Установка на Python
Kats находится на PyPI, поэтому Вы можете использовать pip для его установки.
pip install --upgrade pip
pip install kats
Пример прогнозирования
Использование модели Prophet для прогнозирования набора данных air_passengers.
from kats.consts import TimeSeriesData
from kats.models.prophet import ProphetModel, ProphetParams
# в качестве примера возьмем данные `air_passengers`.
air_passengers_df = pd.read_csv("../kats/data/air_passengers.csv")
# преобразовать в объект TimeSeriesData
air_passengers_ts = TimeSeriesData(air_passengers_df)
# создать экземпляр параметра модели
# note that additive mode gives worse results
params = ProphetParams(seasonality_mode='multiplicative')
# создать экземпляр модели предсказателя
m = ProphetModel(air_passengers_ts, params)
# используем модель, просто вызывая m.fit().
m.fit()
# прогноз на следующие 30 месяцев
fcst = m.predict(steps=30, freq="MS")
Примеры умозаключений
С помощью Kats можно получить следующие выводы:
- Обнаружение аномалий: Обнаруживает аномальное увеличение или уменьшение во временном ряду.
- Определение точки изменения: Обнаруживает внезапные изменения во временном ряду. Для этого процесса в Kats существует 3 различных алгоритма:
- Обнаружение CUSUM
- Байесовское онлайн обнаружение точек изменения (BOCPD)
- Обнаружение Stat Sig
- Определение изменений тренда: Он обнаруживает изменения тренда временного ряда, используя алгоритм обнаружения Манна-Кендалла.
Обнаружение выбросов
Для обнаружения выбросов требуется минимум 24 строки данных.
from kats.detectors.outlier import OutlierDetector
fake_df = df[df["Product"] == "Product E"].drop(["VisitsCount", "Product"], axis=1)
fake_df = fake_df.append(pd.DataFrame({"time":["2021-12-31"], "SalesCount":[round(fake_df["SalesCount"][-3:].mean())]})).reset_index(drop=True)
fake_df["time"] = pd.to_datetime(fake_df["time"])
outlier_ts = TimeSeriesData(fake_df)
ts_outlierDetection = OutlierDetector(outlier_ts, 'multiplicative')
ts_outlierDetection.detector()
ts_outlierDetection.outliers[0]
Выбросы, обнаруженные с помощью Kats, также могут быть очищены с помощью Kats. Для этого Kats предлагает 2 метода:
- Нет интерполяции: Заполняет промахи значением NaN без применения операции интерполяции.
- С интерполяцией: Заполняет пропуски, применяя линейную интерполяцию.
Обнаружение точек изменения
С помощью Kats можно обнаружить точки изменения во временном ряду. В Kats есть 3 различных алгоритма для этого процесса:
- CUSUMDetector
- BOCPDetector
- RobustStatDetector
Использование алгоритма обнаружения CUSUM на смоделированном наборе данных.
from kats.consts import TimeSeriesData
from kats.detectors.cusum_detection import CUSUMDetector
# simulate time series with increase
np.random.seed(10)
df_increase = pd.DataFrame(
{
'time': pd.date_range('2019-01-01', '2019-03-01'),
'increase':np.concatenate([np.random.normal(1,0.2,30), np.random.normal(2,0.2,30)]),
}
)
# convert to TimeSeriesData object
timeseries = TimeSeriesData(df_increase)
# run detector and find change points
change_points = CUSUMDetector(timeseries).detector()
Обнаружение изменения тренда
С помощью Kats также можно определить направление тренда серии. Для этого Kats использует алгоритм MKDetector. В основе этого алгоритма лежит тест Манна-Кендалла, который является непараметрическим тестом.
from kats.detectors.trend_mk import MKDetector
detector = MKDetector(data=cpd_ts, threshold=.8)
detected_time_points = detector.detector(direction='up', window_size=10)
detector.plot(detected_time_points)
Полезные ссылки
- Homepage: https://facebookresearch.github.io/Kats/
- Kats Python package: https://pypi.org/project/kats/0.1.0/
- Facebook Engineering: https://engineering.fb.com/2021/06/21/open-source/kats/
- Source code repository: https://github.com/facebookresearch/kats
- Contributing: https://github.com/facebookresearch/Kats/blob/main/CONTRIBUTING.md
- Tutorials: https://github.com/facebookresearch/Kats/tree/master/tutorials
Заключение
Kats - это инструмент для анализа временных рядов, который использует метод “metalearning” для определения наиболее подходящей модели и соответствующих параметров для данного временного ряда. Он делает это, используя метаданные, полученные с помощью TSFeatures, и применяя алгоритм Random Forest для определения наилучшей модели на основе этих метаданных. Эта функция Kats позволяет пользователям создать свой собственный инструмент автоматического машинного обучения (autoML).
Один емейл, когда выйдет новый пост.



