统计学---极端异常值的检测

来源:互联网 发布:苹果手机日志软件 编辑:程序博客网 时间:2024/05/16 23:52

你在整理统计公司人的收入情况,手一抖,不小心把某个人的月薪26249变成262490了,某个人的月薪16895变成1689.5了。于是变成了如下的情况:

incomes=[25590, 23306, 26780, 29463, 22485, 262490, 24985, 1689.5, 17700, 18257, 24132, 21479, 19304, 16511, 18573, 26606, 20917, 19394, 24322, 28383, 16478, 29062, 23232, 17580, 26804, 28500, 25018, 24001, 27530, 27459, 22776, 19835, 16475, 15201, 28801, 19509, 19098, 17993, 15131, 26187, 25022, 27430, 19114, 18295, 25365, 23550, 20413, 19335, 21286, 22911]

有时候数据集中会包含一个或多个数值异常大或异常小的值,这样的极端值称为异常极端值(outlier)。这在现实数据集中是很有可能发生的,如数据录入错误、测量错误、试验错误、数据处理错误等。异常值的存在当然对数据统计产生很多不良的影响,例如降低数据统计的说服力和可信度。

因此,我们首先想到的是把异常值检测出来。这里就需要用到排序,利用排序,将数据从小到大进行排列。然后将数据进行等分。如果分成2部分,那这个数就是中位数。如果分为4部分,那这个数就叫四分位数。注意,这不是美式足球(橄榄球)中的四分位;四分位数不止一个,是3个,即通过3个四分位数将数据分为了4个数量上相等的部分。

这3个四分位数分别用Q1,Q2,Q3表示。你可能并不陌生,股票市场中,经常有Q1财报,Q2财报,Q3财报,Q4财报的说法,指的是四个季度的财报情况,一年4个季度,也是四等分。

那么,对于上面的数据,怎样计算Q1,Q2,Q3呢?可以利用pandas的describe函数。

import pandas as pdfour = pd.Series(data).describe()print(four)print('Q1= {0}, Q2= {1}, Q3={2}'.format(four['25%'],four['50%'],four['75%']))

输出结果:

count        50.000000mean      26835.150000std       34372.619505min        1689.50000025%       19102.00000050%       22843.50000075%       26037.750000max      262490.000000dtype: float64Q1= 19102.0, Q2= 22843.5, Q3= 26037.75

可以看出,pandas的describe函数不仅能得出数据集的样本数量,均值,标准差,最小值、最大值,以及3个四分位数,即在数据25%,50%,75%位置的数。我们通常把Q3-Q1的差值称为四分位距(interquartile range,IQR),或四分差

那什么是异常极端值呢,用如下计算公式:

Q1 = four['25%']Q3 = four['75%']IQR = Q3 - Q1upper = Q3 + 1.5 * IQRlower = Q1 - 1.5 * IQRprint(upper, lower)

输出结果:

36441.375 8698.375

高于upper或者低于lower的值都属于异常极端值。

画出图像如下:

incomes = pd.DataFrame(incomes)import seaborn as snsimport matplotlib.pyplot as pltsns.boxplot(data=incomes, palette="Set1")plt.show()

这里写图片描述
很容易发现标为黑色菱形的这2个极端值。那这个计算极端值的1.5是怎么得来的呢,这是统计学中经过大量分析和经验积累得出的标准,一般情况不做调整。

原创粉丝点击