Форматировщик данных tDBN¶
Обзор¶
Для использования FastTimeSeriesDetector
может потребоваться искусственная предварительная обработка данных путем их нарезки на окна. Кратко этот процесс можно описать
с помощью этого рисунка:
Техника скользящего окна. Источник: статья
Note
Длина скользящего окна - это параметр window
, а stride
- это шаг скользящего окна.
Стратегии агрегации¶
После нарезки не совсем ясно, как агрегировать аномалии по субъектам. Реализована только стратегия "any", то есть аномальным считается субъект, у которого есть хотя бы 1 аномальный шаг внутри.
Использование¶
TemporalDBNTransformer
был разработан для выполнения такой операции:
import numpy as np
from applybn.anomaly_detection.dynamic_anomaly_detector.data_formatter import TemporalDBNTransformer
import pandas as pd
from tabulate import tabulate # не устанавливается по умолчанию
np.random.seed(51)
def print_df(df):
print(tabulate(df, tablefmt="github", headers="keys", showindex="always"))
df = pd.DataFrame(
{"col1": np.linspace(0, 5, 10),
"col2": np.linspace(5, 10, 10),
"anomaly": np.random.choice([0, 1], p = [0.7, 0.3], size=10),}
).astype(int)
print_df(df)
print("\n\n")
label = df.pop("anomaly")
transformer = TemporalDBNTransformer(window=5, stride=2, include_label=True)
print_df(transformer.transform(df, label))
Что превращает:
col1 | col2 | anomaly | |
---|---|---|---|
0 | 0 | 5 | 0 |
1 | 0 | 5 | 0 |
2 | 1 | 6 | 0 |
3 | 1 | 6 | 0 |
4 | 2 | 7 | 0 |
5 | 2 | 7 | 1 |
6 | 3 | 8 | 0 |
7 | 3 | 8 | 0 |
8 | 4 | 9 | 0 |
9 | 5 | 10 | 0 |
В:
subject_id | col1__0 | col2__0 | col1__1 | col2__1 | col1__2 | col2__2 | col1__3 | col2__3 | col1__4 | col2__4 | anomaly | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 5 | 0 | 5 | 1 | 6 | 1 | 6 | 2 | 7 | 0 |
1 | 1 | 1 | 6 | 1 | 6 | 2 | 7 | 2 | 7 | 3 | 8 | 1 |
2 | 2 | 2 | 7 | 2 | 7 | 3 | 8 | 3 | 8 | 4 | 9 | 1 |