异常检测统计学方法

大纲

1. 概述
2. 参数方法

3. 非参数方法
4. HBOS
5. 总结

<span id="1"></span>

1. 概述

统计学方法对数据的正常性做出假定。它们假定正常的数据对象由一个统计模型产生,而不遵守该模型的数据是异常点。 统计学方法的有效性高度依赖于对给定数据所做的统计模型假定是否成立。

具体方法:先基于统计学方法确定一个概率分布模型,然后判断各个离散点有多大概率符合该模型。

难点在于如何得到概率分布模型。首先是识别数据集的具体分布:数据的真实分布是否是现在手里的数据集完全体现的。尽管许多类型的数据都可以用常见的分布(高斯分布、泊松分布或者二项式分布)来描述,但是具有非标准分布的数据集非常常见。如果选择了错误的模型,则对象可能会被错误地识别为异常点。其次,如何确定使用属性的个数,基于统计学的方法,数据的属性一般具有一个或多个,那么在建立概率分布模型的过程中究竟是用一个属性还是多个属性需要分析和尝试。最后,当使用数据属性很多时,模型比较复杂并且难以理解,会涉及到EM算法。

异常检测的统计学方法,有两种具体的方法:参数方法和非参数方法。

<span id="2"></span>

2. 参数方法

假定正常的数据对象被一个以\Theta为参数的参数分布产生。该参数分布的概率密度函数f(x,\Theta)给出对象x被该分布产生的概率。该值越小,x越可能是异常点。

<span id="2.1"></span>

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

仅涉及一个属性或变量的数据称为一元数据。我们假定数据分布符合正态分布,然后通过现有的数据得到正态分布的关键参数,把低概率的点识别为异常点。

假定输入的数据集为{x^{(1)}, x^{(2)}, x^{(3)}, ..., x^{(m)}},数据集中的样本服从正态分布,即存在一个\mu\sigma,使得{x^{(i)} \sim N(\mu, \sigma^2)}。这里的\mu\sigma可以通过计算求得。

计算公式如下:

\mu=\frac 1m\sum_{i=1}^m x^{(i)}

\sigma^2=\frac 1m\sum_{i=1}^m (x^{(i)}-\mu)^2

求出上述的参数后,我们就可以根据概率密度函数计算每个数据点服从正态分布的概率,或者说离散数据点的概率。

概率计算公式为:

p(x)=\frac 1{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu)^2}{2\sigma^2})

需要确定一个阈值,这个阈值一般是经验值,可以选择在验证集上使得评估指标值最大的阈值取值作为最终阈值。如果计算出来的概率低于阈值,就可以认为该数据点为异常点。

例如常用的3sigma原则,如果数据点超过范围{\mu-3\sigma, \mu+3\sigma},那么这些点可能是异常点。

这个方法还可以用于可视化。参考箱型图,以数据集的上下四分位数(Q1和Q3)、中点等参数,异常点常被定义为小于{Q1-1.5IQR}{Q3+1.5IQR}。其中,{IQR = Q3-Q1}

利用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)

<span id="2.2"></span>

2.2 多元异常点检测

涉及两个或多个属性或变量的数据称为多元数据。分为两种情况,一种是特征相互独立,一种是特征间不相互独立。

<span id="2.2"></span>

2.2.1 特征相互独立

当数据是多元数据的时候,核心思想是把多元异常点检测任务转换为一元异常点检测问题。例如基于正态分布的一元异常点检测扩充到多元情形时,可以求出每一维度的均值和标准差。对于第j维:

\mu_j=\frac 1m\sum_{i=1}^m x_j^{(i)}

\sigma_j^2=\frac 1m\sum_{i=1}^m (x_j^{(i)}-\mu_j)^2

计算概率密度函数:

p(x)=\prod_{j=1}^n p(x_j;\mu_j,\sigma_j^2)=\prod_{j=1}^n\frac 1{\sqrt{2\pi}\sigma_j}exp(-\frac{(x_j-\mu_j)^2}{2\sigma_j^2})

<span id="2.2.2"></span>

2.2.2 特征之间存在相关性

\mu=\frac{1}{m}\sum^m_{i=1}x^{(i)}

\sum=\frac{1}{m}\sum^m_{i=1}(x^{(i)}-\mu)(x^{(i)}-\mu)^T

p(x)=\frac{1}{(2 \pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right)

<span id="2.3"></span>

2.3 混合模型方法

当实际数据很复杂时,可以考虑建立混合参数模型,假定数据集D包含来自两个概率分布:M是大多数(正常)对象的分布,而A是异常对象的分布。数据的总概率分布可以记作D(X)=(1-\lambda)M(x) + \lambda A(x)

其中,x是一个数据对象;\lambda是0和1之间的数,给出离群点的期望比例。

<span id="3"></span>

3. 非参数方法

相比参数方法,非参数方法对数据做较少的假定,不做先验概率分布,因而在更多情况下被使用。

比如:使用直方图检测异常点

直方图是一种频繁使用的非参数统计模型,可以用来检测异常点。该过程包括如下两步:

步骤1:构造直方图。使用输入数据(训练数据)构造一个直方图。该直方图可以是一元的,或者多元的(如果输入数据是多维的)。

尽管非参数方法并不假定任何先验统计模型,但是通常确实要求用户提供参数,以便由数据学习。例如,用户必须指定直方图的类型(等宽的或等深的)和其他参数(直方图中的箱数或每个箱的大小等)。与参数方法不同,这些参数并不指定数据分布的类型。

步骤2:检测异常点。为了确定一个对象是否是异常点,可以对照直方图检查它。在最简单的方法中,如果该对象落入直方图的一个箱中,则该对象被看作正常的,否则被认为是异常点。

对于更复杂的方法,可以使用直方图赋予每个对象一个异常点得分。例如令对象的异常点得分为该对象落入的箱的容积的倒数。

使用直方图作为异常点检测的非参数模型的一个缺点是,很难选择一个合适的箱尺寸。一方面,如果箱尺寸太小,则许多正常对象都会落入空的或稀疏的箱中,因而被误识别为异常点。另一方面,如果箱尺寸太大,则异常点对象可能渗入某些频繁的箱中,因而“假扮”成正常的。

<span id="4"></span>

4. HBOS

HBOS全名为:Histogram-based Outlier Score。它是一种单变量方法的组合,不能对特征之间的依赖关系进行建模,但是计算速度较快,对大数据集友好。其基本假设是数据集的每个维度相互独立。然后对每个维度进行区间(bin)划分,区间的密度越高,异常评分越低。

HBOS算法流程:

  • 为每个数据维度做出数据直方图。对分类数据统计每个值的频数并计算相对频率。对数值数据根据分布的不同采用以下两种方法:

    • 静态宽度直方图:标准的直方图构建方法,在值范围内使用k个等宽箱。样本落入每个桶的频率(相对数量)作为密度的估计。时间复杂度O(n)
    • 动态宽度直方图:对所有值排序,然后以\frac{N}{k}为固定数量,将\frac{N}{k}个连续值装进一个箱子,这里N是总实例数,k是箱的个数,直方图的箱面积表示实例数。箱的宽度是箱的第一个值和最后一个值决定的,所有箱的面积一样,因此每个箱子的高度是可以计算的。这意味着跨度大的箱子的高度低,即密度小。时间复杂度:O(n\times log(n))
  • 对每个维度都计算了一个独立的直方图,其中每个箱子的高度表示密度的估计。然后为了使得最大高度为1(确保了每个特征与异常值得分的权重相等),对直方图进行归一化处理。最后,每一个实例的HBOS值由以下公式计算:

HBOS(p)=\sum_{i=0}^{d} \log \left(\frac{1}{\text {hist}_{i}(p)}\right)

推导过程如下:

  • 假设样本pi个特征的概率密度为P_i {(p)},则样本的概率密度为P(p) = P_1(p) \cdot P_2(p) \cdot ... \cdot P_d(p)
  • 对两边取对数:\log(P(p)) = \log(P_1(p) \cdot P_2(p) \cdot ... \cdot P_d(p)) = \sum_{i=1}^d \log(P_i(p))
  • 上述公式求得的概率越大,证明数据越不异常,我们需要找异常数据,因此取反,两边都乘以"-1"。得到:-\log(P(p)) = -\sum_{i=1}^d \log(P_i(p)) = \sum_{i=1}^d \log(\frac {1}{P_i(p)})
  • 即:HBOS(p) = -\log(P(p)) = \sum_{i=1}^d \log(\frac {1}{P_i(p)})

<span id="5"></span>

5. 总结

  • 异常检测的统计学方法由数据学习模型,以区别正常的数据对象和异常点。使用统计学方法的一个优点是,异常检测可以是统计上无可非议的。当然,仅当对数据所作的统计假定满足实际约束时才为真。

  • HBOS在全局异常检测问题上表现良好,但不能检测局部异常值。但是HBOS比标准算法快的多,尤其在大数据集上。

推荐阅读更多精彩内容