异常检测算法分类总结(含常用开源数据集)

作者:云智慧算法工程师 Chris Hu

异常检测是识别与正常数据不同的数据,与预期行为差异大的数据。本文详细介绍了异常检测的应用领域以及总结梳理了异常检测的算法模型分类。文章最后更是介绍了常用的异常算法数据集。

异常的概念与类型

目前异常检测主要是基于Hawkins对异常的定义:(Hawkins defines an outlier as an observation that deviates so significantly from other observations as to arouse suspicion that it was generated by a different mechanism.)。异常(anomaly/outlier)指的是远离其他观测数据而疑为不同机制产生的观测数据。根据概率理论对异常的形式化定义如下:

异常检测算法分类总结(含常用开源数据集)

异常主要分为以下三种类型:

在实际的运维场景中,以上三种异常都会出现,比如资源使用率突然上升造成Point Anomalies,又如CPU使用过程中的突然卡顿形成Contextual anomaly,再如某指标使用率连续一段时间处于“满格”状态而呈现出Collective or group anomalies。后两者异常通常需要和业务紧密结合,单纯从数据本身出发具有一定的辨识难度,再加上运维领域中大比例情况下出现的是Point Anomalies,客户多关注于此,因而通常情况下我们更关注Point Anomalies。

异常检测的应用领域

异常检测思路与方法总结

现如今,异常检测主要面临以下困难与挑战:

基于标签的异常检测算法分类

有监督异常检测算法是指在训练集中的正常实例和异常实例都有标签,训练二类或多类分类器。有监督异常检测方法主要面临两个问题,一方面是在训练数据中,相对于正常时间序列来讲,异常的数据量太小,会对检测效果产生影响;另一方面是在实际操作中很难精确地标注数据是正常或异常,而且异常的情况也难以全部覆盖。基于以上原因,在实际异常检测中,有监督异常检测算法在实际应用中较少。

半监督异常检测算法是指在训练集中只有单一类别(正常实例)的实例,没有异常实例参与训练。半监督异常检测技术的一种典型方法是基于训练数据集为正常时间序列数据建立模型,然后利用该模型识别待检测数据中的异常。半监督异常检测学习正常数据的判别边界,不属于正常类的数据被判断为异常。由于训练中不需标注异常序列,因此半监督式异常检测方法的应用相对更加广泛。

无监督异常检测算法在训练集中既有正常实例也可能存在异常实例,但假设数据的比例是正常实例远大于异常实例,模型训练过程中没有标签进行校正。此类技术的核心思想在于异常的情况相对于正常的情况而言是很少的,且其与正常情况存在较大的差异,这种差异可以体现在数据之间的距离远近、分布密度、偏离程度等方面。无监督异常检测算法仅根据数据的内在属性(如距离、密度等)检测数据的异常值,自编码器是所有无监督深度异常检测模型的核心。

基于模型的异常检测算法分类

基于模型的异常算法分类基于传统方法的异常检测模型和基于深度学习的异常检测模型两大类。

异常检测算法分类总结(含常用开源数据集)

基于传统方法的异常检测模型

使用这类方法基于的基本假设是正常的数据是遵循特定分布形式的,并且占了很大比例,而异常点的位置和正常点相比存在比较大的偏移。比如高斯分布,在平均值加减3倍标准差以外的部分仅占了0.2%左右的比例,一般我们把这部分数据就标记为异常数据。

基于统计的异常检测一般需要充分的数据基础和相应的先验知识,此时检测效果可能是非常有效的。然而,此类检测方法一般是针对单个属性或低维数据的,而对于高纬度的时间序列数据就难以估计其真实的分布。

异常检测算法分类总结(含常用开源数据集)

假设异常点是不可被压缩的或不能从低维映射空间有效地被重构的。常见的方法有PCA、Robust PCA、random projection等降维方法。 PCA提取了数据的主要特征,如果一个数据样本不容易被重构出来,表示这个数据样本的特征跟整体数据样本的特征不一致,那么它显然就是一个异常的样本。

对于数据样本X_i, 假设其基于 k 维特征向量重构的样本为X_ik^’ , 则该数据样本的异常得分可以用如下的公式计算:

异常检测算法分类总结(含常用开源数据集)

此类方法利用聚类算法(如K-means、_x0008_DBSCAN等)对待检测数据进行聚类,通过聚类的结果来分辨正常与异常的数据,是一种典型的非监督式异常检测技术。通常来讲,基于聚类的异常检测可基于三种假设来分辨异常数据:

  1. 不属于任何簇(Cluster)的数据即为异常;

  2. 距离簇中心很远的数据即为异常;

  3. 归属于数据点少或稀疏簇的数据即为异常。

使用聚类算法进行异常检测,可利用大量已有的聚类研究成果。但是,聚类与异常检测还是有较大差异的,异常检测的目标在于寻找不正常的数据,而聚类的目的在于确定数据归属的类别。而且,很多聚类算法并未针对时间序列数据做优化,算法执行效率往往不高。

对正常数据建立区分性边界,异常点被划分到边界外。常见的方法有OC-SVM、SVDD等。

异常检测算法分类总结(含常用开源数据集)

基于深度学习的异常检测模型

该类的典型方法为:Deep SVDD [11] 、OC-NN [20]。

异常检测算法分类总结(含常用开源数据集)

异常检测算法分类总结(含常用开源数据集)

采用深度学习的聚类方法一般是用神经网络对输入数据进行编码,然后认为最后的编码序列可以代表神经网络的很多特征,然后我们对编码序列进行聚类就可以达成聚类的目的。该类方法被用于异常检测的包括:CAE-l2 cluster 、DAE-DBC。

CAE-l2 cluster:在autoencoder中间加入了L2标准化以及k-means。

异常检测算法分类总结(含常用开源数据集)

DAE-DBC:先利用autoencoder降维,然后通过聚类方法判别异常值。

异常检测算法分类总结(含常用开源数据集)

一个通用的自动编码器由编码器和解码器组成,编码器将原始数据映射到低维特征空间,而解码器试图从投影的低维空间恢复数据。这两种网络的参数通过重构损失函数来学习。为了使整体重构误差最小化,保留的信息必须尽可能与输入实例(如正常实例)相关。

典型案例有稀疏自动编码器(sparse AE)、去噪自动编码器(denoising AE)、收缩自动编码器(contractive AE)、鲁邦自动编码器(Robust Deep AE)等,基本原理都较为简单。

该类方法的优点是能够通过非线性方法捕捉复杂特征,试图找到正常实例的一种通用模式,缺点是如何选择正确的压缩程度,以及如何解决“过拟合”的问题(网络拟合的太好以至于异常实例也“潜伏”在低维特征空间中)。为了解决这个缺点,有研究者使用正则化或者记忆矩阵等等方法。
异常检测算法分类总结(含常用开源数据集)
异常检测算法分类总结(含常用开源数据集)

这种方法通常旨在学习生成网络G的潜在特征空间,使潜在空间能够很好地捕捉到给定数据背后的常态。将生成模型用于异常检测是基于在生成网络的潜在特征空间中正常实例比异常实例能够更准确地被产生这一假设。 实际实例和生成实例之间的残差被定义为异常分数。

典型案例有AnoGAN、GANomaly、Wasserstein GAN、 Cycle GAN、VAE等。该类方法的关键问题是如何设计合适的生成器和目标函数。

异常检测数据集

异常检测数据类型

用于异常检测的数据通常可分为两类:

序列数据:如voice, text, music, time series, protein sequences;

非序列数据:如images, other data。

异常检测算法分类总结(含常用开源数据集)

异常检测开源数据集

下方链接为常用的异常检测数据集,该git仓库中维护了多种通用的异常检测数据集。

https://github.com/GuansongPang/ADRepository-Anomaly-detection-datasets

异常检测算法分类总结(含常用开源数据集)

下方链接为时间序列异常检测数据集,该git仓库中维护了时间序列异常检测算法相关的软件、包、数据集等。

https://github.com/rob-med/awesome-TS-anomaly-detection

异常检测算法分类总结(含常用开源数据集)

开源项目推荐

云智慧已开源数据可视化编排平台 FlyFish 。通过配置数据模型为用户提供上百种可视化图形组件,零编码即可实现符合自己业务需求的炫酷可视化大屏。 同时,飞鱼也提供了灵活的拓展能力,支持组件开发、自定义函数与全局事件等配置, 面向复杂需求场景能够保证高效开发与交付。

如果喜欢我们的项目,请不要忘记点击下方代码仓库地址,在 GitHub / Gitee 仓库上点个 Star,我们需要您的鼓励与支持。此外,即刻参与 FlyFish 项目贡献成为 FlyFish Contributor 的同时更有万元现金等你来拿。

GitHub 地址: https://github.com/CloudWise-OpenSource/FlyFish

Gitee 地址: https://gitee.com/CloudWise/fly-fish

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年3月28日
下一篇 2023年3月28日

相关推荐