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

最后

实践起来吧!

怎样检测和应对数据集的Outliers相关推荐

  1. 深度学习和目标检测系列教程 3-300:了解常见的目标检测的开源数据集

    @Author:Runsen 计算机视觉中具有挑战性的主题之一,对象检测,可帮助组织借助数字图片作为输入来理解和识别实时对象.大量的论文基于常见的目标检测的开源数据集而来,因此需要了解常见的目标检测的 ...

  2. Rail-5k:一个用于轨道表面缺陷检测的真实数据集

    Rail-5k:一个用于轨道表面缺陷检测的真实数据集 文章目录 Rail-5k:一个用于轨道表面缺陷检测的真实数据集 摘要 1 介绍 2 相关工作 2.1自然图像数据集 2.2合成缺陷数据集 2.3铁 ...

  3. YOLO v5 实现目标检测(参考数据集自制数据集)

    YOLO v5 实现目标检测(参考数据集&自制数据集) Author: Labyrinthine Leo   Init_time: 2020.10.26 GitHub: https://git ...

  4. 基于Python,OpenCV,Numpy和Albumentations实现目标检测的合成数据集

    1.总述 训练一个对象检测模型,如YOLOv5,需要一个包含感兴趣对象的图像和注释(带有对象边界框坐标的文本文件)的数据集. 例如,在下面的图片中,你可以看到可视化的边界框.每个边界框表示与特定类别相 ...

  5. 基于Python,OpenCV,Numpy和Albumentations实现关键点检测的合成数据集

    1.概述 训练关键点检测模型,如 Keypoint RCNN,需要一个数据集,其中包含具有感兴趣对象和标注的图像(具有对象关键点和边界框坐标的文本文件). 例如,在下图中,您可以看到可视化的关键点和边 ...

  6. 用于欺诈检测的综合金融数据集

    原文: Synthetic Financial Datasets For Fraud Detection Synthetic datasets generated by the PaySim mobi ...

  7. 深度学习目标检测YOLO对于数据集的要求

    文章目录 前言 一.目标检测对训练数据集的要求 前言 提示:之前在做深度学习的时候,发现如果想要训练自己的数据集,那么数据集的准备对检测结果有很大的影响.刚好最近看YOLO的帮助文档,发现有一些对数据 ...

  8. 实战:使用yolov3完成肺结节检测(Luna16数据集)及肺实质分割

    实战:使用yolov3完成肺结节检测(Luna16数据集) yolov3是一个比较常用的端到端的目标检测深度学习模型,这里加以应用,实现肺结节检测.由于Luna16数据集是三维的,需要对其进行切片操作 ...

  9. 目标检测系列(preface) 数据集DataSets

    目标检测系列(Preface) - 数据集 公开数据集(PASCAL VOC // COCO)介绍 一.PASCAL VOC格式数据集 官网 标注工具 1.数据集一般格式 VOC2007 Annota ...

  10. 小尺寸太阳能电池板损伤检测可见光图像数据集(1k多张,voc标签)

    示例图像1: 标签: <annotation>    <folder>DATA_WIND_FULL</folder>    <filename>sola ...

最新文章

  1. docker 删除容器_Docker (二) Windows10专业版安装教程
  2. IOS UINavigationController use
  3. hiho #1044 : 状态压缩·一
  4. 重磅!GitHub 开源负载均衡组件 GLB Director
  5. 如果从SVN到GIT
  6. 最新光子计算处理器面世:单个光子芯片集成超万个光子器件,频率达1GHz
  7. python编程(类变量和实例变量)
  8. 物联网大战打响,6 岁的涂鸦智能这样突出重围!
  9. FlashMX2004组件事件简单调试器
  10. 实习生的一点建议和感悟
  11. linux tar zcxf,tar/gzip/zip文件打包、压缩命令
  12. 用PS制作燃烧的火焰人物
  13. FPGA串口之RS-485
  14. conda install安装不了任何包,一直下载一直错
  15. 关于serverlet
  16. 斐波那契数列重要不等式证明
  17. 自定义ViewGroup之仿奥运五环的实现
  18. suse和linux区别,大家一起讨论讨论,suse和ubuntu的区别,顺便散散分
  19. 坚持每天工作学习一小时
  20. 联想win8改win7

热门文章

  1. reinterpret_cast、static_cast、dynamic_cast和const_cast,区别
  2. 共读四步法:看见正向核心的力量—欣赏式探询共读会
  3. Krpano元素的一些解析
  4. windows性能监控Perfmon
  5. Lvm linux磁盘分区管理(多个分区合并成一个)
  6. MySQL创建触发器的时候报1419错误( 1419 - You do not have the SUPER privilege and binary logging is enabled )
  7. Unity利用JsonFX解析Json格式文本
  8. AltiumDesigner快捷键——SCH和SCHLIB编辑快捷键
  9. 对新手严重不友好的强者——Nginx那些俯拾皆是的坑
  10. sql语句date函数