美文网首页
异常值检测算法--3sigma模型和置信空间

异常值检测算法--3sigma模型和置信空间

作者: 王金松 | 来源:发表于2019-05-19 20:44 被阅读0次

    背景

    flow数据对外连接统计,用于检测异常,一般情况下超过一个阈值(threshold),那我们就可以粗略的认为这是一个异常数据
    那阈值怎么定义:
    第一:通过经验值,比如设置threshold>1000
    第二:假设每次事件都是独立的且没有上下文关联,我们可以采用3sigma模型来检测

    算法

    数据需要服从正态分布。在3∂原则下,异常值如超过3倍标准差,那么可以将其视为异常值。正负3∂的概率是99.7%,那么距离平均值3∂之外的值出现的概率为P(|x-u| 3∂) = 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。
    3∂的概率为0.3%
    2∂的概率为5%
    检测这一段时间的统计数据,假如符合正态分布,计算均值与方差。如果后来的统计值不在这个范围3sigma范围内,就可以认为这个值是异常值。

    image

    置信度和置信区间

    案例

    3σ原则又称为拉依达准则,该准则具体来说,就是先假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。
      正态分布状况下,数值分布表:


    image.png

    code

    import pandas as pd
    import numpy as np
    
    # 定义3σ法则识别异常值函数
    def three_sigma(Ser1):
        '''
        Ser1:表示传入DataFrame的某一列。
        '''
        rule = (Ser1.mean()-3*Ser1.std()>Ser1) | (Ser1.mean()+3*Ser1.std()< Ser1)
        index = np.arange(Ser1.shape[0])[rule]
        outrange = Ser1.iloc[index]
        return outrange
    # 导入数据并调用three_sigma
    df = pd.read_csv('./data.csv',encoding= 'gbk')
    three_sigma(df['counts']).head()
    

    相关文章

      网友评论

          本文标题:异常值检测算法--3sigma模型和置信空间

          本文链接:https://www.haomeiwen.com/subject/hmgqzqtx.html