异常值检测方法
——沂水寒城
探测异常值
首先来说说什么叫异常值。
定义:由于系统误差,人为误差或者固有数据的变异使得他们与总体的行为特征,结构或相关性等不一样,这部分数据称为异常值。
再来说说异常值检测的作用。
应用:异常值检测在数据挖掘中有着重要的意义,比如如果异常值是由于数据本身的变异造成的,那么对他们进行分析,就可以发现隐藏的更深层次的,潜在的,有价值的信息。例如发现金融和保险的欺诈行为,黑客入侵行为,还有就是追寻极低或者极高消费人群的消费行为,然后做出相对应的产品。
那我们如何把异常值检查出来呢?
异常值检测的方法:
3.1 统计学方法对异常值的检测
(1)3σ探测方法
3σ探测方法的思想其实就是来源于切比雪夫不等式。
对于任意ε>0,有:
当时,如果总体为一般总体的时候,统计数据与平均值的离散程度可以由其标准差反映,因此有:。
一般所有数据中,至少有3/4(或75%)的数据位于平均数2个标准差范围内。
所有数据中,至少有8/9(或88.9%)的数据位于平均数3个标准差范围内。
所有数据中,至少有24/25(或96%)的数据位于平均数5个标准差范围内。
所以如果我们一般是把超过三个离散值的数据称之为异常值。这个方法在实际应用中很方便的使用,但是他只有在单个属性的情况下才适用。
(2)散点图
其实就是画图。把所有点都画出来。自然异常点就出来了。形如这样:
(3)四分位数展布法
首先,我们介绍什么叫四分位数。如下图所示:
把数据按照从小到大排序,其中25%为上四分位用FL表示,75%处为下四分位用FU表示
上面的参数1.5不是绝对的,而是根据经验,但是效果很好哦。我们把异常值定义为小于上截断点,或者大于下截断点的数据称为异常值。
优点:与方差和极差相比,更加不如意受极端值的影响,且处理大规模数据效果很好。
缺点:小规模处理略显粗糙。而且只适合单个属相的检测。
(4)基于分布的异常值检测
本方法是根据统计模型或者数据分布。然后根绝这些模型对样本集中的每个点进行不一致检验的方法。
不一致检验:零假设和备选假设。表示我的数据分布或者概率模型满足H1,但是如果我这个值接受另外的数据模型或者概率分布H2。那么我们就认为这个数据点与总体分布不符合,是一个异常值。
下面介绍几种方法:
1:Grubbs检验
步骤一:先把数据按照从小到大的顺序排列x1,x2…xn。
步骤二:假设我们认为xi为异常点。计算平均值。
步骤三:计算算数平均值和标准差的估计量s。
步骤五:将gi与查Grubbs检验法的临界值表所得的g(a,n)进行比较。如果gi< g(a,n),那么则认为不存在异常值,如果大于,就认为这个点是异常值。
这样异常值被选出来后,重复以上步骤,直到没有异常值为止。
2:Dixon检测方法
步骤一:先把数据按照从小到大的顺序排列x1,x2…xn
步骤三:将r大,r小分别与Dixon检验法的临界值表得到的临界值r(a,n)进行比较、如果r大(r小)>r(a,n),可以认为最大(最小)的值为异常值,否则就不是异常值。
3t分布检验方法
3.2 基于距离的异常值检测
基于距离的定义:在样本集S中,O是一个异常值,仅当 S中有p部分的距离大于d。可以这样理解:
图中与五角星1距离超过d的有三个点。。。我们就可以说他是异常点,假如阀值是2,现在2五角星的距离超过d的只有五角星一个。所以五角星2不是异常点。当然这个距离的计算还是用到马氏距离。
优缺点:可以多维数据监测,无需估计样本的分布,但是受参数影响严重。
3.3 基于偏离的异常值检测
假设N的数据集,建立数据子集。求出子集间得相异度,然后确定异常值。
较为复杂,计算量大。不建议使用.
3.4 基于分类模型的异常值检测
根据已有的数据,然后建立模型,得到正常的模型的特征库,然后对新来的数据点进行判断。从而认定其是否与整体偏离,如果偏离,那么这个就是异常值。
建立贝叶斯模型
神经网络模型
分类模型
决策类分类
SVM的方法