一、什么是异常检测
数据中的异常数据通常被认为是异常点、离群点或孤立点,这些数据的特征与大多数数据不一致,呈现出“异常”的特点,检测这些或这种类型的数据的方法称为异常检测(anomaly detection)、偏差检测(deviation detection)、例外挖掘(exception mining)。
异常值包括单变量异常值和多变量异常值,身高、体重或身高和体重;异常(值)产生的原因:
- 数据输入错误
人为错误(如数据收集,记录或输入过程中导致的错误)会导致数据中的异常值。 例如:客户的年收入是10万美元,但意外地,数据输入操作附加一个零。 现在的收入就是100万美元,是10倍。 显然,与其他人相比,这将是异常值。- 测量误差
这是异常值最常见的来源。 当使用的测量仪器出现故障时,会引起这种情况。 例如:有10台称重机。 其中9个是正确的,1个是错误的。 故障机器上的人员测量重量将高于或低于组内其余人员。 在故障机器上测量的重量可能导致异常值。- 实验误差
异常值的另一个原因是实验误差。 例如:在7名跑步者的100米冲刺中,有一名选手错过了跑的口令,让他开始延迟。 因此,这使得跑步者的跑步时间比其他跑步者要多, 总运行时间可能是一个异常值。- 故意异常值
通常在自我报告的措施中涉及敏感数据。 例如:通常青少年报告酒量,只有其中一小部分报告具有实际价值,这里的实际值可能看起来像异常值,因为其余的青少年正在假值。- 数据预处理或处理错误
无论何时执行数据挖掘,我们从多个来源提取数据。 某些操作或提取错误可能会导致数据集中的异常值。- 抽样错误
例如,衡量乒乓球运动员的身高,错误地在样品中包括几名NBA篮球运动员。 这种包含可能会导致数据集中的异常值。- 自然异常值
当异常值不是人为的(由于错误),它是一个自然的异常值。 例如:注意到其中一家著名的保险公司,前50名财务顾问的表现远远高于其他人。 令人惊讶的是,这不是由于任何错误。 因此,每当与顾问一起执行任何数据挖掘活动时,我们都会分别对待此细分。
(1)异常值检测作为一个独立的过程,识别异常的事件或对象:
例如异常订单识别、风险客户预警、黄牛识别、贷款风险识别、欺诈检测、技术入侵、客户异常识别(被盗号、外挂)、信用卡欺诈、药物变异识别、恶劣气象预测、网络入侵检测、流量作弊检测、次品检测(工业界)等。
——通过用户的点击某个页面的次数、登录频率、发帖次数、速度等等,通过其异常或奇怪的行为,检测其是否为异常用户(被盗号、外挂)。
(2)作为数据预处理过程的一部分:被看作噪音,识别后还需要进行后续处理,以更好地为后续数据建模过程做准备。处理方法一般有:
- 删除:如果确定是噪音数据,错误数据,可以直接删除。
- 不处理—选用不受影响的算法:如果不想删除(可能因为不知道是不是噪音数据—宁可放过不可错杀,或者是噪音数据但不想删除),可以使用一些对异常点不那么敏感的算法。
- 特征缩放(例如归一化、标准化):如果不想删除,算法又对异常值敏感,可以对其进行数据转换,比如标准化。但是要考虑特征缩放可能会破坏数据集的结构分布。
异常值检测的方法
0、数据预处理中常用的简单方法:Tukey's test方法
一个异常阶(outlier step)被定义成1.5倍的四分位距(interquartile range,IQR)。一个数据点如果某个特征包含在该特征的IQR之外的特征,那么该数据点被认定为异常点。
1、基于统计分布的方法
构建一个概率分布模型,并计算每个数据对象符合该模型的概率,把具有低概率的对象视为异常点。如果模型是簇的集合,则异常是不显著属于任何簇的对象;如果模型是回归时,异常是相对远离预测值的对象。
用户指定一个概率分布,例如常用正态分布,然后根据数据集计算分布的参数,得到概率密度函数,就可以估计每个对象在该分布下的概率。
——一元情况下的直观理解就是,计算每个数据对象距离均值点的距离,比如在标准正态分布下,超过4个标准差的值出现的可能性是万分之一。
方法评价:
当存在足够的数据和domain knowledge时,非常有效(因为概率分布的类型是人为判断指定的,如果指定了正态分布,而该数据集服从的实际是类似正态分布的其他分布,那么异常值检测可能出现问题)。
处理多元数据、高维数据的效果较差。
2、基于邻近度的方法
基本思路:在特征空间中,如果一个数据对象是异常的,那么它一定是远离大部分点的。而邻近度(距离)的度量,可以使用k最近邻距离。
离群因子:基于当前点到其k-最近邻邻域范围内的所有点的距离的平均值来定义。离群因子越大,越可能是离群点。
方法评价:
优点是易于理解,缺点一是大规模数据下,计算开销较大(需要O(m²)时间),二是不能处理不同区域具有不同密度的数据集,如图,异常值C可以识别,但异常值D不能识别。
3、基于密度的方法:LOF(Local Outlier Factor)
异常值定义为低密度区域的数据对象。
密度的衡量有绝对密度和相对密度之分,一般使用与数据对象的邻域相关的相对密度(局部相对密度)。
方法评价:
优点
不需要对数据的分布做太多要求(相比基于统计分布的方法)。
可以处理不同区域具有不同密度的数据集(相比邻近度方法)。
可以量化每个数据点的异常程度(相比基于聚类的方法)。
缺点
时间复杂度仍然较高。
仍然面临调参困难问题。
4、基于聚类的方法
聚类的目的是为了发现强相关的数据对象的组,而异常检测则相反,为了发现不与其他数据对象强相关的数据对象,因此可以反向使用聚类算法进行异常检测。
思路:首先聚类所有数据对象,然后评估对象属于簇的程度。定量评估的方法可以基于目标函数来计算,例如对于K均值算法来说,删除某个点后能够显著的改善该簇的误差平方和(SSE),那么该点就是离群点。
方法评价:
优点
有些聚类算法(如K均值)的时间和空间复杂度较低,计算代价较小。
缺点
每种聚类算法可能只适合特定数据类型,需要谨慎选择。
通常只能给出 0/1 的判断(是不是异常点),不能量化每个数据点的异常程度。
网友评论