怎样检测和应对数据集的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。例如,我们分析身高和收入的关系时,可以考虑把从事篮球、排球、模特等职业的人员单独拉个模型出来。

最后

实践起来吧!

Matlab是一种广泛用于数值计算和数据分析的软件,其包含了一些内置函数和工具箱,可以帮助用户检测数据集是否存在异常值。异常值,也称为离群点(outliers),是指那些在数据分布显著偏离其他观测值的数据点。 在Matlab,你可以通过以下步骤进行异常值检测: 1. **Z-score方法**:使用`zscore`函数计算每个数据点的标准分数,标准分数越远离0,说明该数据点越有可能是异常值。通常,如果一个值的绝对Z-score超过某个阈值(如3),就认为它是异常的。 ```matlab data = ...; % 你的数据 z_scores = zscore(data); threshold = 3; outliers = abs(z_scores) > threshold; ``` 2. **箱线图(Box Plot)**:利用`boxplot`函数绘制箱线图,直观地找出四分位数范围之外的数据点。 ```matlab boxplot(data) outliers = find(isoutlier(data)); % 使用isoutlier函数识别异常值 ``` 3. **IQR(Interquartile Range)方法**:基于四分位距(Q3 - Q1)判断异常值。超出上界Q3 + 1.5*IQR或下界Q1 - 1.5*IQR的数据被认为是异常。 4. **聚类算法**:可以使用`kmeans`或`DBSCAN`等算法对数据进行聚类分析,然后检查哪些样本属于孤立的小簇,可能是异常值。 在完成上述操作后,可以手动确认或使用统计模型(如LOF、Isolation Forest等)进一步处理异常值。同时,需要注意的是,异常值的定义依赖于具体的业务背景和数据分布,所以选择合适的方法很重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值