本文是对于检测和解决数据集中的异样值,次要蕴含以下四局部内容:
- 什么是异样值?
- 为什么检测异样值很重要?
- 如何检测异样值?
- 如何解决异样值?
什么是异样值?
异样值是与其余察看后果显着不同的数据点。如下图所示,橙色数据点与个别散布相去甚远。咱们将此点称为异样值。
为什么检测异样值很重要?
在数据迷信我的项目、统计分析、机器学习利用中检测异样值十分重要:
- 异样值会导致散布偏斜。
- 异样值会重大影响数据集的均值和标准差。这些可能会在统计上给出谬误的后果。
- 可能导致偏差或影响预计。
- 大多数机器学习算法在存在异样值的状况下都不能很好地工作。
- 异样值在欺诈检测等异样检测中十分有用,其中欺诈交易与失常交易十分不同。
特地是在线性问题中,异样值更能显示出它们的影响。例如上面的例子;右边的图片中当 x 变量的值减少时,y 变量的值减小。然而因为异样值,察看到随着变量 x 的值减少,变量 y 的值也减少。异样值扭曲了咱们的剖析后果。
在下面的示例中,如果从数据集中移除异样值,能够取得更精确、不会被误导的测试后果。
如何检测异样值?
能够通过许多不同的形式检测异样值。上面总结了一些罕用的办法:
- 畛域的常识
- 标准差法
- Z-Score 法
- 箱线图(四分位距 – IQR)法
畛域的常识
借助行业常识,能够理解数据集中的哪个察看后果可能是异样值。例如; 假如一名房地产经纪人,均匀屋宇租金为 700 美元。如果屋宇租金为 5000 美元,就能够说这是一个异样值。
标准差法
在统计学中,标准偏差是掂量一组值的变动量或离散度的量度。低标准差示意这些值趋向于靠近汇合的平均值,而高标准差示意这些值散布在更宽的范畴内。
正态分布如下图所示。在正态分布中,数据应该在一个小范畴的值内,高值和低值的异样值较少。
如图上图所示,
- 68.27% 的值在平均值的 +1、-1 标准差范畴内,
- 95.45% 的值在平均值的 +2、-2 标准差范畴内,
- 99.73 % 的值在平均值的 +3、-3 标准差范畴内。
在正态分布中,预计咱们的数据应该远离平均值 -3、+3 个标准差。因而,有了这些信息,能够指定上限和下限;
Lower Limit = Mean - 3 * Standart Deviation
Upper Limit = Mean + 3 * Standart Deviation
Z-Score 法
Z-Score 也称为标准分数。该分数有助于理解数据点与平均值之间的标准差。Z-Score 是测量单位,它通知咱们数据点与平均值的间隔。例如:数据点 A 与平均值相差 2 个标准差。这个 2 就是 Z -Score。
Z score = (x -mean) / std. deviation
那么如何确定异样值的阈值呢?
上面再次查看正态分布以确定阈值。让咱们看一下标准偏差办法局部中的正态分布图。正如上背后提到的,99.7% 的数据在正态分布的 -3、+3 标准差范畴内,因而咱们能够将超出此范畴的数据点视为异样值。
如果下面语言比拟难懂,用上面代码进行演示可能会更加直观:
# Suppose we have a dataset that represents number of siblings.
data = [1, 2, 2, 3, 4, 1, 1, 15, 2, 4, 3, 2, 1, 1, 2]
# In this data set we want to find outliers. Firstly we calculate Z-Score for them.
import numpy as np
mean = np.mean(data) # Find mean
std = np.std(data) # Find standart deviation
upper_limit = 3
lower_limit = -3
outlier = []
for i in data:
# Find Z-Score
z = (i-mean)/std
print(f'Z-Score of {i} = {z}')
# Check z value is within or not in our range
if (lower_limit > z) or (z > upper_limit):
outlier.append(i)
print('Outlier in dataset is', outlier)s
后果如下:
箱线图(四分位距 – IQR)法
在统计学中,四分位距 (IQR) 形容了从最低到最高排序的两头 50% 的数据。要找到 IQR,须要先将数据从最低到最高排序。而后将数据分成 4 个相等的局部,并指定 Q1、Q2、Q3 称为第一、第二和第三四分位数。IQR 是 Q3 和 Q1 之间的差。咱们 50% 的数据介于这些四分位数之间。
上图中:
- Q1 代表数据的第 25 个百分位。
- Q2 代表数据的第 50 个百分位。
- Q3 代表数据的第 75 个百分位。
例如咱们有这样的数据:[1, 2, 2, 4, 5, 15, 6, 7, 8, 9, 10, 11, 17, 24, 33],咱们想要找到 IQR。首先对这个数组进行排序;[1、2、2、4、5、6、7、8、9、10、11、15、17、24、33],而后咱们找到四分位数;
Q1 25th , 4.5
Q2 50th , 8.0
Q3 75th , 13.0
计算 IQR
IQR = Q3 - Q1
当初应用箱线图法用 IQR 值计算下限和上限
Lower Limit = Q1 - 1.5 * IQR
Upper Limit = Q3 + 1.5 * IQR
之后,如果数据低于上限或高于下限,就能够将此数据点称为异样值。
如何解决异样值?
异样值可能是因为数据的外在可变性产生的,所以应该应用一些剖析仔细检查这种类型的异样值,另外的一些异样值可能是试验谬误或数据输出谬误等产生的,这些异样值是能够间接删除的。
删除值
如果异样值是因为输出或测量数据不正确,无奈取得异样值的实在值,咱们能够去除异样值。
例如在一个记录人们身高的数据集中,遇到了一个 1.8 厘米的数据。咱们晓得这在物理上是不可能的。可能实在身高 180 厘米、1.8 米或 185 厘米,但因为咱们不晓得是哪一个,所以能够将异样值删除。
批改值
如果蕴含异样值的行中的其余列蕴含重要信息,可能删除该行不是一个很好的抉择,所以能够将异样值替换为阈值或中值(异样值对中值影响不大)。
异样值的对数转换
对数转换,就是将每个变量 x 都替换为 log(x),其中对数的基数被认为是常见的应用基数 10、基数 2 和自然对数 ln。
而对数转换与异样值有什么关系呢?
当异样值是因为数据的外在可变性引起的,咱们可能不想删除或替换它们。因为这些是咱们可能须要的数据。然而因为这些异样值,咱们无奈取得正态分布,失去的是偏态散布。例如,一个蕴含人们支出数据的数据集。尽管大多数人的支出在 30k 到 100k 之间,但有些人赚了数十亿美元。当可视化这样一个数据集时,察看到的散布向右歪斜。
在这种状况下,对数转换能够帮忙咱们。对数变换不再强调异样值并容许咱们潜在地取得正态分布。在上图中的 X 轴上利用对数函数,则偏态散布靠近正态分布。
在利用对数转换之前,应该须要再次思考下是否须要,因为如果每个变量之间的间隔很重要,那么取变量的对数会使间隔歪斜,可能产生更大的问题。
应用其余模型
咱们能够应用基于树的办法,如随机森林、决策树,因为树型办法只思考值得宰割点,而不思考两个值之间得间隔,所以相比于线性模型受异样值影响较小。
总结
本文介绍了异样值的相干常识,还有如果检测、解决异样值,在浏览完本文当前,心愿你对异样值有一个大略的理解,并且可能检测和解决个别状况下遇到的异样值。
https://www.overfit.cn/post/151694f1b1194e6197e8da22c981be7c
作者:Mert Yüksek