异常值检测算法--箱线图四分位检测异常值

算法

首先,给大家讲下什么叫四分位数。顾名思义,就是把一堆数据排序会分成四份,找出其中的那三个点。中间那个叫中位数,下面那个叫下四分位数据,上面那个叫上四分位数。如下图:


image.png

中间的两个数是12和14,平均数13即为中位数。14以上的数字,最中间的数字是20即为上四分位数。12以下中间的数字是4即为下四分位数。

当然,也是更严谨的计算方法。对样本数据或者全部数据线性回归,找出概率密度函数。反函数y=0.5对应的x值为中位数,y=0.25对应的x值为下四分位数,y=0.75对应的x值为上四分位数

箱体图

image.png

案例

和3σ原则相比,箱线图依据实际数据绘制,真实、直观地表现出了数据分布的本来面貌,且没有对数据作任何限制性要求(3σ原则要求数据服从正态分布或近似服从正态分布),其判断异常值的标准以四分位数和四分位距为基础。四分位数给出了数据分布的中心、散布和形状的某种指示,具有一定的鲁棒性,即25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值通常不能对这个标准施加影响。鉴于此,箱线图识别异常值的结果比较客观,因此在识别异常值方面具有一定的优越性。
  箱型图提供了识别异常值的一个标准,即异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。其中,QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。

# 定义箱线图识别异常值函数
def box_plot(Ser):
    '''
    Ser:进行异常值分析的DataFrame的某一列
    '''
    Low = Ser.quantile(0.25)-1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    Up = Ser.quantile(0.75)+1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    index = (Ser< Low) | (Ser>Up)
    Outlier = Ser.loc[index]
    return(Outlier)

box_plot(df['counts']).head(8)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数...
    HeartGo阅读 10,604评论 0 6
  • 数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础,没有...
    冰度猎魂阅读 8,683评论 0 1
  • 统计学是人工智能的基础知识,也是投资领域的核心技能。 描述统计学即对大量信息进行归纳。数据越多,事实越模糊,所以需...
    Doraay阅读 5,709评论 0 1
  • 《深入浅出统计学》读书笔记 1、信息图形化 饼图 对不同组(或者类)所占的比例进行比较 条形图 对大小进行比较,但...
    haidaozheng阅读 10,542评论 0 6
  • 离别军营意难平,不曲已成音。当年书生意气,封侯笑傲群英。 思往事,建功名,万里行。从此梦里,沙场点兵,再荡豪情。
    寂寞江湖阅读 2,593评论 1 2