离群点是在一组数据中,显著不同于其他数据的数据。大部分的数据挖掘方法都将离群点视为噪声或异常丢弃,然而,有一些应用场景天然适合离群点检测,如:欺诈、疾病、网络攻击、局部离群点分析(在局部属于离群点,但是全局来看是正常的)等等。比如,在下图中,大部分的数据粗略地服从高斯分布,在区域 R 内的两个点显著不同为离群点。

离群点和噪声的区别:
离群点检测的重点:
离群点是如何产生的:可以演变为新颖性监测,比如在社交网站是识别新的主题、趋势。
离群点检测的挑战:
温度为28度,是离群点吗?
28 度是否为离群点要看时间地点。判定离群点的依赖分为情景属性(时间、地点)和行为属性(温度、湿度、气压)。情景离群点是局部离群点的推广监督方法:比如分类:
数据:标记正常和非正常样本,缺点是容易导致样本不均衡,可以对离群样本进行过抽样(复制)
无监督:
数据:没有标记。
假定正常对象在某种程度是聚类的。中心思想:1:找出簇,2:不属于任何簇的点为离群点。
半监督方法:只有少量正常和离群点对象被标记,大部分数据无标记。
使用统计模型(eg:高斯分布)
对于一组数据集中的每个对象以及一个给定的高斯分布,计算拟合高斯分布的概率密度 f(x)。如果 f(x)太低,则证明该数据对象不太可能由该高斯模型产生,因此为离群点。
基于近邻性:
一个对象与最近邻的近邻性,显著低于其他的对象与他们的最近邻的近邻性。比如第一个图里面 R 区域的两个点,假设选择 3 近邻,每个点除了自己圈圈里面的近邻以外,其他的两个最近邻的距离,都要显著地高于其他点与他们最近邻的距离。这样的点就是离群点。
缺点:高度依赖距离的度量方法。另外,如果离群点相互之间靠的近,很难检测集体离群点。
基于聚类的方法:
基于这样的假设:正常数据都属于大而密的簇,离群点属于小或稀疏的簇,或者不属于任何簇。缺点:开销太大。
思想:学习一个拟合给定的生成模型,用模型去预测,将低概率预测的样本作为离群点。包括参数方法和非参数方法。
当数据服从正态分布:在该原则下,异常值如超过 3 倍标准差,那么可以将其视为异常值。正负 3的概率是 99.7%,那么距离平均值 3之外的值出现的概率为 P(|x-u| > 3) <= 0.003,属于极个别的小概率事件。
数据服不服从正态分布:可以用远离平均值的多少倍标准差来描述。下图中红色箭头所指就是异常值。

例子:

箱型图检测方法:利用箱型图中的四分位距(IQR)对异常值进行检测,也叫 Tukey‘s test。箱型图的定义:四分位距(IQR)就是上四分位与下四分位的差值。具体可参考数据的概括性度量。通过 IQR 的 1.5 倍为标准,规定:超过上四分位+1.5 倍 IQR 距离,或者下四分位-1.5 倍 IQR 距离的点为异常值。如果 max 和 min 值在 Q1-1.5IQR、Q3+1.5IQR 范围之内,则更新 max 和 min 的值。

散点图是一种观察离群点的方法,比较直观但是不能量化。

,其中,\bar{x}为总体均值,为样本标准差。
对于正态分布,z 值在[-3,3]内已经覆盖了大概 99%的数据,所以在该范围之外的数据可被认为是离群点。
通过假设检验的方法进行一元离群点检测:
定义原假设 H0 为:数据集中没有离群点
则备择假设 H1 为:数据集中有离群点
其中, 为样本均值和 为标准差。上式定义为双侧检验,Grubbs 检验还可用于单侧检验。检测最小值是否是离群点,需计算:
其中,是最小值,检测最大值是否是离群点,需计算:
其中,是最大值
置信度:
根据置信度,计算 tv 值:
双侧检验阈值:
如果统计值 G 落在拒绝域内(阈值的两侧),则拒绝原假设,接受备择假设。
其中,N 为数据的数量。对于单侧检测,用代替.
其中,S 是协方差矩阵。马氏距离的结果是一元变量,可以使用检验一元离群点的方法进行检验。如果是离群点,说明 x 是离群点。
关于马氏距离的详细内容,可参考距离的度量方法
其中是数据对象 O 在第 i 维度上的值。是所有对象在第 i 维上的均值,n 是维度。
如果一个数据对象的卡方值很大,则很有可能是离群点。(假定数据符合正态分布)
假定:数据是由混合参数分布产生的。
例如下图中,有两个大的簇 C1 和 C2,假如我们在这里假设,用一个正态分布不能产生这两组数据。因此,均值会落在两个簇之间,会导致位于均值附近的数据不会被判定为离群点。

为了解决这个问题,假设这些数据由两组正态分布和组成。对于数据集中任意的一个样本 x,x 被这两个分布产生的概率为
其中,f_1(x)是分布 1 的概率密度函数,f_2(x)同理。
根据 EM 算法,求解参数:均值和标准差,


如果数据落在直方图中的一个箱内,则认为是正常数据,否则是离群点。

更复杂地,使用直方图给对象赋一个离群点得分。比如用箱容积的倒数。比如购买 7500 美元,离群点得分 wei 为ParseError: KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: \frac{1}{2%},购买 385 美元的离群点得分为ParseError: KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: \frac{1}{60%}。
缺点:直方图的箱尺寸,如果过小,会导致很多正常对象落入空或稀疏箱,被误识别为离群点。如果箱尺寸太大,离群点很可能被分入箱中。
通过核密度函数估计近似数据集的概率密度函数,如果 f(x)太大,则对象可能是正常对象,否则可能是离群点。
关于核密度估计,可参考核密度估计
###基于距离的离群点
对于一个待分析的数据集 D,用户指定阈值 r定义对象的合理邻域。对每个对象 x,考察和 r 近邻中的对象个数。如果数据集 D 中大多数对象都远离对象 o,则 o 被视为离群点。
公式:
其中,
伪代码:

CELL 方法:将数据划分到格子中,然后根据距离计算,算法如下:

C 是一个存储了一组数据的格子,内含有 a 个数据,上图中,标记为 1 的为 1 层单元,含有 b1 个数据,标记为 2 的为 2 层单元,含有 b2 个数据。
一层单元:C 中的任意一个数据 x,和 1 层单元中的任意一个数据 y,距离
二层单元:C 中的任意一个数据 x,和 2 层单元中的任意一个数据 y,距离
按距离判断离群点算法:
聚类方法判定离群点,大体分三种:
按距离:按点与质心距离、点与质心相对距离(每个样本点到质心比样本点平均向量或中位数向量到质心)、百分比(距离的前多少个)
按簇,不是簇里的为离群点
按大小簇,小簇为离群点
基于密度的离群点检测方法的关键步骤在于给每个数据点都分配一个离散度,其主要思想是:针对给定的数据集,对其中的任意一个数据点,如果在其局部邻域内的点都很密集,那么认为此数据点为正常数据点,而离群点则是距离正常数据点最近邻的点都比较远的数据点。通常有阈值进行界定距离的远近。在基于密度的离群点检测方法中,最具有代表性的方法是局部离群因子检测方法 (Local Outlier Factor, LOF)。
在 LOF 方法中,通过给每个数据点都分配一个依赖于邻域密度的离群因子 LOF,进而判断该数据点是否为离群点。若 LOF 1, 则该数据点为离群点;若 LOF 接近于 1,则该数据点为正常数据点。
根据局部异常因子的定义,如果数据点 p 的 LOF 得分在 1 附近,表明数据点 p 的局部密度跟它的邻居们差不多;如果数据点 p 的 LOF 得分小于 1,表明数据点 p 处在一个相对密集的区域,不像是一个异常点;如果数据点 p 的 LOF 得分远大于 1,表明数据点 p 跟其他点比较疏远,很有可能是一个异常点。
了解了 LOF 的定义,整个算法也就显而易见了:
对于每个数据点,计算它与其它所有点的距离,并按从近到远排序;
对于每个数据点,找到它的 k-nearest-neighbor,计算 LOF 得分。
算法应用
LOF 算法中关于局部可达密度的定义其实暗含了一个假设,即:不存在大于等于 k 个重复的点。当重复点存在的时候,重复点的平均可达距离为零,局部可达密度就变为无穷大,会给计算带来一些麻烦。在实际应用时,为了避免这样的情况出现,可以把 k-distance 改为 k-distinct-distance,不考虑重复的情况。或者,还可以考虑给可达距离都加一个很小的值,避免可达距离等于零。
LOF 算法需要计算数据点两两之间的距离,造成整个算法时间复杂度为 。为了提高算法效率,后续有算法尝试改进。FastLOF (Goldstein,2012)先将整个数据随机的分成多个子集,然后在每个子集里计算 LOF 值。对于那些 LOF 异常得分小于等于 1 的,从数据集里剔除,剩下的在下一轮寻找更合适的 nearest-neighbor,并更新 LOF 值。这种先将数据粗略分成多个部分,然后根据局部计算结果将数据过滤来减少计算量的想法,并不罕见。比如,为了改进 K-means 的计算效率, Canopy Clustering 算法也采用过比较相似的做法。
线性回归。因为用到了最小二乘法
检测离群点以后需要对其进行处理。处理方法大致分为以下几种:
数据挖掘概念和技术(以及英文版)
M. M. Breunig, H. P. Kriegel, R. T. Ng, J. Sander. LOF: Identifying Density-based Local Outliers. SIGMOD, 2000.
M. Goldstein. FastLOF: An Expectation-Maximization based Local Outlier detection algorithm. ICPR, 2012
https://en.wikipedia.org/wiki/Outlier wikipedia
https://en.wikipedia.org/wiki/Chauvenet's_criterion
https://en.wikipedia.org/wiki/Grubbs's_test_for_outliers Grubbs's test for outliers
https://en.wikipedia.org/wiki/Peirce's_criterion
https://en.wikipedia.org/wiki/ASTM
https://en.wikipedia.org/wiki/Dixon's_Q_test
https://en.wikipedia.org/wiki/Mahalanobis_distance
https://en.wikipedia.org/wiki/Leverage_(statistics)
https://en.wikipedia.org/wiki/Anomaly_detection
https://www.cnblogs.com/bigcome/p/9999932.html
https://en.wikipedia.org/wiki/Grubbs's_test_for_outliers
https://zhuanlan.zhihu.com/p/37753692
https://zhuanlan.zhihu.com/p/28178476
https://blog.csdn.net/wangyibo0201/article/details/51705966
https://blog.csdn.net/jyxmust/article/details/80659324
https://blog.csdn.net/xzfreewind/article/details/77014587
https://juejin.im/post/5b6a44f55188251aa8294b8c 【Python 数据分析基础】: 异常值检测和处理
http://www.shujuren.org/article/993.html 异常检测多种方法