异常检测二:基于统计学的方法


本文为学习笔记~

概述

统计学⽅法对数据的正常性做出假定。**它们假定正常的数据对象由⼀个统计模型产⽣,而不遵守该模型 的数据是异常点。**统计学⽅法的有效性⾼度依赖于对给定数据所做的统计模型假定是否成⽴。
异常检测的统计学⽅法的⼀般思想是:学习⼀个拟合给定数据集的⽣成模型,然后识别该模型低概率区域中的对象,把它们作为异常点。
即利⽤统计学⽅法建⽴⼀个模型,然后考虑对象有多⼤可能符合该模型。
根据如何指定和学习模型,异常检测的统计学⽅法可以划分为两个主要类型:参数⽅法和⾮参数⽅法。
参数⽅法假定正常的数据对象被⼀个以 θ \theta θ 为参数的参数分布产⽣。该参数分布的概率密度函数 f ( x , θ ) f(x, \theta) f(x,θ)给出对象 x x x被该分布产⽣的概率。该值越小, 越可能是异常点。
⾮参数⽅法并不假定先验统计模型,而是试图从输⼊数据确定模型。⾮参数⽅法通常假定参数的个数和性质都是灵活的,不预先确定(所以⾮参数⽅法并不是说模型是完全⽆参的,完全⽆参的情况下从数据 学习模型是不可能的)。

参数方法

基于正态分布的一元异常点检测

仅涉及⼀个属性或变量的数据称为⼀元数据。我们假定数据由正态分布产⽣,然后可以由输⼊数据学习 正态分布的参数,并把低概率的点识别为异常点。
假定输⼊数据集为 { x ( 1 ) , x ( 2 ) , … , x ( m ) } \{x^{(1)}, x^{(2)},\ldots, x^{(m)}\} {x(1),x(2),,x(m)},数据集中的样本服从正态分布,即 x ( i ) ∽ N ( μ , σ 2 ) x^{(i)} \backsim N(\mu,\sigma^2) x(i)N(μ,σ2),我们可以根据样本求出参数 μ \mu μ σ \sigma σ

求出参数之后,我们就可以根据概率密度函数计算数据点服从该分布的概率。正态分布的概率密度函数为

如果计算出来的概率低于阈值,就可以认为该数据点为异常点。 阈值是个经验值,可以选择在验证集上使得评估指标值最⼤(也就是效果最好)的阈值取值作为最终阈值。
例如常⽤的3sigma原则中,如果数据点超过范围 ( μ − 3 σ , μ + 3 σ ) (\mu-3\sigma, \mu+3\sigma) (μ3σ,μ+3σ),那么这些点很有可能是异常点。 这个⽅法还可以⽤于可视化。箱线图对数据分布做了⼀个简单的统计可视化,利⽤数据集的上下四分位 数(Q1和Q3)、中点等形成。异常点常被定义为小于Q1-1.5IQR或⼤于Q3+1.5IQR的那些数据。
⽤Python画⼀个简单的箱线图:

import numpy as np
import seaborn as sns 
import matplotlib.pyplot as plt 
data = np.random.randn(50000) * 20 + 20 sns.boxplot(data=data)

多元异常点检测

涉及两个或多个属性或变量的数据称为多元数据。许多⼀元异常点检测⽅法都可以扩充,⽤来处理多元 数据。其核⼼思想是把多元异常点检测任务转换成⼀元异常点检测问题。例如基于正态分布的⼀元异常 点检测扩充到多元情形时,可以求出每⼀维度的均值和标准差。对于第j维:

计算概率时的概率密度函数为:

这是在各个维度的特征之间相互独⽴的情况下。如果特征之间有相关性,就要⽤到多元⾼斯分布了。

多个特征相关,且符合多元高斯分布

使用混合参数分布

在许多情况下假定数据是由正态分布产⽣的。当实际数据很复杂时,这种假定过于简单,可以假定数据 是被混合参数分布产⽣的。

非参数方法

在异常检测的⾮参数⽅法中,“正常数据”的模型从输⼊数据学习,而不是假定⼀个先验。通常,⾮参数 ⽅法对数据做较少假定,因而在更多情况下都可以使⽤。
例⼦:使⽤直⽅图检测异常点。
直⽅图是⼀种频繁使⽤的⾮参数统计模型,可以⽤来检测异常点。该过程包括如下两步:
步骤1:构造直⽅图。使⽤输⼊数据(训练数据)构造⼀个直⽅图。该直⽅图可以是⼀元的,或者多元的 (如果输⼊数据是多维的)。
尽管⾮参数⽅法并不假定任何先验统计模型,但是通常确实要求⽤⼾提供参数,以便由数据学习。例 如,⽤⼾必须指定直⽅图的类型(等宽的或等深的)和其他参数(直⽅图中的箱数或每个箱的⼤小 等)。与参数⽅法不同,这些参数并不指定数据分布的类型。
步骤2:检测异常点。为了确定⼀个对象是否是异常点,可以对照直⽅图检查它。在最简单的⽅法中,如 果该对象落⼊直⽅图的⼀个箱中,则该对象被看作正常的,否则被认为是异常点。
对于更复杂的⽅法,可以使⽤直⽅图赋予每个对象⼀个异常点得分。例如令对象的异常点得分为该对象 落⼊的箱的容积的倒数。
使⽤直⽅图作为异常点检测的⾮参数模型的⼀个缺点是,很难选择⼀个合适的箱尺⼨。⼀⽅⾯,如果箱 尺⼨太小,则许多正常对象都会落⼊空的或稀疏的箱中,因而被误识别为异常点。另⼀⽅⾯,如果箱尺 ⼨太⼤,则异常点对象可能渗⼊某些频繁的箱中,因而“假扮”成正常的。

HBOS

HBOS全名为:Histogram-based Outlier Score。它是⼀种单变量⽅法的组合,不能对特征之间的依赖 关系进⾏建模,但是计算速度较快,对⼤数据集友好。其基本假设是数据集的每个维度相互独⽴。然后 对每个维度进⾏区间(bin)划分,区间的密度越⾼,异常评分越低。
HBOS算法流程:
1.为每个数据维度做出数据直⽅图。对分类数据统计每个值的频数并计算相对频率。对数值数据根据分 布的不同采⽤以下两种⽅法:

  • 静态宽度直⽅图:标准的直⽅图构建⽅法,在值范围内使⽤k个等宽箱。样本落⼊每个桶的频率 (相对数量)作为密度(箱⼦⾼度)的估计。
    时间复杂度: O ( n ) O(n) O(n)
  • 动态宽度直⽅图:⾸先对所有值进⾏排序,然后固定数量的N/K个连续值装进⼀个箱⾥,其 中N是总实例数,k是箱个数;直⽅图中的箱⾯积表⽰实例数。因为箱的宽度是由箱中第⼀个值和最后 ⼀个值决定的,所有箱的⾯积都⼀样,因此每⼀个箱的⾼度都是可计算的。这意味着跨度⼤的箱的 ⾼度低,即密度小,只有⼀种情况例外,超过k个数相等,此时允许在同⼀个箱⾥超过N/K值。
    时间复杂度: O ( n × l o g ( n ) ) O(n \times log(n)) O(n×log(n))
    2.对每个维度都计算了⼀个独⽴的直⽅图,其中每个箱⼦的⾼度表⽰密度的估计。然后为了使得最⼤⾼ 度为1(确保了每个特征与异常值得分的权重相等),对直⽅图进⾏归⼀化处理。最后,每⼀个实例的
    HBOS值由以下公式计算:

总结

1.异常检测的统计学⽅法由数据学习模型,以区别正常的数据对象和异常点。使⽤统计学⽅法的⼀个优 点是,异常检测可以是统计上⽆可⾮议的。当然,仅当对数据所做的统计假定满⾜实际约束时才为真。
2.HBOS在全局异常检测问题上表现良好,但不能检测局部异常值。但是HBOS⽐标准算法快得多,尤其 是在⼤数据集上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值