Boxplot是一个常用的了解数据分布的工具,在数据预处理阶段也常用boxplot剔除离群点,但是当数据是一个偏态分布的时候,boxplot将许多点误分类为离群点。《AN ADJUSTED BOXPLOT FOR SKEWED
DISTRIBUTIONS》是一篇经典的修正boxplot在偏态分布数据上的误报问题的文章。
1. 传统boxplot方法
对于一组数据Xn={x1,x2,x3,...,xn},计算Q1(第一四分位数), Q3(第三四分位数), IQR(四分位距),然后得到Tukey bound:
[Q1−1.5∗IQR,Q3+1.5∗IQR]
boxplot 方法认为落在tukey bound外的数据为离群值。
缺点:该上下界是基于数据时对称分布得到的,当数据是偏态分布时tukey bound表现得并不好。
2. 通用的boxplot方法
medcouple
medcouple(MC)是一个健壮的,用于描述连续单变量分布(F)偏度的统计量:
MC(F)=xi<mF<xjmedianh(xi,xj)
mF是F的中值,xi,xj是F中的样本,核函数h(x)定义如下:
h(xi,xj)=xj−xi(xj−mF)−(mF−xi)
MC取值在[-1,1],MC>0分布右偏,MC<0分布左偏。对于对称分布,MC=0。
boxplot修正
接下来利用MC对tukey bound进行偏态修正,这里引入修正函数$h_l(MC)$
和hr(MC):
[Q1−hl(MC)∗IQR,Q3+hr(MC)∗IQR]
这里需要满足hl(0)=hr(0)=0,以保证和原始boxplot在对称分布数据中取得同样的效果。
然后作者研究了3种简单的,不需要太多参数的关于修正函数的模型:
- 线性模型:hl(MC)=1.5+a∗MC, hr(MC)=1.5+b∗MC
- 二次多项式模型:hl(MC)=1.5+a1∗MC+a2∗MC2, hr(MC)=1.5+b1∗MC+b2∗MC2
- 指数模型:hl(MC)=1.5∗ea∗MC, hr(MC)=1.5∗eb∗MC
为了求上述模型中的常数,我们要求离群值的期望百分比为0.7%,这与正态分布下原箱线图的离群值百分比一致。
以线性模型举例,常数a,b应该满足Q1−(1.5+a∗MC)∗IQR=Qα,Q3+(1.5+b∗MC)∗IQR=Qβ,其中Qp表示分布中的第p分位数,α=0.0035,β=0.9965。线性模型的修正函数可以改写为:IQRQ1−Qα−1.5=a∗MC和IQRQβ−Q3−1.5=b∗MC,然后可以用无截距的线性回归估计常数a和b。
二次模型和指数模型也可以利用同样的推导方法进行估计。例如,对于指数模型,经过转换,得到下面的线性形式:
ln(32IQRQ1−Qα)=a∗MCln(32IQRQβ−Q3)=b∗MC
然后,作者从Γ,χ2,F,Pareto,Gg分布族中衍生出12605个分布的数据,用于训练出参数a,b。分布选取不极端倾斜的分布(保证medcouple<=0.6,因为很难找到简单的模型解决极端分布的情况),每个分布生成了10000个观测值。最终结果如下(这里只考虑对称和右偏的分布,y轴为ln(32IQRQβ−Q3)):

可以看到指数模型拟合效果最好。
最终修正后的上下界为:
[Q1−1.5∗e−3.5∗MC∗IQR,Q3+1.5∗e4∗MC∗IQR]
3. 总结
本文提出了一种进行偏度调整后的boxplot法,减弱了分布偏度的影响,在异常处理时是个不错的选择。
参考
[1] <AN ADJUSTED BOXPLOT FOR SKEWED DISTRIBUTIONS>