Python 之 异常值/离群值的处理

离群值

Python 之 异常值/离群值的处理_第1张图片

离群值是指与集合中其他观测值差异较大的任何数据点。

例如:

当一个学生的平均成绩在90%以上,而其他小组的成绩在70%,就会出现明显的离群现象。
通过分析某个客户的购买模式,突然出现了一个非常高价值的购买(如10万)。虽然某客户的交易额大多在1万左右波动。不管是什么原因,10万的购买量在整体数据中都是一个异数。
乌塞恩-博尔特--记录短跑绝对是排放当大多数运动员被考虑。
异常值存在的原因有很多。有可能是分析人员在输入数据时出错,也有可能是设备产生了测量误差,甚至有可能是故意离群。

如果有离群值/异常值,数据分布会有重尾。

离群有两种类型:一维和多维。

一维离群是指仅由一个变量的极端值组成的数据点,而多维离群/异常是指至少两个变量的综合异常值。假设我们有三个不同的变量--X,Y,Z。如果我们将这些变量绘制在三维空间中,就会形成一种云。所有位于在这之外的数据点都将是多维度的排放。

Python 之 异常值/离群值的处理_第2张图片

异常/离群值会严重影响分析和统计建模的结果。

Python 之 异常值/离群值的处理_第3张图片

大多数参数统计,如平均数、标准差和相关性,以及基于这些参数的任何统计,对离群值都非常敏感。

单纯地消除离群并不总是一个好主意。离群/异常值可以是相当合理的观察,有时也是最有趣的观察。在作出决定之前,必须研究离群值的性质。

如果某项异常值显然是由于输入或测量的数据不正确造成的,则应将其删除。
如果离群/异常值不改变结果,但影响假设,则可删除离群/异常值。不过,报告中值得注意的是这一点。你也可以建立一个有这个版本和没有这个版本的模型,看看结果。

如何查找离群/异常值情况?
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()

 

Python 之 异常值/离群值的处理_第4张图片

 Box-plot

import seaborn as sns
sns.boxplot(x=boston_df['INDUS']);

Python 之 异常值/离群值的处理_第5张图片

剖析框图

Python 之 异常值/离群值的处理_第6张图片

sns.boxplot(x=boston_df['PTRATIO']);

Python 之 异常值/离群值的处理_第7张图片

sns.boxplot(x=boston_df['DIS']);

Python 之 异常值/离群值的处理_第8张图片

最后一张图显示的是10和12之间的三个辍学点,不包括在方框内的其他观察点,即公寓之间。

Scatter-plot

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();

Python 之 异常值/离群值的处理_第9张图片

你可以清晰地看到云外的点。

Z-Score

Z-Score是指观测点或数据的值超过观测值或测量值平均值的标准差的符号数。

from scipy import stats
import numpy as np
z = np.abs(stats.zscore(boston_df))
print(z)

Python 之 异常值/离群值的处理_第10张图片

threshold = 3
print(np.where(z > 3))

Python 之 异常值/离群值的处理_第11张图片

print(z[55][1])
3.375038763517309

例如,ZN中的第55个观测值(划为25,000平方英尺以上地段的住宅用地比例)就是一种离群。

IQR score

四分位数范围(IQR),又称平均数或50%平均数,或技术上称为H-spread,是衡量统计学分散度的指标,等于75%和25%之间的差值,或上四分位数和下四分位数之间的差值,IQR=Q3 - Q1。百度百科解释

Python 之 异常值/离群值的处理_第12张图片

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]

在ModelTestingTemplate中的影响措施。

聚类/分类。
1.K-means
2.隔离林

 


离群值/异常值怎么办?
识别异常值--分析有无异常值的结果模型--做出结论。
如果你确定数值是错误的,就修正它。
如果离群值不在利益分配范围内,则删除。
考虑到数据的差距。
使用抗离群值的统计工具,例如,稳健回归(用另一种参数估计方法)Robust_regression。
离群值的常见原因是两种分布的混合,可能是两个不同的子人群,也可能表明 "测量正确 "和 "测量误差";这通常是由混合模型来建模。 (Mixture model).

 

你可能感兴趣的:(Python)