异常检测基本概念与方法
1.比如基于模型方法的异常检测:异常检测是一种技术,一般首先建立一个数据模型,对于不能完美拟合或偏离模型非常远的数据很可能是异常的。
2.高斯分布特点:高斯分布是自然界最常见的分布形态,用它来做异常检测是非常合适的模型。枪打出头鸟,那些分布在两端的小概率事件,要么好的出奇(右边),要么差得离谱(左边)。
3.异常检测场景(补充):
. 在工业制造。比如某个制造飞机引擎的公司,从飞机引擎提取出一系列的特征值,并且训练出一个模型。当新制造出来的引擎符合这个模型时,就可认为是良品,如果偏离这个模型较远时,就可以认为可能有缺陷,需要进一步的检测。
. 从一台服务器上提取出一系列特征,如内存占用,CPU 使用率,网络吞吐量,磁盘访问频率等等。利用这些特征建立一个模型。当某个服务器偏离这个模型较远时,可能这台机器快要死机了,就可以进一步查看这台机器的情况以便做出相应的处理。
. 时间序列异常检测应用,同比,是指在相邻时段中的某一相同时间点进行比较。
环比,是指在同一时段中的相邻时间点进行比较。对于时间序列(是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列)来说,T
时刻的数值对于T−1
时刻有很强的依赖性。比如流量在8:00很多,在8:01时刻的概率是很大的,但是如果07:01时刻对于8:01时刻影响不是很大。
首先,我们可以使用最近时间窗口(T
)内的数据遵循某种趋势的现象来做文章。比如我们将T设置为7,则我们取检测值(nowvalue)和过去7个(记为i)点进行比较,如果大于阈值我们将count加1,如果count超过我们设置的countnum,则认为该点是异常点。
方法(概率、密度和聚类也是由空间中的数据点之间的距离所决定的)
1线性方法:
PCA在做特征值分解之后得到的特征向量反应了原始数据方差变化程度的不同方向,特征值为数据在对应方向上的方差大小。所以,最大特征值对应的特征向量为数据方差最大的方向,最小特征值对应的特征向量为数据方差最小的方向。原始数据在不同方向上的方差变化反应了其内在特点。如果单个数据样本跟整体数据样本表现出的特点不太一致,比如在某些方向上跟其它数据样本偏离较大,可能就表示该数据样本是一个异常点。 具体参考博客:https://blog.youkuaiyun.com/Jasminexjf/article/details/88527966
2距离邻近度方法:
通常可以在对象之间定义邻近性度量,并且许多异常检测方法都基于邻近度。
异常对象是那些远离大部分其他对象的对象。这一领域的许多方法都基于距离,称作基于距离的离群点检测方法。当数据能够以二维或三维散布图显示时,通过寻找与大部分其他点分离的点,可以从视觉上检测出基于距离的离群点。基于方差,近邻点越多,方差越小;近邻点越大,方差越大。
问题:计算复杂度过高,且分布不均匀的点,容易出错
3基于密度:
对象的密度估计可以相对直接地计算,特别是当对象之间存在邻近性度量时,低密度区域中的对象相对远离近邻,可能被看作异常。一种更复杂的方法考虑到数据集可能有不同密度区域这一事实,仅当一个点的局部密度显著地低于它的大部分近邻时才将其分类为离群点。
方法:
(1)给定半径的邻域内的数据对象数
(2)平均相对密度
(3)基于密度的异常
4孤立森林:
基于划分的思想,划分成树,深度越低,说明越容易被划分,即为离群点。
参考: https://www.jianshu.com/p/4d817084a69a
https://www.jianshu.com/p/5af3c66e0410
http://www.cnblogs.com/fengfenggirl/p/iForest.html
异常检测与监督学习区别:
异常检测算法里,我们有正常的数据,有异常的数据,为什么不直接用逻辑回归或神经网络算法来对一个新引擎进行直接预测呢?实际上异常检测和监督学习有其不同的适用范围。
如果满足下面三个条件中的任何一个,都需要考虑使用异常检测算法,而不是监督学习相关的算法。监督学习算法适用于有大量的正向样本,也有大量的负向样本,有足够的正向样本让算法来学习其特征,未来新出现的正向数据可能和训练样例里的某个正向样本类似。
正向样本 (y = 1) 非常少 (0 - 20),但负向样本 (y = 0) 很多
有太多的异常类型,算法很难从正常的数据样例里学习到异常的特征
未来新出来的异常数据和我们训练样例里现有的异常数据根本不一样,即没见过的异常样例