怎样检测和应对数据集的Outliers

怎样检测和应对数据集的Outliers


原文

什么是Outlier

Outlier中文可以叫做异常样本,但是一般还是直接称呼Outlier,它就是大量观测样本中那些量较少的、偏离整体的模式样本,这些样本很容易就能够让你得到偏差很大的模型,导致欠拟合,所以需要格外关注它们。
举个例子,我们在做消费者画像时,需要统计消费者的平均收入,大家的平均年薪可能只有20w,但是这时样本中冒出来了马云和王健林,它们的收入远远高于20w,这时就可以把他们当做Outlier。

Outlier的种类

Outlier可以分为单变量和多变量,上一段我们给出了单变量Outlier的例子,这种Outlier通过观察单个变量的分布便可找出。而如果是多变量的Outlier则需要观测多维情景下的变量分布。举个例子,a,b两个变量的取值范围都是[1,100],而且假设a和b具有线性共线性a≈b,那么很可能某个变量{a=1, b=100}就是该2维场景下的一个Outlier。

为什么会有Outlier

不管何时我们碰到Outlier,最理想的做法应该是首先定位导致这些Outlier的原因,因为应对这些Outlier的方式和它们出现的原因的息息相关的。Outlier出现的原因大致分为2类:
1. 人为错误或非普遍情况
2. 普遍情况

如果用更细致的分类方式则可以这样分:
1. 数据录入错误。人工进行数据的收集、记录、录入时都会有疏漏,这时就导致了Outlier。例如数字少写个0什么的
2. 测量错误。这是导致Outlier出现最严重的因素。当测量仪器有严重的错误时就会道中该类的Outlier。举个例子,10台测量仪器,可能有1台是不达标的,操作人员使用这台仪器得到的数据就会非常的不可靠,极容易产生Outlier
3. 实验错误。例如你统计刘翔的110米栏速度和风速的关系,但是有些比赛他压根就没跑完,或者起跑前就退出了,这种数据就是Outlier。
4. 人为故意导致的错误。例如你出去发问卷调查中国男性jj的平均长度,呵呵,那帮人会告诉你真的值才见鬼了,肯定都是20cm+。
5. 数据处理错误。举个例子,当待处理数据来源很多,例如多个人出去发调查问卷调查平均收入,有人拿美元作为计量单位,有人拿欧元,有人拿英镑,这样很容易疏忽就能把这些单位忽视,从而导致Outlier。
6. 采样错误(和实验错误类似)。某个场景下我们需要统计运动员的身高,结果我们采样的运动员大部分都是篮球运动员
7. 普遍情况导致的Outlier(Natural Outlier)。当某个Outlier并不是因为某种错误导致的,它就是Natural Outlier。例如统计微博平均回复数时,网红微博下的评论数量就远高于普通用户,但是王红的数量相比微博用户是非常少的,这时就需要单独把这种数据拿出来分析。

Outlier会有什么影响

Outliers会大幅度扭曲数据统计和分析结果:
1. 加大错误方差,降低统计测试的说服力
2. 如果Outlier不是随机分布的,则会影响样本的正态分布性质
3. 会影响基本的回归假设、ANOVA(即方差分析)等统计模型假设

拿个实际的例子看下Outlier的影响:

Outlier对数据分析的影响
可以看到,Outlier对于数据的均值以及标准差影响非常大。

如何检测Outlier

最通用的Outlier检测方法就是可视化,通过可视化的方式把这些样本呈现出来就很容易能够发现哪些样本是Outlier。这里再列举一些比较通用的非可视化Outlier检测方法:
1. 在Q1-1.5*IQR 和 Q3+1.5*IQR范围之外的不要(需要了解IQR,即4分位数中的Q3-Q1的值
2. 值处于该特征的第5个百分位和第95个百分位之外的,归为Outlier
3. 离均值有3个以上标准差的归为Outlier
4. Outlier检测可能会依赖于领域知识
5. 双变量或多变量的Outlier通常可以使用某种影响因子来检测,例如马氏距离和库克距离
6. 在SAS中还有一些其他野路子,比如PROC Univariate, PROC SGPLOT等

如何处理Outlier

大多数处理Outlier的方法和处理数据缺失值的方法类似,例如移除该观测样本、做变性、分档或者把它们当做单独的样本集合来处理等方式。

  1. 删除观测样本。由于数据录入错误或者数据处理错误导致的Outlier量较小,可以直接删除;类似的,也可以直接在数据分布的两端截断,例如只保留第5个百分位到第95个百分位的数据
  2. 变换或分档。通过进行变量的变换也可以移除Outlier,例如对某个特征全部取对数,一个值的自然对数可以减少极端值导致的大方差。我之前做过一个基于GBDT的模型,是给老用户推荐商品类目的,在实验数据中,有的用户对特定类目操作非常多,对其他类目则比较少,分布很不均匀;而有的用户对类目的普遍操作都比较少,比较均匀;为此我们对用户对类目的操作数取了自然对数,最后得到的模型提升非常大。同样,分档也可以,例如,统计人的年收入和职业的关系时,像马云、贝克汉姆等人的收入就可以做一个分级,而不是直接使用数值,这样就能避免数据太极端带来的问题,相当于做了一个数据的离散化
  3. 填充值,使用平均值、中位数等值来替换Outlier的值,在填充之前我们应该分析该Outlier是自然存在的Outlier还是认为失误导致的Outlier,如果是认为失误导致的则可以进行这种处理,或者是使用其他模型预测的方式来填充。例如,有一个用户对电影平分的矩阵,想要进行矩阵计算的话,需要使用某种方式把缺失的用户对电影的评分填充起来
  4. 把Outlier单独处理,使用独立的模型来应对这些Outlier。例如,我们分析身高和收入的关系时,可以考虑把从事篮球、排球、模特等职业的人员单独拉个模型出来。

最后

实践起来吧!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Pythonoutliers(离群值)是指数据集的一个或多个异常值,它们与其他值有明显的差异。离群值可能是由于实验误差、异常情况或测量错误等原因而引入的。在数据分析和统计,离群值可能会影响到对数据的分析和建模,因此需要对其进行处理。 Python有一些常用的方法来检测和处理离群值。以下是其一些方法: 1. 标准差方法(Standard Deviation method):我们可以通过计算数据集的标准差,将与平均值相差3倍标准差以上的值认定为离群值。 2. 箱线图方法(Boxplot method):通过绘制箱线图,我们可以观察到数据集的任何离群值。箱线图显示了数据的四分位数、位数和离群值。 3. Z-score方法:将数据集转换为标准正态分布,并将超过阈值(通常为3)的值识别为离群值。 4. 离群值识别算法(Outlier detection algorithms):还有一些更复杂的算法可以用于检测离群值,例如孤立森林算法、局部离群因子算法等。 一旦识别出离群值,我们可以选择如下进行处理: 1. 删除离群值:如果离群值是由于错误或异常引入的,我们可以考虑将其从数据集删除。 2. 替换离群值:根据数据集的特性,我们可以用数据集的均值、位数或其他合适的替代值来替换离群值。 3. 转换数据:有时,对数据进行转换可以减少离群值的影响。例如,可以对数据进行对数转换或使用缩放等技术。 总之,在Python,我们可以使用各种方法来检测和处理离群值。根据数据的特点和分析目标,选择合适的方法进行处理,以保证数据分析的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值