龙空技术网

数据分析师的必备能力—样本数据异常值识别的4种经典方法

番茄风控大数据宣 339

前言:

现时姐妹们对“python zscore标准化”都比较注意,大家都想要知道一些“python zscore标准化”的相关知识。那么小编同时在网络上搜集了一些对于“python zscore标准化””的相关文章,希望我们能喜欢,小伙伴们快快来学习一下吧!

对于从事数据分析岗位的小伙伴,日常工作中可能会接触到很多类型的维度数据,而在开展任务的具体实践过程中,需要我们只有具备较好的数据分析能力,才能根据实际业务需求得到有价值的分析结果。在包括业务熟悉、数据理解、逻辑思维等能力的范围内,掌握数据分析的常见算法,是我们必须要掌握的工作能力,例如数据清洗处理、特征加工分析等。

在模型开发过程中,针对建模数据的预处理过程是一项必备环节,数据预处理主要包括缺失值处理、异常值处理、重复值处理等,其目的都是为了获取一份比较完整且合理的样本数据,从而有效支持模型的拟合训练与测试评估。其中,异常值处理是一项比较重要的内容,但在工作实践中,根据已有特征样本数据,如何判断识别异常值是处理异常值的前提条件,因此掌握样本数据异常值的识别方法,对于数据建模或数据分析等工作显得非常有必要。

本文将结合实际业务场景需求,介绍下识别异常值的常用4种方法,分别为箱线图分布、标准差检测、DBSCAN聚类、孤立森林模型。为了便于大家对判断异常值的理解,我们通过具体样例数据进行描述。现通过Python构造一份含有异常值的样本数据,实现代码如图1所示。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图1 样本构建代码

生成的样本数据集具体如图2所示,共包含10条样本,以及X、Y、Z共3个特征变量。

编辑

添加图片注释,不超过 140 字(可选)

图2 样本数据集

1、箱线图分布

箱线图可以统计展示一组样本数据的分布情况,具体如图3所示,将数据的下四分位数标为Q1,上四分位数标为Q3,上四分位数与下四分位数的差值Q3-Q1标为IQR,则整个样本数据分布有25%的数据小于Q1,有25%的数据大于Q3,剩余50%的数据集中在Q3-Q1之间。一般情况下,箱线图的上界设定为Q3+1.5*IQR,下界设定为Q1-1.5*IQR。在具体实践过程中,可以将大于箱线图上界,或小于箱线图下界的数值识别为异常值。

编辑

添加图片注释,不超过 140 字(可选)

图3 箱线图结构

在Python语言中,可以采用DataFrame的boxplot()函数绘制样本数据的箱线图,实现代码为df.boxplot(),其中df为样本数据集。根据图2的样本数据,绘制箱线图如图4所示,从结果可以很直观看出,样本特征X、Y、Z各有1个异常值。由图可知异常值均分布在箱线图上界以上,根据Q3+1.5*IQR进一步推断可知异常值数据分别为X:76、Y:118、Z:141。

编辑

添加图片注释,不超过 140 字(可选)

图4 样本箱线图

2、标准差检测

当样本数据服从正态分布时,99%的数值与均值的距离应保持在3个标准差之内,95%的数值与均值的距离保持在2个标准差之内。在实际业务场景中,一般认为当数值与均值的距离超过2个标准差时,则认为此数值为异常值。

在Python语言中,根据标准差检测异常值的代码如图5所示,其过程为采用for循环依次对样本数据的每列进行处理,即通过mean()函数与std()函数分别获取均值与标准差,然后将每列数据进行归一化处理(Z-score标准化),最后比较标准化数值与标准正态分布标准差1的大小关系,当前者是后者2倍以上关系时,则认为此数值为异常值,结果会返回布尔值True,否则为False。

编辑

添加图片注释,不超过 140 字(可选)

图5 标准差检测代码

根据图2的样本数据,通过标准差检测方法来判断异常值,输出如图6所示,可以很直观看出,结果为True的对应数据均代表异常值,也就是样本特征X、Y、Z各有1个异常值,与图2对照可知,异常值数据为X:76、Y:118、Z:141,与箱线图方法结果保持一致。

编辑

添加图片注释,不超过 140 字(可选)

图6 标准差检测结果

3、DBSCAN聚类

DBSCAN是一种以密度为基础的空间聚类算法,可以用密度的概念剔除不属于任一类别的噪声点(异常值),DBSCAN算法将簇定义为密度相连的点的最大集合,将具有足够密度的区域划分为簇,并可以发现任意形状的簇。DBSCAN是一种无监督学习算法,由于其原理逻辑的特殊性,可作为样本数据异常值的检测方法之一。

DBSCAN算法在模型训练过程中,有2个重要参数需要明确。一个参数是样本最小值min_samples,代表形成聚类簇的样本点最小数量;另一个参数是距离eps,代表同一个聚类簇内样本点之间的最大距离。当某个样本点不在以eps为单位的聚类簇圆内,则此样本点很有可能为异常点。

在Python语言中,通过DBSCAN聚类算法进行异常值检测的代码如图7所示,示例DBSCAN(min_samples=3,eps=3)的参数代表以单位3进行聚类簇画圆,且圆内最小样本数量为3。以下代码是对样本特征X、Y、Z分别进行异常值识别,且异常值判定结果是以数值-1表示。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图7 DBSCAN检测代码

通过以上代码的最终检测结果如图8所示,可以很直观看出样本特征X、Y、Z均有1个异常值(-1位置),对应到原始数据分别为X:76、Y:118、Z:141,这与前边箱线图和标准差方法的结果是一致的。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图8 DBSCAN检测结果

4、孤立森林模型

孤立森林是一种无监督学习算法,采用集成学习决策树思想进行模型拟合训练的,应用于样本异常值检测方面,其判断逻辑的前提,是异常值与正常值的属性差异较大,且异常值类别的样本数量较少。采用孤立森林模型算法来识别异常值,比较适合高维数据集的场景

在Python语言中,孤立森林模型检测异常值的实现过程如图9所示,样例是对样本特征X、Y、Z分别进行异常值判断,且异常值判定结果是以数值-1表示。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图9 孤立森林检测代码

通过以上代码的最终检测结果如图10所示,其中1代表正常值,-1代表异常值,可以很直观看出样本特征X、Y、Z均有1个异常值,这个结果和前面所介绍方法的检测结果都是相同的。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图10 孤立森林检测结果

综合以上对样本异常值检测方法的介绍,大家理解到各种方法的核心思想虽然是一致的,但具体形式都有一定区别。例如箱线图和标准差是从统计学角度来判断异常值的,而DBSCAN和孤立森林是通过模型训练角度来识别的,但无论采取哪种方法,结合样本情况与业务场景是最合适的。在实际工作中,一般采用的方法是箱线图分布和标准差检测,大家可以根据具体场景需求而定。

关于本文所提到的样本数据异常的识别方法,实操性的内容,本次番茄风控除此文章,也在知识星球平台准备了相关的实操代码,帮助大家了解相关的实操内容,加入到知识星球,来参与本周番茄风控的【星球打榜赛】作业吧:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

....

~原创文章

标签: #python zscore标准化