《异常检测——从经典算法到深度学习》24 用于单变量时间序列异常检测的端到端基准套件

news/2024/7/17 2:58:34

《异常检测——从经典算法到深度学习》

  • 0 概论
  • 1 基于隔离森林的异常检测算法
  • 2 基于LOF的异常检测算法
  • 3 基于One-Class SVM的异常检测算法
  • 4 基于高斯概率密度异常检测算法
  • 5 Opprentice——异常检测经典算法最终篇
  • 6 基于重构概率的 VAE 异常检测
  • 7 基于条件VAE异常检测
  • 8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测
  • 9 异常检测资料汇总(持续更新&抛砖引玉)
  • 10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测
  • 11 ADS: 针对大量出现的KPI流快速部署异常检测模型
  • 12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测
  • 13 MAD: 基于GANs的时间序列数据多元异常检测
  • 14 对于流数据基于 RRCF 的异常检测
  • 15 通过无监督和主动学习进行实用的白盒异常检测
  • 16 基于VAE和LOF的无监督KPI异常检测算法
  • 17 基于 VAE-LSTM 混合模型的时间异常检测
  • 18 USAD:多元时间序列的无监督异常检测
  • 19 OmniAnomaly:基于随机循环网络的多元时间序列鲁棒异常检测
  • 20 HotSpot:多维特征 Additive KPI 的异常定位
  • 21 Anomaly Transformer: 基于关联差异的时间序列异常检测
  • 22 Kontrast: 通过自监督对比学习识别软件变更中的错误
  • 23 TimesNet: 用于常规时间序列分析的时间二维变化模型
  • 24 TSB-UAD:用于单变量时间序列异常检测的端到端基准套件

相关:

  • VAE 模型基本原理简单介绍
  • GAN 数学原理简单介绍以及代码实践
  • 单指标时间序列异常检测——基于重构概率的变分自编码(VAE)代码实现(详细解释)

24. TSB-UAD:一个用于单变量时间序列异常检测的端到端基准套件

论文名称:TSB-UAD: an end-to-end benchmark suite for univariate time-series anomaly detection
论文发表:Proceedings of the VLDB Endowment 2022
论文下载:https://www.paparrizos.org/papers/PaparrizosVLDB22a.pdf
源码下载:https://github.com/TheDatumOrg/TSB-UAD
数据集下载:Public: https://www.thedatum.org/datasets/TSB-UAD-Public.zip
Synthetic: https://www.thedatum.org/datasets/TSB-UAD-Synthetic.zip
Artificial: https://www.thedatum.org/datasets/TSB-UAD-Artificial.zip

24.1 论文概述

本篇论文概述了TSB-UAD,这是一个用于评估时间序列异常检测方法的全面基准套件,并分析影响这些方法性能的因素。论文介绍了时间序列异常检测的重要性,回顾了影响方法性能的因素,并提出了评估数据集难度的度量标准。此外,论文还对最近代表性方法在 TSB-UAD 上的初步实验评估进行了介绍,并总结了研究工作的意义。

与本系列提到的其他算法不同,本篇论文并没有提出一种核心算法,而是提出了一个全面的基准套件TSB-UAD,用于评估时间序列异常检测方法。论文还介绍了最近代表性方法在TSB-UAD上的初步实验评估,但并没有强调某种算法是核心算法。

回顾 2018 年举办的 “The 1st match for AIOps” 比赛 —— 一个典型的单指标时间序列异常检测比赛,比赛的中对不同算法的评估方法是计算带有 “报警延迟” 的方法,可以理解为 “准许的报警延迟时间”。从运维人员的角度来看,当故障发生后,7 个采样间隔时间内提示告警是允许的,超过 7 个采样间隔时间内的告警认为是无效的。

这个比赛中用到的评估方法是由赛事举办方制定的,应该也是根据运维人员的实际需求制定的,无可厚非。但实际上这种评估方法仅仅在部分领域(智能运维)有效。

本篇论文提出一种新的评估策略,具体内容不妨往后继续观看。谢谢各位的支持 ~

24.2 相关技术

这一部分介绍论文的第 3 个模块,也就是 BIASES IN TIME-SERIES AD EVALUATIONS。可以理解为相关背景、问题概述,作者在这里先抛出问题,下一个章节再介绍自己如何解决这些问题。换而言之,通过了解这几个关键问题,就知道作者这篇论文到底想解决哪些问题。

原论文中的 “RELETED WORK” 介绍的异常检测本系列博客介绍了很多次,而 基准 直接参考后面内容即可。

24.2.1 时间序列异常类型

公共类别包含18个先前提出的1980年时间序列的数据集。图1 展示了数据集样本的典型示例及其明显的异常。可以看出来这些数据中的异常的特征大体上是不同的。数据集下载地址前面已经给出,感兴趣的小伙伴们可以前去下载。如果下载不了或者网速太慢请在下方留言邮箱,私发应该比网盘更快。
在这里插入图片描述
接着论文将这些异常进行了分类:point, contextual, and collective anomalies,即 点异常、上下文异常、以及集体异常。可以结合论文中的图2进行理解。

比如下图的 a 部分,即单个点的异常,两个例子分别表示时间序列中的值异常以及频率中,不符合分布模式的异常。

下图中的 b 部分,即 上下文异常,两个例子中 b.1 相对于历史而言明显有个突降点,而 b.2 出现 “消失的尖峰” 现象,属于上下文异常。

图中的 c 部分,即集合异常,或者理解为时间片段异常,异常持续一段时间等。
在这里插入图片描述

24.2.2 数据集选择

数据集的选择依据即前面提到的异常类别。现在需要考虑的是这样选择数据集可能遇到的问题。将数据集排除在评估之外,会对之前定义的三种异常类型的不同算法进行一致的分析造成很大的障碍。例如,基于点的预测方法,通过比较预测与实际数据来检测异常,可能在Yahoo(有点异常)中表现良好,而在NAB(有集体异常)中表现较差。因此,只关注包含300多个时间序列的雅虎,可能看起来是一个广泛的评估,然而,由于基准的不完全性,该方法的评估是倾斜的。迫切需要评估自己提出的模型的新研究者和实践者(以及评估科学工作的评审者),可能会忽略这一问题,并接受结果(例如,在300个时间序列中超越方法是重要的,即使一行代码的基线可以获得与复杂方法相当的结果)。重要的是,根据特定的应用程序或异常类别来证明数据集的选择是不现实的。例如,ECG数据可能主要包含集体异常(而不是单个点)。然而,并不能保证在现实环境中,用户故障或测量系统的不完善不能产生其他异常类型。

24.2.3 模型参数选择

本节内容抛出的问题是:为了尽可能合理地评估模型的效果,应当选择一组或多组合适的参数。那么如何选择模型的参数便成了一个非常关键的问题。

除了选择数据集来覆盖不同的异常类型外,同样重要的是数据集的内在特征,这影响了评估过程中模型参数的选择。在标准数据集中,一些数据集包含许多持续时间不同的异常和高异常污染 (如NASASMAP),而另一些数据集 (如NAB) 则将异常限制在几个特定的持续时间内。其他数据集(例如,KDD21)将每个数据集的异常限制为一个,并使用单个索引而不是整个异常长度来评估模型。

异常格式的这种差异和数据集的特征使得调整必要的模型参数具有挑战性。作为例子,论文考虑现有方法报告异常的各种方法。具体来说,有些方法会返回每个点的原始异常分数,这要求操作者手动建立一个阈值来提取异常。其他方法通过调整阈值来简化这个过程。类似地,一些方法返回固定长度的异常,而另一些方法返回可变长度的异常。因此,仅调优与异常评分相关的参数就变得很麻烦。对于具有许多附加参数的方法(如深度学习方法),参数选择过程变得混乱。通过分析几十篇论文及其代码库,可以明显地发现,在某些情况下,参数的调优不足或过拟合的情况。需要跨数据集进行评估的开放基准可以消除上述问题。

然而,参数的选择也可能为特定的方法提供不均衡的好处。例如,KDD21数据集可能包含多个异常,但它们的地面真实数据集中在大多数 “prominent” 异常。因此,设计提取单个异常的方法在这种环境下可能表现良好,但在异常污染严重的环境中,其性能可能会下降。类似地,提取所有异常但没有对其进行适当排序的方法可能会受到惩罚。为了评估方法的有效性和效率,特征的高度可变性是可取的。

24.2.4 评估指标选择

评估算法模型的好坏,当然也需要一个统一的量化标准。这个与语文作文、艺术创作不同。对算法的评估工作需要一个更加直观的、可量化的评估方法。

量化方法质量的测量方法的选择也可能对实验结果产生显著的偏差。各种各样的方法被用来评价异常检测方法。简单地说,传统的测量方法,如Precision, Recall和F-score,通过假设每个时间序列点可以标记为异常或不标记为异常(例如,通过一个异常分数的阈值)来评估方法。这些措施的缺点(即难以评估集体异常)促使了基于范围的变体的产生。因此,在使用传统度量方法时,选择具有集体异常的数据集可能会产生误导的结果。有趣的是,前面提到的度量方法需要设置一个阈值,以将点标记为异常或非异常。另一方面,AUC度量消除了这种需求,因为它的值独立于阈值。回到上面的kdd21例子,该例子包含多个异常,但ground truth中只有前1个出现,AUC的选择可以避免部分偏差,因为它避免了为提取单个异常而对异常分数设置阈值。

24.2.5 有限的可用数据集存在的缺陷

众所周知,带标签的数据是非常昂贵的,也正是这个原因,可用的数据是相当有限的。因此基于有限的数据对算法模型进行评估很容易存在偏差。这节描述的就是这个问题。

除了在选择数据集、参数和评估方法时产生的偏差,当前数据集的缺陷也可能导致误导性的结果。特别是,某些可用的时间序列异常检测数据集存在一些缺陷,导致人们批评的工作只关注它们的评价。

总而言之,对于一些数据集,一个简单的解决方案,简单地定义为一行代码 “baseline”,使用标准函数(例如,mean, std等)和一些调优的参数,可以实现最先进的性能。在其他情况下,数据集包含高密度的异常,可以对问题进行更多的分类。对于大多数异常出现在最后的数据集,它们可能提供了使预测偏向最后一点的机会。最后,错误的标记问题,即只有一些异常被标记出来,可能会导致假阳性和假阴性。

值得注意的是,一些数据集缺陷是有问题的,这主要是由于选择参数或评估措施方面的差异,如前所述。例如,一个简单的方法在所有这些 “trivial” 数据集上表现良好(不需要蛮力参数搜索)仍然是有价值的。换句话说,如果一种技术在一些更具挑战性的数据集上表现良好,那么在这样的 “trivial” 数据集上表现不好就令人担忧了。此外,如果评估的重点是大量的数据集(例如,预测最后一点异常的方法将不再适用于所有数据集),那么高的异常密度或最后出现的异常将变得不那么重要。

然而,算法评估需要就准确(即没有错误标签)、多样化(即来自不同领域、具有不同的数据特征,包括不同类型的异常)以及适当测试相关算法的所有不同方面的基准达成一致。

24.3 核心方法

此模块关于原论文的第4部分进行介绍,即 TSB-UAD: BENCHMARK DETAILS 部分。此部分介绍 TSB-UAD 的具体内容,即前面提出的问题的解决方案。

这一部分原论文对收集到的数据集进行考察,做基本的分析;然后将时间序列分类数据集转换为带标注的异常检测数据集;接着对数据集进行划分,难度递增的合成数据集生成的数据转换;异常检测算法的评估方法与测试;以及最后评估异常检测数据集的难度。

24.3.1 数据集和基准测试套件

Datasets and Benchmarking Suite

TSB-UAD包括三个数据集类别,即公共数据集、人工数据集和合成数据集。公共数据集包含以前提出的出现在不同社区的文献中的数据集。人工数据集主要包括以前用于时间序列分类的真实数据集(超过90%),并转换成带有标记异常的异常检测数据集。合成数据集是公共数据集的扩充版本,其中各种数据转换注入新的异常或增加其复杂性。

公共数据集:TSB-UAD包括三个数据集类别,即公共数据集、人工数据集和合成数据集。公共数据集包含以前提出的出现在不同社区的文献中的数据集。人工数据集主要包括以前用于时间序列分类的真实数据集(超过90%),并转换成带有标记异常的异常检测数据集。合成数据集是公共数据集的扩充版本,其中各种数据转换注入新的异常或增加其复杂性。公共数据集:论文收集了过去几十年文献中提出的包含1980年标记异常的时间序列的18个数据集。具体来说,每个时间序列中的每个点都被标记为正常或异常。表1总结了数据集的相关特征,包括它们的大小和长度,以及关于异常的统计数据。前8个数据集最初包含单变量时间序列,而剩下的10个数据集最初包含多变量时间序列,论文将其转换为单变量时间序列。具体来说,分别在每个维度上运行论文中提到的异常检测方法,并且保留那些至少有一个方法实现 AUC > 0.8 \text{AUC} > 0.8 AUC>0.8 的维度。
在这里插入图片描述
人工数据集:为了利用现有的用于替代时间序列任务的真实数据集,参照现有的工作,从通用分类数据集系统地构建异常检测数据集。论文提出了一个适用于时间序列的版本,它将类标签分为正常和异常。这个过程生成了958个时间序列,属于126个数据集,对应于UCR Archive的数据集。尽管这是人工生成的过程,但这些时间序列主要对应于真实世界的数据集和应用程序(超过90%)。

合成数据集:考虑到开发异常合成时间序列的大量工作,论文研究并提出了一组全局、局部和子数据转换,目的是注入新的异常或增加识别现有异常的复杂性(见第4.3节)。本论文将这些转换应用于公共数据集,生成了92个增强数据集,其中包含10828个时间序列。重要的是,本论文提供了相应的脚本来帮助创建具有不同难度的指数级大型数据集,以评估时间序列异常检测方法。

TSB-UAD基准测试套件:请参考论文提供的源码,通过处理预处理和后处理步骤来隐藏基准测试异常检测方法的所有复杂性,例如数据加载、处理、生成和转换、模型评估和严格的统计分析。研究人员和实践者应该把注意力主要放在实现探测器上,即提取异常的方法。在论文的存储库中,提供了12个用于评估的监督和非监督检测器的示例。论文还跨所有类别发布所有数据集,以实现重现性目的,并在附带库之外使用。本部分内容我会在后面的实验中介绍。

24.3.2 将时间序列分类数据集转换为标注异常检测数据集

Transforming Time-Series Classification Datasets into Labeled AD Datasets

前面提到有限的可用数据数据集问题,需要一种有原则的方法来利用现有的时间序列分类数据集,将分配给每个时间序列的类标签转换为正常和异常。考虑到创建此类分类数据集背后几十年的努力,这是非常重要的。如果能够区分正常类和异常类,可以通过对正常类的时间序列进行采样(并串联),同时控制异常类的采样时间序列注入时的异常密度来生成时间序列异常检测数据集。

一个关键的挑战是避免创建一个微不足道或不可能检测到异常的时间序列。为了实现目标,分为两个步骤: (1) 识别由 oracle 分类器给出的具有高度混淆的类对; (2) 对于选定的类对,生成时间序列,但只保留至少有一个检测器可以识别异常的情况。通过使用不同的阈值来评估检测精度,生成不同难度的数据集。对于TSB-UAD,利用SBD距离构造时间序列的不相似矩阵。SBD是一种快速、准确、无参数的距离测量方法,已经达到了最先进的性能。然后应用一个 1-NN (Nearest Neighbor) 分类器,使用预先计算的距离矩阵,并预测每个序列的标签。尽管存在更精确的分类器,但倾向于确定性和无参数的分类器,以确保结果的可重现性。

序列 x x x 的标签 y = j y=j y=j 被预测为 y ^ = k \hat{y}=k y^=k 的概率,记作 P ( y ^ = k ∣ x ) P(\hat{y}=k|x) P(y^=kx) 定义为从标签 j j j 到标签 k k k 的混淆因子。标签 j j j k k k 的标准相似度为 ( c j k + c k j ) / 2 (c_{jk} + c_{kj}) / 2 (cjk+ckj)/2。论文构造所有 m m m 标签之间的亲和矩阵,并根据这个矩阵计算最大生成树(MST)。或者,有人可能会考虑从最混乱的单个类中选择正常类和异常类。不幸的是,这将导致非常难以区分的情况。相反,MST步骤有助于构造具有最大总体亲和力的集。最后,将MST中相邻的节点用两种颜色表示,并指定一种颜色为正常颜色,另一种颜色为异常颜色。生成数据需要两个参数:异常段数 K K K 和异常子序列比 r r r。正常段数为 N = K / r − K N=K/r - K N=K/rK 。假设异常集包含 m m m 标签和 n n n 数据。选择 K K K 数据,而不是 n n n 数据。如果 n < K n<K n<K,则取所有 n n n 数据。计算最频繁的异常标签的频率 f a f_a fa ,然后每个正常标签的频率 f n = 20 f a f_n= 20 f_a fn=20fa 。选中的普通标签个数为 L = N / f n L=N / f_n L=N/fn。选取 L L L 个法线标签,每个法线标签被选取 f n f_n fn 次并进行替换。最后,将 K K K 个异常段和 N N N 个正常段进行打乱和拼接,形成一个合成时间序列。

论文在UCR归档中的所有128个数据集上使用这个过程(在修复了不同长度和缺失值的问题之后),每个数据集生成一个或多个时间序列。只保留在公共数据集中表现良好的五种无监督方法中至少有一种达到AUC高于0.65的时间序列。该过程完全排除了两个数据集和每个数据集生成的几个时间序列,得到126个数据集,958个时间序列。图3 显示了符号数据集的MST和相应的时间序列,以及注入的异常(红色部分)。表2 总结了TSB-UAD人工分类中10个代表性数据集的相关特征。

在这里插入图片描述
在这里插入图片描述

24.3.3 难度递增的合成数据集生成的数据转换

Data Transformations for Synthetic Dataset Generation of Increasing Difficulty

为了模拟额外的异常或增加异常检测的复杂性,论文研究了一组全局、局部和子序列转换。全局变换改变整个时间序列的特征,而局部和子序列变换改变时间序列的连续部分,将原始时间序列表示为 X = ( x 0 , x 1 , … , x n ) X=(x_0,x_1,…,x_n) X=(x0,x1,,xn),其标