Ⅰ 如何判别测量数据中是否有异常值
一般异常值的检测方法有基于统计的方法,基于聚类的方法,以及一些专门检测异常值的方法等,下面对这些方法进行相关的介绍。
1. 简单统计
如果使用pandas,我们可以直接使用describe()来观察数据的统计性描述(只是粗略的观察一些统计量),不过统计数据为连续型的,如下:
df.describe()红色箭头所指就是异常值。
以上是常用到的判断异常值的简单方法。下面来介绍一些较为复杂的检测异常值算法,由于涉及内容较多,仅介绍核心思想,感兴趣的朋友可自行深入研究。
4. 基于模型检测
这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。如果模型是簇的集合,则异常是不显着属于任何簇的对象;如果模型是回归时,异常是相对远离预测值的对象。
离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。
比如特征工程中的RobustScaler方法,在做数据特征值缩放的时候,它会利用数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。
优缺点:(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。
5. 基于近邻度的离群点检测
统计方法是利用数据的分布来观察异常值,一些方法甚至需要一些分布条件,而在实际中数据的分布很难达到一些假设条件,在使用上有一定的局限性。
确定数据集的有意义的邻近性度量比确定它的统计分布更容易。这种方法比统计学方法更一般、更容易使用,因为一个对象的离群点得分由到它的k-最近邻(KNN)的距离给定。
需要注意的是:离群点得分对k的取值高度敏感。如果k太小,则少量的邻近离群点可能导致较低的离群点得分;如果K太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。
优缺点:(1)简单;(2)缺点:基于邻近度的方法需要O(m2)时间,大数据集不适用;(3)该方法对参数的选择也是敏感的;(4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
5. 基于密度的离群点检测
从基于密度的观点来说,离群点是在低密度区域中的对象。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。
优缺点:(1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;(2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);(3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。
6. 基于聚类的方法来做异常点检测
基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇,那么该对象属于离群点。
离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。这也是k-means算法的缺点,对离群点敏感。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。
优缺点:(1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;(2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点;(3)产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;(4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。
7. 专门的离群点检测
其实以上说到聚类方法的本意是是无监督分类,并不是为了寻找离群点的,只是恰好它的功能可以实现离群点的检测,算是一个衍生的功能。
Ⅱ 异常检测原理与实验
异常检测原理与实验
最近需要对欺诈报价进行识别处理,简单的模型就是给定很多不同数据集,需要找出每个spu下可能存在的欺诈数据,比如{20,22,30},其中的欺诈数据可能就是30。其实加以抽象,属于异常检测范围。
异常检测是发现与大部分对象不同的对象,其中这些不同的对象称为离群点。一般异常检测的方法主要有数理统计法、数据挖掘方法。一般在预处理阶段发生的异常检测,更多的是依托数理统计的思想完成的。
一、基于模型
首先判断出数据的分布模型,比如某种分布(高斯分布、泊松分布等等)。然后根据原始数据(包括正常点与离群点),算出分布的参数,从而可以代入分布方程求出概率。例如高斯分布,根据原始数据求出期望u和方差?,然后拟合出高斯分布函数,从而求出原始数据出现的概率;根据数理统计的思想,概率小的可以当做离群点。
优点:
方法简单,无需训练,可以用在小数据集上。
缺点:
发现离群点效果差,离群点对模型参数影响大,造成区分效果差。需要数值化
import java.util.List;
/**
* 实现描述:计算正态分布
*
* @author jin.xu
* @version v1.0.0
* @see
* @since 16-9-9 下午12:02
*/
public class Gauss {
public double getMean(List<Double> dataList) {
double sum = 0;
for (double data : dataList) {
sum += data;
}
double mean = sum;
if (dataList.size() > 0) {
mean = sum / dataList.size();
}
return mean;
}
public double getStd(List<Double> dataList, double mean) {
double sum = 0;
for (double data : dataList) {
sum += (data - mean) * (data - mean);
}
double std = sum;
if (dataList.size() > 0) {
std = sum / dataList.size();
}
return Math.sqrt(std);
}
public double getProbability(double data, double meam, double std) {
double tmp = (1.0 / (Math.sqrt(2 * 3.141592653) * std)) * Math.exp(-(Math.pow(data - meam, 2) / (2 * Math.pow(std, 2))));
return tmp;
}
}
二、基于近邻度
需要度量对象之间的距离,离群点一般是距离大部分数据比较远的点。一般这种方法是计算每个点与其距离最近的k个点的距离和,然后累加起来,这就是K近邻方法。
优点:
原理简单,无需训练,可用在任何数据集
缺点:
需要计算距离,计算量大,K的选定以及多于K个离群点聚集在一起导致误判。
public class KNN {
public static double process(int index,Position position, int k, List<Position> positionList) {
List<Double> distances = Lists.newArrayList();
for (int i = 0; i < positionList.size(); ++i) {
if (i != index) {
distances.add(Math.sqrt(Math.pow((positionList.get(i).getX() - position.getX()), 2)+Math.pow((positionList.get(i).getY()-position.getY()),2)));
}
}
Collections.sort(distances);
k = k < distances.size() ? k : distances.size();
double knnDistance = 0.0;
for (int i = 0; i < k; ++i) {
knnDistance += distances.get(i);
}
return knnDistance;
}
private static class Position{
int x;
int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
}
三、基于密度
低密度区域的数据点可以当做某种程度上的离群点。基于密度的和基于近邻的是密切相关的,简单来说,密度和近邻的距离成反比。一般的度量公式如下:
density(x,k)表示包含x的k近邻的密度,distance(x,y)表示x到y的距离,N(x,k)表示x的k近邻集合。
优点:
相对准确
缺点:
需要度量密度,需要设定阈值
四、基于聚类
丢弃远离其他聚类簇的小聚类簇。需要给出小聚类簇的大小阈值、聚类簇距离阈值。常用的聚类方法比较多,比如K-means(变种K-models)、EM、层次聚类算法(分裂型和归约型)。具体方法说明可见:漫话数据挖掘。
优点:
引入数据挖掘聚类的方法,在样本充足的情况下准确度会相对较高
缺点:
需要训练,计算量大,原理相对复杂
需要建立适当的模型,需要充足的训练样本
总之异常检测的通用方法大致有4种:基于模型、k近邻、基于密度和基于聚类的。实际使用数据是线上的报价,由于每个SPU下报价有限,聚类不适合,所以用基于模型的和k近邻的做了试验;基于密度的和K近邻差不多,而且需要密度范围的距离阈值,就没有选择。此外,涉及的实验数据是公司的,代码是兴趣使然,所以就不公布具体实验数据。
Ⅲ spss 如何做异常点的检验
异常点。即:异常值
Spss中异常值检查方法如下:
检查异常值方法1:
最常用的方法就是对变量进行排序,这也是最简单的方法。排序后对照最大值和最小值、全距等统计量可以看出数据的离群状况。
检查异常值方法2:
散点图的优势就在于直观的呈现两两变量间的关系,尤其在两变量间的线性关联比较强的时候,如果有离群值,图形侦察的结果会很明显,不过(也包括矩阵散点等图形)其局限在于,其本质还是变量间的两两间的关系,更多的多维信息的提供还是需要经验去判断。
检查异常值方法3:
箱体图为我们提供了数据百分位数的概念,例如四分位数(25%和75%)是将该变量分成约4个部分,分别提供了数据不同分位点附件的离散性,而且同时提供描述数据集中性的中位数,这样在中间50%的数据上提供的信息将是异常丰富的。
检查异常值方法4:
在主要统计建模过程中大多会提供异常值或极端值的诊断,例如距离的测算:cook距离、杠杆值等;影响统计量:DfBeta、协方差比率等。它们均有相应的经验上的判断标准,如果有些指标没有相应的判断异常值的标准,则可以通过排序的方式,找到其相对大小。
检查异常值方法5:
标识异常个案,这里提供的是统计建模的方式侦查异常个案(注意它的结果有可能和我们其他方式侦查的结果有出处),这种方法主要通过两步聚类的思想,找到不同个案间的相似性,通过对所在类别的评价计算出异常索引,然后找到对应的ID号,则该个案可能为异常值,至于对这些异常个案怎么处理,分析人员作出何种决定,这个最好结合专业背景综合判断后续的处理方法。
检查异常值方法6:
如果涉及的是时序数据,控制图是不错的选择,在控制规则里提供了异常丰富的侦查异常个案的选项。
当然其他过程里也有一些细节的处理,例如,排列图、误差条形图、可视离散化、缺失值诊断、数据验证过程等。
Ⅳ 三监管不合理检查异常值
三监管不合理检查异常值
三监管不合理检查异常值的方法包括:
1. 离群点检测:离群点检测是检测数据中的异常值的一种常用方法,它可以帮助发现数据中的离群值,如果数据点落在一个明显的离群点,则可以认为它是一个异常值。
2. 盒须图检测:盒须图是一种用于检测孙唤喊异常值的常用方法,它可以帮助发现数据中的离群值,如果数据点落在外部置信区间之外,则可以认为它是一个异常值。
3. 统计检测:统计检测是检测数据中的异常值的一种常用方法,它可以帮助发现数据中的离群值,如果数据点的统计值显着偏离正常分布,则可以认为它是一个异常值。
4. 基于模型的检测:基于模链核型的检测是检测数据中的异常值的一种常用方法,它可以帮助发现数据中的离群值,如果数据点的模型预测值显着偏离实际值,则可以认为它是一个则野异常值。
Ⅳ 异常检查的方法
虽然检查用不同化探方法所发现的异常,其要求和内容不尽相同,但所用的方法主要是现场踏勘和重新采样。
1.现场踏勘
就是在异常范围内及其附近的地区,对各种地质现象和自然地理条件进行详细调查研究,查明其对异常的控制作用,收集一切可供参考的找矿标志,了解当地的矿产情况等。
2.重新采样
为了证实异常是否存在,在异常范围内布置 1 ~ 2 条测线重新采样。测线要长一些,至少要重复原来的 5 ~6 个采样点,但也不能采集过多的样品。为了取得异常特征的更详细更完整的资料,应在异常范围内加密测线和采样点重新采集样品。为了追踪异常源,可改变采样对象或采样部位重新采样。例如: 采取土壤样品来追踪水系沉积物中异常物质的来源; 采取基岩、泉水或渗湿土样品来追踪土壤中异常物质的来源等。又如: 当土层厚度在 0.5m 以上,地形又比较平坦时,可布置适当的剖面,利用浅井或取样钻,沿铅垂方向采取样品(每隔 10 ~20cm 采集一个样品)直至基岩。再利用分析结果编绘剖面的等含量线图,就可根据指示元素含量在剖面上的变化情况,判定基岩源的位置(图 7 11),分辨由污染或其他表生富集作用而形成的非矿致异常(图 7 12)。
图7-11 铜等含量线图(显示出基岩源的位置)
图7-12 铜等含量线图(显示异常与基岩无关)
现以水系沉积物测量异常检查为例,介绍异常检查的具体方法和过程。携带现场分析设备(如冷提取分析箱)沿着异常水系边重复采样边分析样品,以确定异常是否存在,并随时考查各种非矿成因(如污染、次生富集等)的可能干扰。当追踪到异常截止位置后,再转向两岸和谷坡进行地质观察,同时布置测线,采集土壤样品(或岩石样品),以便寻找异常源的位置。
除上述两种异常检查方法外,还可以选用适当的物探方法,或动用少量的地表坑探工程直接揭露异常源。
Ⅵ 如何判别测量数据中是否有异常值
在回弹法检测砼强度中,按批抽样检测的测区数量往往很多,这就不可避免出现较多的检测异常值,怎样判断和处理这些异常值,对于提高检测结果的准确性意义重大。格拉布斯检验法是土木工程中常用的一种检验异常值的方法,其应用于回弹法检测砼强度,能有效提高按批抽样检测结果的准确性。
Ⅶ 对于异常值的检测
离群点,是一个数据对象,它显着不同于其他数据对象,与其他数据分布有较为显着的不同。有时也称非离群点为“正常数据”,离群点为“异常数据”。
离群点跟噪声数据不一样,噪声是被观测变量的随机误差或方差。一般而言,噪声在数据分析(包括离群点分析)中不是令人感兴趣的,需要在数据预处理中剔除的,减少对后续模型预估的影响,增加精度。
离群点检测是有意义的,因为怀疑产生它们的分布不同于产生其他数据的分布。因此,在离群点检测时,重要的是搞清楚是哪种外力产生的离群点。
常见的异常成因:
通常,在其余数据上做各种假设,并且证明检测到的离群点显着违反了这些假设。如统计学中的假设检验,基于小概率原理,对原假设进行判断。一般检测离群点,是人工进行筛选,剔除不可信的数据,例如对于房屋数据,面积上万,卧室数量过百等情况。而在面对大量的数据时,人工方法耗时耗力,因此,才有如下的方法进行离群点检测。
统计学方法是基于模型的方法,即为数据创建一个模型,并且根据对象拟合模型的情况来评估它们。大部分用于离群点检测的统计学方法都是构建一个概率分布模型,并考虑对象有多大可能符合该模型。
离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。
a. 参数法:
当数据服从正太分布的假设时在正态分布的假定下,u±3σ区域包含99.7%的数据,u±2σ包含95.4%的数据,u±1σ包含68.3%的数据。其区域外的数据视为离群点。
当数据是非正态分布时,可以使用切比雪夫不等式,它对任何分布形状的数据都适用。根据 切比雪夫不等式 ,至少有(1-1/k 2 )的数据落在±k个标准差之内。所以,有以下结论:
计算得到:通过绘制箱线图可以直观地找到离群点,或者通过计算四分位数极差(IQR)定义为Q3-Q1。比Q1小1.5倍的IQR或者比Q3大1.5倍的IQR的任何对象都视为离群点,因为Q1-1.5IQR和Q3+1.5IQR之间的区域包含了99.3%的对象。
涉及两个或多个橡信属性或变量的数据称为多元数据。核心思想是把多元离群点检测任务转换成一元离群点检测问题。
- 卡方统计量的多元离群点检测 :正态分布的假定下,卡方统计量也可以用来捕获多元离群点,对象 ,卡方统计量是: , 是 在第i维上的值, 是所有对象在第i维上的均值,而n是维度。如果对象的卡方统计量很大,则该对象是离群点。
b. 非参数法:
构造直方图
为了构造一个好的直方图,用户必须指定直方图的类型和其他参数(箱数、等宽or等深)。最简单的方法是,如果该对象落入直方图的一个箱中,则该对象被看做正常的,否则被认为是离群点。也可以使用直方图赋予每个对象一个离群点得分,比如对象的离群点得分为该对象落入的箱的容积的倒数。但这个方法敬洞很难选择一个较好的直方图参数。
注意 :
传统的观点都认为孤立点是一个单独的点,然而很多的现实情况是异常事件具有一定的时间和空间的局部性,这种局部性会产生一个小的簇.这时候离群点(孤立点)实际上是一个小簇(图下图的C1和C3)。
一个对象是异常的,如果它远离大部分点。这种方法比统计学方法更一般、更容易使用,因为确定数据集的有意义的邻近性度量比确定它的统计分布更容易。不依赖统计检验,将基于邻近度的离群点看作是那些没有“足够多“邻居的对象。这里的邻居是用 邻近度(距离) 来定义的。最常用的距离是绝对距离(曼哈顿)和欧氏距离等等。
一个对象的离群点得分由到它的k-最近邻的距离给定。离群点得分对k的取值高度敏感。如果k太小,则少量的邻近离群点可能导致离群点较少;如果K太大,则点数少于k的簇中所有的对象可能都成了离群点,导致离群点过多。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。
从基于密度梁稿轮的观点来说,离群点是在低密度区域中的对象。一个对象的离群点得分是该对象周围密度的逆。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。
定义密度
一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数 。如果该距离小,则密度高,反之亦然。
另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。 需要小心的选择d,如果d太小,则许多正常点可能具有低密度,从而离群点较多。如果d太大,则许多离群点可能具有与正常点类似的密度(和离群点得分)无法区分。 使用任何密度定义检测离群点具有与基于邻近度的离群点方案类似的特点和局限性。特殊地,当数据包含不同密度的区域时,它们不能正确的识别离群点。
定义相对密度
为了正确的识别这种数据集中的离群点,我们需要与对象邻域相关的密度概念,也就是定义相对密度。常见的有两种方法:
(1)使用基于SNN密度的聚类算法使用的方法;
(2)用点x的密度与它的最近邻y的平均密度之比作为相对密度。使用相对密度的离群点检测( 局部离群点要素LOF技术 ):
一种利用聚类检测离群点的方法是丢弃远离其他簇的小簇。这个方法可以和其他任何聚类技术一起使用,但是需要最小簇大小和小簇与其他簇之间距离的阈值。这种方案对簇个数的选择高度敏感。使用这个方案很难将离群点得分附加到对象上。
一种更系统的方法,首先聚类所有的点,对某个待测点评估它属于某一簇的程度。(基于原型的聚类可用离中心点的距离来评估,对具有目标函数(例如kmeans法时的簇的误差平方和)的聚类技术,该得分反映删除对象后目标函数的改进),如果删去此点能显着地改善此项目标函数,则可以将该点定位为孤立点。
基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:
对象是否被认为是离群点可能依赖于簇的个数(如k很大时的噪声簇)。该问题也没有简单的答案。一种策略是对于不同的簇个数重复该分析。另一种方法是找出大量小簇,其想法是(1)较小的簇倾向于更加凝聚,(2)如果存在大量小簇时一个对象是离群点,则它多半是一个真正的离群点。不利的一面是一组离群点可能形成小簇而逃避检测。
根据已有训练集检测新样本是否异常
异常检测根据原始数据集的不同可分为两类:
novelty detection: 训练集中没有异常样本
outlier detection: 训练集中有异常样本
异常样本:
数量少,比较分散
novelty detection和outlier detection的区别:
Sklearn异常检测模型一览
5.1 奇异点检测(Novelty Detection)
奇异点检测,就是判断待测样本到底是不是在原来数据的概率分布内。概率学上认为,所有的数据都有它的隐藏的分布模式,这种分布模式可以由概率模型来具象化。
5.1 离群点检测(Outlier Detection)
不同与奇异点检测是,现在我们没有一个干净的训练集(训练集中也有噪声样本)。下面介绍的三种离群点检测算法其实也都可以用于奇异点检测。
如果我们认为,可达密度小的目标样本点就是异常点,这样未尝不可。但是,LOF算法更进一步。
LOF可以用来判断经纬度的异常。
使用python进行异常值(outlier)检测实战:KMeans + PCA + IsolationForest + SVM + EllipticEnvelope
文章引用: 数据挖掘:数据清洗——异常值处理
Ⅷ 大数据科学家需要掌握的几种异常值检测方法
引言
异常值检测与告警一直是工业界非常关注的问题,自动准确地检测出系统的异常值,不仅可以节约大量的人力物力,还能尽早发现系统的异常情况,挽回不必要的损失。个推也非常重视大数据中的异常值检测,例如在运维部门的流量管理业务中,个推很早便展开了对异常值检测的实践,也因此积累了较为丰富的经验。本文将从以下几个方面介绍异常值检测。
1、异常值检测研究背景
2、异常值检测方法原理
3、异常值检测应用实践
异常值检测研究背景
异常值,故名思议就是不同于正常值的值。 在数学上,可以用离群点来表述,这样便可以将异常值检测问题转化为数学问题来求解。
异常值检测在很多场景都有广泛的应用,比如:
1、流量监测
互联网上某些服务器的访问量,可能具有周期性或趋势性:一般情况下都是相对平稳的,但是当受到某些黑客攻击后,其访问量可能发生显着的变化,及早发现这些异常变化对企业而言有着很好的预防告警作用。
2、金融风控
正常账户中,用户的转账行为一般属于低频事件,但在某些金融诈骗案中,一些嫌犯的账户就可能会出现高频的转账行为,异常检测系统如果能发现这些异常行为,及时采取相关措施,则会规避不少损失。
3、机器故障检测
一个运行中的流水线,可能会装有不同的传感器用来监测运行中的机器,这些传感器数据就反应了机器运行的状态,这些实时的监测数据具有数据量大、维度广的特点,用人工盯着看的话成本会非常高,高效的自动异常检测算法将能很好地解决这一问题。
异常值检测方法原理
本文主要将异常值检测方法分为两大类:一类是基于统计的异常值检测,另一类是基于模型的异常值检测。
基于统计的方法
基于模型的方法
1、基于统计的异常值检测方法
常见的基于统计的异常值检测方法有以下2种,一种是基于3σ法则,一种是基于箱体图。
3σ法则
箱体图
3σ法则是指在样本服从正态分布时,一般可认为小于μ-3σ或者大于μ+3σ的样本值为异常样本,其中μ为样本均值,σ为样本标准差。在实际使用中,我们虽然不知道样本的真实分布,但只要真实分布与正太分布相差不是太大,该经验法则在大部分情况下便是适用的。
箱体图也是一种比较常见的异常值检测方法,一般取所有样本的25%分位点Q1和75%分位点Q3,两者之间的距离为箱体的长度IQR,可认为小于Q1-1.5IQR或者大于Q3+1.5IQR的样本值为异常样本。
基于统计的异常检测往往具有计算简单、有坚实的统计学基础等特点,但缺点也非常明显,例如需要大量的样本数据进行统计,难以对高维样本数据进行异常值检测等。
2、基于模型的异常值检测
通常可将异常值检测看作是一个二分类问题,即将所有样本分为正常样本和异常样本,但这和常规的二分类问题又有所区别,常规的二分类一般要求正负样本是均衡的,如果正负样本不均匀的话,训练结果往往会不太好。但在异常值检测问题中,往往面临着正(正常值)负(异常值)样本不均匀的问题,异常值通常比正常值要少得多,因此需要对常规的二分类模型做一些改进。
基于模型的异常值检测一般可分为有监督模型异常值检测和无监督模型异常值检测,比较典型的有监督模型如oneclassSVM、基于神经网络的自编码器等。 oneclassSVM就是在经典的SVM基础上改进而来,它用一个超球面替代了超平面,超球面以内的值为正常值,超球面以外的值为异常值。
经典的SVM
1
基于模型的方法
2
基于神经网络的自编码器结构如下图所示。
自编码器(AE)
将正常样本用于模型训练,输入与输出之间的损失函数可采用常见的均方误差,因此检测过程中,当正常样本输入时,均方误差会较小,当异常样本输入时,均方误差会较大,设置合适的阈值便可将异常样本检测出来。但该方法也有缺点,就是对于训练样本比较相近的正常样本判别较好,但若正常样本与训练样本相差较大,则可能会导致模型误判。
无监督模型的异常值检测是异常值检测中的主流方法,因为异常值的标注成本往往较高,另外异常值的产生往往无法预料,因此有些异常值可能在过去的样本中根本没有出现过, 这将导致某些异常样本无法标注,这也是有监督模型的局限性所在。 较为常见的无监督异常值检测模型有密度聚类(DBSCAN)、IsolationForest(IF)、RadomCutForest(RCF)等,其中DBSCAN是一种典型的无监督聚类方法,对某些类型的异常值检测也能起到不错的效果。该算法原理网上资料较多,本文不作详细介绍。
IF算法最早由南京大学人工智能学院院长周志华的团队提出,是一种非常高效的异常值检测方法,该方法不需要对样本数据做任何先验的假设,只需基于这样一个事实——异常值只是少数,并且它们具有与正常值非常不同的属性值。与随机森林由大量决策树组成一样,IsolationForest也由大量的树组成。IsolationForest中的树叫isolation tree,简称iTree。iTree树和决策树不太一样,其构建过程也比决策树简单,因为其中就是一个完全随机的过程。
假设数据集有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出n个样本出来,作为这颗树的训练样本。
在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。
这样得到了一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直至达到终止条件。 终止条件有两个,一个是数据本身不可再分(只包括一个样本,或者全部样本相同),另外一个是树的高度达到log2(n)。 不同于决策树,iTree在算法里面已经限制了树的高度。不限制虽然也可行,但出于效率考虑,算法一般要求高度达到log2(n)深度即可。
把所有的iTree树构建好了,就可以对测试数据进行预测了。预测的过程就是把测试数据在iTree树上沿对应的条件分支往下走,直到达到叶子节点,并记录这过程中经过的路径长度h(x),即从根节点,穿过中间的节点,最后到达叶子节点,所走过的边的数量(path length)。最后,将h(x)带入公式,其中E(.)表示计算期望,c(n)表示当样本数量为n时,路径长度的平均值,从而便可计算出每条待测数据的异常分数s(Anomaly Score)。异常分数s具有如下性质:
1)如果分数s越接近1,则该样本是异常值的可能性越高;
2)如果分数s越接近0,则该样本是正常值的可能性越高;
RCF算法与IF算法思想上是比较类似的,前者可以看成是在IF算法上做了一些改进。针对IF算法中没有考虑到的时间序列因素,RCF算法考虑了该因素,并且在数据样本采样策略上作出了一些改进,使得异常值检测相对IF算法变得更加准确和高效,并能更好地应用于流式数据检测。
IF算法
RCF算法
上图展示了IF算法和RCF算法对于异常值检测的异同。我们可以看出原始数据中有两个突变异常数据值,对于后一个较大的突变异常值,IF算法和RCF算法都检测了出来,但对于前一个较小的突变异常值,IF算法没有检测出来,而RCF算法依然检测了出来,这意味着RCF有更好的异常值检测性能。
异常值检测应用实践
理论还需结合实践,下面我们将以某应用从2016.08.16至2019.09.21的日活变化情况为例,对异常值检测的实际应用场景予以介绍:
从上图中可以看出该应用的日活存在着一些显着的异常值(比如红色圆圈部分),这些异常值可能由于活动促销或者更新迭代出现bug导致日活出现了比较明显的波动。下面分别用基于统计的方法和基于模型的方法对该日活序列数据进行异常值检测。
基于3σ法则(基于统计)
RCF算法(基于模型)
从图中可以看出,对于较大的突变异常值,3σ法则和RCF算法都能较好地检测出来, 但对于较小的突变异常值,RCF算法则要表现得更好。
总结
上文为大家讲解了异常值检测的方法原理以及应用实践。综合来看,异常值检测算法多种多样 ,每一种都有自己的优缺点和适用范围,很难直接判断哪一种异常检测算法是最佳的, 具体在实战中,我们需要根据自身业务的特点,比如对计算量的要求、对异常值的容忍度等,选择合适的异常值检测算法。
接下来,个推也会结合自身实践,在大数据异常检测方面不断深耕,继续优化算法模型在不同业务场景中的性能,持续为开发者们分享前沿的理念与最新的实践方案。
Ⅸ 异常点检测方法
一、基本概念
异常对象被称作离群点。异常检测也称偏差检测和例外挖掘。
常见的异常成因:数据来源于不同的类(异常对象来自于一个与大多数数据对象源(类)不同的源(类)的思想),自然变异,以及数据测量或收集误差。
异常检测的方法:
(1)基于模型的技术:首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显着属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象。
(2)基于邻近度的技术:通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象。
(3)基于密度的技术:仅当一个点的局部密度显着低于它的大部分近邻时才将其分类为离群点。
二、异常点检测的方法
1、统计方法检测离群点
统计学方法是基于模型的方法,即为数据创建一个模型,并且根据对象拟合模型的情况来评估它们。大部分用于离群点检测的统计学方法都是构建一个概率分布模型,并考虑对象有多大可能符合该模型。离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。异常检测的混合模型方法:对于异常检测,数据用两个分布的混合模型建模,一个分布为普通数据,而另一个为离群点。
聚类和异常检测目标都是估计分布的参数,以最大化数据的总似然(概率)。聚类时,使用EM算法估计每个概率分布的参数。然而,这里提供的异常检测技术使用一种更简单的方法。初始时将所有对象放入普通对象集,而异常对象集为空。然后,用一个迭代过程将对象从普通集转移到异常集,只要该转移能提高数据的总似然(其实等价于把在正常对象的分布下具有低概率的对象分类为离群点)。(假设异常对象属于均匀分布)。异常对象由这样一些对象组成,这些对象在均匀分布下比在正常分布下具有显着较高的概率。
优缺点:(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。
2、基于邻近度的离群点检测。
一个对象是异常的,如果它远离大部分点。这种方法比统计学方法更一般、更容易使用,因为确定数据集的有意义的邻近性度量比确定它的统计分布更容易。一个对象的离群点得分由到它的k-最近邻的距离给定。离群点得分对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。
优缺点:(1)简单;(2)缺点:基于邻近度的方法需要O(m^2)时间,大数据集不适用;(3)该方法对参数的选择也是敏感的;(4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
3、基于密度的离群点检测。
从基于密度的观点来说,离群点是在低密度区域中的对象。一个对象的离群点得分是该对象周围密度的逆。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。需要小心的选择d,如果d太小,则许多正常点可能具有低密度,从而具有高离群点得分。如果d太大,则许多离群点可能具有与正常点类似的密度(和离群点得分)。使用任何密度定义检测离群点具有与基于邻近度的离群点方案类似的特点和局限性。特殊地,当数据包含不同密度的区域时,它们不能正确的识别离群点。
为了正确的识别这种数据集中的离群点,我们需要与对象邻域相关的密度概念,也就是定义相对密度。常见的有两种方法:(1)使用基于SNN密度的聚类算法使用的方法;(2)用点x的密度与它的最近邻y的平均密度之比作为相对密度。
使用相对密度的离群点检测(局部离群点要素LOF技术):首先,对于指定的近邻个数(k),基于对象的最近邻计算对象的密度density(x,k) ,由此计算每个对象的离群点得分;然后,计算点的邻近平均密度,并使用它们计算点的平均相对密度。这个量指示x是否在比它的近邻更稠密或更稀疏的邻域内,并取作x的离群点得分(这个是建立在上面的离群点得分基础上的)。
优缺点:
(1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;
(2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);
(3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。
4、基于聚类的技术
一种利用聚类检测离群点的方法是丢弃远离其他簇的小簇。这个方法可以和其他任何聚类技术一起使用,但是需要最小簇大小和小簇与其他簇之间距离的阈值。这种方案对簇个数的选择高度敏感。使用这个方案很难将离群点得分附加到对象上。一种更系统的方法,首先聚类所有对象,然后评估对象属于簇的程度(离群点得分)(基于原型的聚类可用离中心点的距离来评估,对具有目标函数的聚类技术该得分反映删除对象后目标函数的改进(这个可能是计算密集的))。基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。还有一种更复杂的方法:取一组不能很好的拟合任何簇的特殊对象,这组对象代表潜在的离群点。随着聚类过程的进展,簇在变化。不再强属于任何簇的对象被添加到潜在的离群点集合;而当前在该集合中的对象被测试,如果它现在强属于一个簇,就可以将它从潜在的离群点集合中移除。聚类过程结束时还留在该集合中的点被分类为离群点(这种方法也不能保证产生最优解,甚至不比前面的简单算法好,在使用相对距离计算离群点得分时,这个问题特别严重)。
对象是否被认为是离群点可能依赖于簇的个数(如k很大时的噪声簇)。该问题也没有简单的答案。一种策略是对于不同的簇个数重复该分析。另一种方法是找出大量小簇,其想法是(1)较小的簇倾向于更加凝聚,(2)如果存在大量小簇时一个对象是离群点,则它多半是一个真正的离群点。不利的一面是一组离群点可能形成小簇而逃避检测。
优缺点:
(1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;
(2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点;
(3) 产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;
(4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。
新颖性和离群值检测
离群值检测:训练数据包含离群值,即与其他观测值相距甚远的观测值。离群检测估计器会尝试拟合训练数据最集中的区域,忽略异常观察。
新颖性检测:训练数据不受异常值的污染,有兴趣检测新观察值是否是异常值。该情况下离群值也称为新颖性。
离群值检测和新颖性检测均用于异常检测,离群值检测称为无监督异常检测,新颖性检测称为半监督异常检测。离群值检测的情况下,离群值/异常不能形成密集的群集,可假设离群值/异常位于低密度区域;新颖性检测的情况下,只要新颖性/异常位于训练数据的低密度区域,就可以形成密集的簇。
通过对玩具数据集进行异常检测比较异常检测算法
数据集中包含一种或两种模式(高密度区域),以说明算法处理多模式数据的能力。
对于每个数据集,将生成15%的样本作为随机均匀噪声。该比例是OneClassSVM的nu参数和其他异常值检测算法的污染参数提供的值。离群值之间的决策边界以黑色显示,但是LOF除外,因为当采用LOF用于离群值检测时,没有适用于新数据的预测方法。
OneClassSVM对异常值敏感,对异常值检测执行的不好。当训练集不受异常值污染时,此估计器最适合新颖性检测。即不适用在高维中进行离群值检测或者不对基础数据的分布进行任何假设,OneClassSVM在这些情况下可能会根据其超参数给出有用的结果。
covariance EllipticEnvelope(协方差椭圆密度)假定数据是高斯分布并学习一个椭圆。在数据不是单峰时,会退化。此估计器对异常值具有鲁棒性。
IsolationFrorest和LocalOutlierFactor针对多模式数据集效果显着。LOF针对第三种数据集,明显优于其它三种估计器,该数据集中两种模式的密度不同。LOF的局部方面,即它仅将一个样本的异常评分与其邻居评分作比较,从何体现了该方法的优势。
针对最后一个均匀分布在超立方体中的数据集,很难说一个样本比另一个样本异常得多。除了OneClassSVM有些过拟合外,所有估计器都针对该情况提出不错的解决方案。针对这种情况,应该仔细观察样本的异常分数,性能好的估算器应该为所有样本分配相似的分数。
使用局部离群因子(LOF)进行离群值检测
LOF算法是一种无监督的异常检测方法,可计算给定数据点相对于其邻居的局部密度偏差。其中密度远低于其邻居的样本为异常值。
LOF算法的优势在于同时考虑了数据集的局部和全局属性:即使在异常样本具有不同底层密度的数据集中,仍能保持良好性能。问题不在于样本有多孤立,而在于样本相对于周围邻域有多孤立。
通常考虑的邻居数量(1)大于群集必须包含的最小样本数量,以便其他样本可以是相对于该群集的局部离散值;(2)小于可能是局部异常值的最大进距采样数,此类消息通常不可用,采用n_neighbors=20。
具有局部异常值的新颖性检验
LOF是一种无监督的异常检测方法,可计算给定数据点相对于其邻居的局部密度偏差,密度远低于其邻居的样本为异常值。LOF用于新颖性检验时,切勿在训练集上使用预测、决定函数、实例得分,会导致结果错误。只能对新的看不见的数据(不在训练集中)使用这些方法。
通常考虑邻居数量(1)大于群集必须包含的最小样本数,以便其他样本可以是相对于该群集的局部离群值;(2)小于可能是局部异常值的最大进距采样数,此类消息通常不可用,采用n_neighbors=20。
隔离林
在高维数据集中执行异常检测的一种有效方法是使用随机森林,分离的观察通过随机选择一个函数,随机选择所选择的特征的最大值和最小值之间的分割值。递归分区可用树结构表示,隔离样本所需的拆分数量等于从根节点到终止结点的路径长度。随机树的森林中的平均路径长度是对正态性和决策函数的度量。随机分区产生的异常路径明显较短,因此如果随机树森林为特定样本生成的较短路径,则该树代表的值很可能是异常的。
OneClassSVM
无监督的离群值检测,支持高维分布,基于libsvm
不假定数据分布的任何参数形式,可以更好的对数据的复杂形状进行建模,能够捕获真实的数据结构,难点在于调整核函数宽度参数,以便在数据散布矩阵的形状和数据过度拟合的风险间取得折中。
协方差椭圆密度
用于检测高斯分布数据集中的异常值的对象
经验协方差估计(作为非稳健估计)受到观测值异质结构的高度影响;鲁棒协方差估计能够集中于数据分布的主要模式,但是它坚持假设数据是高斯分布,产生了对数据结构的某些估计,在一定程度上是准确的。
HBOS单维效果极佳,但是标准差方法的mask 掩码效应严重。例如 数据通常在100以内,但是有两个异常点,500,1000000。这个算法就不能检出500这个异常点。
对比而言,孤立森林理论上更适合大数据的异常检测,且无掩码效应。孤立森林确定异常时训练只用样本数据。每颗树样本数量默认只有256个,默认只用100颗树。所以理论上25600个样本就能确定海量数据中的异常点了。
Sklearn的 isolation forest 例子默认是读入全量数据再采样。如果配上warm up 选项就能分批放入采样。
异常检测的深度学习研究综述