离群值
离群值是指与集合中其他观测值差异较大的任何数据点。
例如:
当一个学生的平均成绩在90%以上,而其他小组的成绩在70%,就会出现明显的离群现象。
通过分析某个客户的购买模式,突然出现了一个非常高价值的购买(如10万)。虽然某客户的交易额大多在1万左右波动。不管是什么原因,10万的购买量在整体数据中都是一个异数。
乌塞恩-博尔特--记录短跑绝对是排放当大多数运动员被考虑。
异常值存在的原因有很多。有可能是分析人员在输入数据时出错,也有可能是设备产生了测量误差,甚至有可能是故意离群。
如果有离群值/异常值,数据分布会有重尾。
离群有两种类型:一维和多维。
一维离群是指仅由一个变量的极端值组成的数据点,而多维离群/异常是指至少两个变量的综合异常值。假设我们有三个不同的变量--X,Y,Z。如果我们将这些变量绘制在三维空间中,就会形成一种云。所有位于在这之外的数据点都将是多维度的排放。
异常/离群值会严重影响分析和统计建模的结果。
大多数参数统计,如平均数、标准差和相关性,以及基于这些参数的任何统计,对离群值都非常敏感。
单纯地消除离群并不总是一个好主意。离群/异常值可以是相当合理的观察,有时也是最有趣的观察。在作出决定之前,必须研究离群值的性质。
如果某项异常值显然是由于输入或测量的数据不正确造成的,则应将其删除。
如果离群/异常值不改变结果,但影响假设,则可删除离群/异常值。不过,报告中值得注意的是这一点。你也可以建立一个有这个版本和没有这个版本的模型,看看结果。
如何查找离群/异常值情况?
1.通过可视化
2.通过数学计算
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_boston
boston = load_boston()
x = boston.data
y = boston.target
columns = boston.feature_names
#create the dataframe
boston_df = pd.DataFrame(x)
boston_df.columns = columns
boston_df.head()
import seaborn as sns
sns.boxplot(x=boston_df['INDUS']);
剖析框图
sns.boxplot(x=boston_df['PTRATIO']);
sns.boxplot(x=boston_df['DIS']);
最后一张图显示的是10和12之间的三个辍学点,不包括在方框内的其他观察点,即公寓之间。
fig, ax = plt.subplots(figsize=(16,8))
ax.scatter(boston_df['INDUS'], boston_df['TAX'])
ax.set_xlabel('Proportion of non-retail business acres per town')
ax.set_ylabel('Full-value property-tax rate per $10,000')
plt.show();
你可以清晰地看到云外的点。
Z-Score是指观测点或数据的值超过观测值或测量值平均值的标准差的符号数。
from scipy import stats
import numpy as np
z = np.abs(stats.zscore(boston_df))
print(z)
threshold = 3
print(np.where(z > 3))
print(z[55][1])
3.375038763517309
例如,ZN中的第55个观测值(划为25,000平方英尺以上地段的住宅用地比例)就是一种离群。
四分位数范围(IQR),又称平均数或50%平均数,或技术上称为H-spread,是衡量统计学分散度的指标,等于75%和25%之间的差值,或上四分位数和下四分位数之间的差值,IQR=Q3 - Q1。百度百科解释
Q1 = boston_df.quantile(0.25)
Q3 = boston_df.quantile(0.75)
IQR = Q3 - Q1
print(IQR)
CRIM 3.565378 ZN 12.500000 INDUS 12.910000 CHAS 0.000000 NOX 0.175000 RM 0.738000 AGE 49.050000 DIS 3.088250 RAD 20.000000 TAX 387.000000 PTRATIO 2.800000 B 20.847500 LSTAT 10.005000 dtype: float64
既然我们现在有了IQR估计,那么我们就选择离群值。下面的代码将产生带有真值和假值的结果。带有False的数据点表示这些值是有效的,而True则表示有释放。
print((boston_df < (Q1 - 1.5 * IQR)) | (boston_df > (Q3 + 1.5 * IQR)))
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \ 0 False False False False False False False False False False 1 False False False False False False False False False False 2 False False False False False False False False False False 3 False False False False False False False False False False 4 False False False False False False False False False False 5 False False False False False False False False False False 6 False False False False False False False False False False 7 False False False False False False False False False False 8 False False False False False False False False False False 9 False False False False False False False False False False 10 False False False False False False False False False False 11 False False False False False False False False False False 12 False False False False False False False False False False 13 False False False False False False False False False False 14 False False False False False False False False False False 15 False False False False False False False False False False 16 False False False False False False False False False False 17 False False False False False False False False False False 18 False False False False False False False False False False 19 False False False False False False False False False False 20 False False False False False False False False False False 21 False False False False False False False False False False 22 False False False False False False False False False False 23 False False False False False False False False False False 24 False False False False False False False False False False 25 False False False False False False False False False False 26 False False False False False False False False False False 27 False False False False False False False False False False 28 False False False False False False False False False False 29 False False False False False False False False False False .. ... ... ... ... ... ... ... ... ... ... 476 False False False False False False False False False False 477 True False False False False False False False False False 478 True False False False False False False False False False 479 True False False False False False False False False False 480 False False False False False False False False False False 481 False False False False False False False False False False 482 False False False False False False False False False False 483 False False False False False False False False False False 484 False False False False False False False False False False 485 False False False False False False False False False False 486 False False False False False False False False False False 487 False False False False False False False False False False 488 False False False False False False False False False False 489 False False False False False False False False False False 490 False False False False False False False False False False 491 False False False False False False False False False False 492 False False False False False False False False False False 493 False False False False False False False False False False 494 False False False False False False False False False False 495 False False False False False False False False False False 496 False False False False False False False False False False 497 False False False False False False False False False False 498 False False False False False False False False False False 499 False False False False False False False False False False 500 False False False False False False False False False False 501 False False False False False False False False False False 502 False False False False False False False False False False 503 False False False False False False False False False False 504 False False False False False False False False False False 505 False False False False False False False False False False PTRATIO B LSTAT 0 False False False 1 False False False 2 False False False 3 False False False 4 False False False 5 False False False 6 False False False 7 False False False 8 False False False 9 False False False 10 False False False 11 False False False 12 False False False 13 False False False 14 False False False 15 False False False 16 False False False 17 False False False 18 False True False 19 False False False 20 False False False 21 False False False 22 False False False 23 False False False 24 False False False 25 False True False 26 False False False 27 False True False 28 False False False 29 False False False .. ... ... ... 476 False False False 477 False False False 478 False False False 479 False False False 480 False False False 481 False False False 482 False False False 483 False False False 484 False False False 485 False False False 486 False False False 487 False False False 488 False False False 489 False True False 490 False True False 491 False False False 492 False False False 493 False False False 494 False False False 495 False False False 496 False False False 497 False False False 498 False False False 499 False False False 500 False False False 501 False False False 502 False False False 503 False False False 504 False False False 505 False False False [506 rows x 13 columns]
聚类/分类。
1.K-means
2.隔离林
离群值/异常值怎么办?
识别异常值--分析有无异常值的结果模型--做出结论。
如果你确定数值是错误的,就修正它。
如果离群值不在利益分配范围内,则删除。
考虑到数据的差距。
使用抗离群值的统计工具,例如,稳健回归(用另一种参数估计方法)Robust_regression。
离群值的常见原因是两种分布的混合,可能是两个不同的子人群,也可能表明 "测量正确 "和 "测量误差";这通常是由混合模型来建模。 (Mixture model).