4.6 识别异常值
问题描述
识别样本中的一些极端观察值(异常值)。
解决方案
与其说识别异常值(outlier)是一门技术,不如说它是一门艺术。常用的方法是假设数据是正态分布的,基于这个假设,在数据周围“画”一个椭圆,将所有处于椭圆内的观察值视为正常值(标注为1),将所有处于椭圆外的观察值视为异常值(标注为-1):
这个方法的一个主要限制是它需要指定一个contamination(污染指数)参数,表示异常值在观察值中的比例——这个值我们也不知道是多少。
可以将contamination视为你估计的数据的清洁程度。如果你认为数据中只有很少几个异常值,可以将contamination设置得小一点。反之,如果数据中很有可能有好几个异常值,就将contamination设置为一个更大的值。
除了查看所有观察值,我们还可以只查看某些特征,并使用四分位差(interqutile range, IQR)来识别这些特征的极端值。
IQR是数据集的第1个四分位数和第3个四分位数之差。可以将IQR视为数据集中大部分数据的延展距离,而异常值会远远地偏离数据较为集中的区域。异常值常常被定义为比第1个四分位数小1.5 IQR(即IQR的1.5倍)的值,或比第3个四分位数大1.5 IQR的值。
讨论
实际上没有一个通用的识别异常值的解决方案。每一种技术都有它的优点和缺点。最好的策略是尝试多种技术(比如EllipticEnvelope和基于IQR的识别)并从整体上来看结果。
如果可能的话,你应该仔细看一看被识别为异常值的观察值,并尝试去解释它们。例如,假设你有一个关于房子的数据集,其中一个特征是房间数。如果一个房子拥有100个房间,那么这个房子真的是一个异常值,还是说它实际上是旅馆而被错误地划归为异常值了呢?
延伸阅读
● 三种识别异常值的方法(以及本书用到的IQR函数的源代码)(http://bit.ly/2FzMC2k)
本书评论