DONUT-异常检测算法忽略了滑动窗口之间的关系?

数据挖掘 时间序列 聚类 数据 异常检测 数据科学模型
2022-03-07 00:30:51

我正在尝试理解这篇论文:https ://netman.aiops.org/wp-content/uploads/2018/05/PID5338621.pdf关于用于大规模异常检测的 KPI 的稳健和快速聚类。

聚类是使用 ROCKA 算法完成的。

脚步:

1.) 对原始KPI数据进行预处理,去除幅度差异,标准化数据。

2.) 在基线提取步骤中,我们减少噪声,去除极值(可能是异常值),并提取 KPI 的底层形状(称为基线)。这是通过应用带有小滑动窗口的移动平均线来完成的。

3.) 然后在采样 KPI 的基线上进行聚类,对相移和噪声具有鲁棒性。

4.) 最后,我们计算每个集群的质心,然后通过它们与这些质心的距离分配未标记的 KPI。

我了解 ROCKA 机制。

现在,我正在尝试了解应用于“异常检测”的 DONUT 算法。

它的工作原理是:

DONUT 在 KPI 上应用滑动窗口以获得短系列 x 并尝试识别 x 遵循的正常模式。然后通过重建的正常模式和 x 之间的差异来计算指标,以显示异常的严重程度。在实践中,应该为每个 KPI 选择一个阈值。指标值大于阈值的数据点被视为异常。

现在我的问题是:

看起来 DONUT 对与时间信息相关的异常情况不够健壮。这意味着它适用于一组滑动窗口,它忽略了窗口之间的关系。所以窗口在这里成为一个非常关键的参数。所以它可能会产生高误报。我在这里理解错了吗?

请帮助并让我了解 DONUT 将如何捕捉滑动窗口之间的关系。

1个回答

代码在github上可用,滑动窗口实际上没有重叠。以下代码来自文件donut/utils.py,方法 minibatch_slices_iterator

start = 0
stop1 = (length // batch_size) * batch_size
while start < stop1:
    yield slice(start, start + batch_size, 1)
    start += batch_size

正如你所说,我没有更深入地检查,但也许窗户不相关。