Содержание

Kats - Фреймворк для Анализ временных рядов

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

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

Анализ временных рядов

Анализ временных рядов как статистическая техника используется для изучения и моделирования данных, зависящих от времени. Некоторые общие особенности инструментов анализа временных рядов включают:

  • Разложение временного ряда: возможность разложить временной ряд на его составные части, такие как тренд, сезонность и остатки.
  • Прогнозирование: возможность предсказать будущие значения временного ряда на основе прошлых данных
  • Определение аномалий: способность идентифицировать необычное или неожиданное поведение временного ряда
  • Многомерный анализ: способность анализировать несколько временных рядов одновременно, принимая во внимание взаимосвязи между ними
  • Извлечение/вставка признаков: способность извлекать значимые признаки из данных временного ряда или представлять данные временного ряда в более низкоразмерном пространстве для дальнейшего анализа.

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

Kats - универсальный инструмент

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

Kats - это первая комплексная библиотека Python для общего анализа временных рядов, которая предоставляет как классические, так и продвинутые методы моделирования данных временных рядов.

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

Что он делает

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

  • Прогнозирование: Kats предоставляет полный набор инструментов для прогнозирования, который включает 10+ индивидуальных моделей прогнозирования, ансамблирование, модель самообучения (мета-обучения), бэктестинг, настройку гиперпараметров и эмпирические интервалы прогнозирования.

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

  • Извлечение и встраивание признаков: Модуль извлечения признаков временных рядов (TSFeature) в Kats может создавать 65 признаков с четкими статистическими определениями, которые могут быть включены в большинство моделей машинного обучения (ML), таких как классификация и регрессия.

  • Полезные утилиты: Kats также предоставляет набор полезных утилит, таких как симуляторы временных рядов.

Установка на Python

Kats находится на PyPI, поэтому Вы можете использовать pip для его установки.

1
2
pip install --upgrade pip
pip install kats

Пример прогнозирования

Использование модели Prophet для прогнозирования набора данных air_passengers.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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 строки данных.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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 на смоделированном наборе данных.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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. В основе этого алгоритма лежит тест Манна-Кендалла, который является непараметрическим тестом.

1
2
3
4
5
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)

Полезные ссылки

Заключение

Kats - это инструмент для анализа временных рядов, который использует метод “metalearning” для определения наиболее подходящей модели и соответствующих параметров для данного временного ряда. Он делает это, используя метаданные, полученные с помощью TSFeatures, и применяя алгоритм Random Forest для определения наилучшей модели на основе этих метаданных. Эта функция Kats позволяет пользователям создать свой собственный инструмент автоматического машинного обучения (autoML).