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

最后

实践起来吧!

### 中文摘要数据集的精细化处理方法 对于中文摘要数据集的精处理,可以从以下几个方面入手: #### 数据清洗与异常值检测数据预处理阶段,可以通过使用编程语言如R及其相关工具包来实现系统的异常值检测处理。例如,利用`outliers`包可以帮助识别并剔除可能影响后续分析的异常记录[^1]。这种做法不仅可以提升数据的质量,还能确保模型训练过程中的稳定性。 #### 数据分割策略 为了构建高效的机器学习或深度学习模型,在准备数据时应合理划分训练集、验证集以及测试集。这一操作有助于评估模型性能的同时防止过拟合现象的发生。具体而言,可采用随机抽样或其他特定算法完成上述三个子集合的创建工作,并考虑加入诸如数据增强等技术手段以扩充有限规模的数据量[^2]。 #### 教育类内容筛选标准 当涉及到教育领域内的文本资料整理时,则需特别注意保持各类难度层次间比例均衡的问题。比如FineWeb-edu项目就采用了设定最低评分门槛的方式——即只收录那些获得至少三颗星评价以上的网页链接;如此一来既涵盖了基础知识介绍同时也兼顾到了较为深入的专业探讨部分[^3]。 #### 多源融合优化方案 鉴于单一来源可能存在局限性,建议尝试整合来自不同渠道但均具备较高可信度的小型专门数据库形成综合版语料库。研究表明这样做有利于增强最终产物应对各种实际应用场景挑战的能力[^4]。此外还可以探索针对目标语言特性定制专属规则或者运用先进的自然语言处理技术来进行二次加工改进等工作流程环节的设计安排。 ```python import pandas as pd from sklearn.model_selection import train_test_split # 假设df是一个包含摘要数据的DataFrame对象 train_df, temp_df = train_test_split(df, test_size=0.3, random_state=42) val_df, test_df = train_test_split(temp_df, test_size=0.5, random_state=42) print(f"Training set size: {len(train_df)}") print(f"Validation set size: {len(val_df)}") print(f"Test set size: {len(test_df)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值