精华内容
下载资源
问答
  • 2020-03-15 18:31:38

    数据缺失

    一、缺失值产生的原因

    缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。

    二、缺失值的类型

    缺失值从缺失的分布来讲可以分为完全随机缺失,随机缺失和完全非随机缺失。完全随机缺失(missing completely at random,MCAR)指的是数据的缺失是随机的,数据的缺失不依赖于任何不完全变量或完全变量。随机缺失(missing at random,MAR)指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。完全非随机缺失(missing not at random,MNAR)指的是数据的缺失依赖于不完全变量自身。

    从缺失值的所属属性上讲,如果所有的缺失值都是同一属性,那么这种缺失成为单值缺失,如果缺失值属于不同的属性,称为任意缺失。另外对于时间序列类的数据,可能存在随着时间的缺失,这种缺失称为单调缺失。

    三、缺失值的处理方法

    对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。对于主观数据,人将影响数据的真实性,存在缺失值的样本的其他属性的真实值不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观数据一般不推荐插补的方法。插补主要是针对客观数据,它的可靠性有保证。

    1.删除含有缺失值的个案

    主要有简单删除法和权重法。简单删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。当缺失值的类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过logistic或probit回归求得。如果解释变量中存在对权重估计起决定行因素的变量,那么这种方法可以有效减小偏差。如果解释变量和权重并不相关,它并不能减小偏差。对于存在多个属性缺失的情况,就需要对不同属性的缺失组合赋不同的权重,这将大大增加计算的难度,降低预测的准确性,这时权重法并不理想。

    2.可能值插补缺失值

    它的思想来源是以最可能的值来插补缺失值比全部删除不完全样本所产生的信息丢失要少。在数据挖掘中,面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费,所以产生了以可能值对缺失值进行插补的思想与方法。常用的有如下几种方法。

    (1)均值插补。数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值。

    (2)利用同类均值插补。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。

    (3)极大似然估计(Max Likelihood ,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

    (4)多重插补(Multiple Imputation,MI)。多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

    多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

    假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。

    当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测即,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用 Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。

    上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。

    多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。

    (1)贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。

    (2)贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。

    以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。
    3.重复值检测

    四、小结

    插补处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实。以上的分析都是理论分析,对于缺失值由于它本身无法观测,也就不可能知道它的缺失所属类型,也就无从估计一个插补方法的插补效果。另外这些方法通用于各个领域,具有了普遍性,那么针对一个领域的专业的插补效果就不会很理想,正是因为这个原因,很多专业数据挖掘人员通过他们对行业的理解,手动对缺失值进行插补的效果反而可能比这些方法更好。缺失值的插补是在数据挖掘过程中为了不放弃大量的信息,而采用的人为干涉缺失值的情况,无论是那种处理方法都会影响变量间的相互关系,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的数据的信息系统,对以后的分析存在潜在的影响,所以对缺失值的处理一定要慎重。

    数据异常

    在数据分析工作中,我们面对的原始数据都是存在一些肮脏数据的,其中异常值就是肮脏数据中的一种。所以说,我们在进行数据分析工作的时候一定要对数据中的异常值进行处理,那么大家是否知道数据清洗中的异常值是如何清洗的吗?下面我们就给大家介绍一下如何处理数据清洗中的异常值。

    首先我们需要对异常值有个理解,一般来说,异常值通常被称为“离群点”,对于异常值的处理,通常使用的方法有很多种,第一就是简单的统计分析,第二就是使用3∂原则处理,第三就是箱型图分析,第四就是基于模型检测,第五就是基于距离检测,第六就是基于密度检测,第七就是基于聚类。下面我们就分别为大家介绍一下这些方法。

    首先给大家介绍一下简单的统计分析,当我们拿到数据后可以对数据进行一个简单的描述性统计分析,譬如最大最小值可以用来判断这个变量的取值是否超过了合理的范围,不合常理的为异常值。

    第二就是3∂原则,如果数据服从正态分布,在3∂原则下,异常值为一组测定值中与平均值的偏差超过3倍标准差的值。如果数据服从正态分布,距离平均值3∂之外的值出现的概率为P(|x-u| > 3∂) <= 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

    第三就是箱型图分析,一般来说,箱型图提供了识别异常值的一个标准:如果一个值小于QL01.5IQR或大于OU-1.5IQR的值,则被称为异常值。QL为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR为四分位数间距,是上四分位数QU与下四分位数QL的差值,包含了全部观察值的一半。一般来说,箱型图判断异常值的方法以四分位数和四分位距为基础,四分位数具有鲁棒性:25%的数据可以变得任意远并且不会干扰四分位数,所以异常值不能对这个标准施加影响。因此箱型图识别异常值比较客观,在识别异常值时有一定的优越性。

    在这篇文章中我们给大家介绍了关于数据清洗的相关方法,通过对这些方法的介绍我们不难发现这些方法都是十分经典的,由于篇幅原因我们就给大家介绍到这里了,在后面的文章中我们会继续为大家介绍数据清洗的方法。

    作者:CDA数据分析师培训 链接:https://www.jianshu.com/p/8692df30766e 来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    简要总结针对数据缺失、数据异常、数据冲突、数据维数过多、数据标准化的方法。

    数据缺失:
    主要是由于数据收集过程中人为、设备故障或是隐私数据不公开,再者是
    not applicable(不适用性NA)造成。缺失值从缺失的分布来讲可以分为完全随机缺失,随机缺失和完全非随机缺失。对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。删除缺失值主要有简单删除法和权重法。缺失值插补主要是针对客观数据,它的可靠性比较有保证。常用的有如下几种方法:1)均值插补2)利用同类均值插补3)极大似然估计(Max Likelihood ,ML)4)多重插补(Multiple Imputation,MI)。
    数据异常:
    一般来说,异常值通常被称为“离群点”,对于异常值的处理,通常使用的方法有很多种,第一就是简单的统计分析,第二就是使用3∂原则处理,第三就是箱型图分析,第四就是基于模型检测,第五就是基于距离检测(LOF方法计算相对距离,值越大是离群点的概率越大),第六就是基于密度检测,第七就是基于聚类,第八是利用关联规则:具有高度置信度和支持的关联规则定义了一种不同的模式。
    重复值检测:
    针对具体通数据不同领域和不同环境进行具体分析,消除重复记录可以针对两个数据集或者一个合并后的数据集,首先需要检测出标识同一个现实实体的重复记录,即匹配过程。检测重复记录的算法主要有:基本的字段匹配算法,递归的字段匹配算法,Smith—Waterman算法,Cosine相似度函数。 数据冲突:需要根据不同的数据冲突类型进行具体分析具体处理。
    数据冲突:
    (1)对于那些包含大量空值的列的数据冲突问题,为每一列计算该列中的空值所占的比例,并以此为依据来确定该列是否应该被删除。
    (2)对于那些只有几个单一-状态的列的数据问题,为每一列计算出该列的单值的个数,并以这些信息为依据来决定是否删除那些似乎没有用的列.
    (3)对于那些超出某列正态分布的记录的数据(极端数据)问题计算该列中极端数据(outlier)个数.并将那些极端数据所在的行标油出来然后决定如何处理它们
    (4)对于那些不符合特定格式的行可以通过格式转换将其转换为正确格式最好是在建业数据仓库时就将格式统一
    (5)对于那些与同记录的不同属性比较时就失去意义的列,通过计算列与列之间的各种关系(大于,小于,等于)的数量比例,查看那些数量较小的关系,然后根据列于列的含义决定。
    数据维数过多:
    解决思路:降维
    (1)主成分分析
    (2)随机森林
    数据标准化:
    规范化方法也叫离差标准化,是对原始数据的线性变换,使结果映射到[0,1]区间。
    1) 正规化方法这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。spss默认的标准化方法就是z-score标准化。
    2) 归一化方法。
    3) min-max标准化
    4) z-score 标准化
    5) 最小-最大-0-均值-小数定标

    更多相关内容
  • 摘要:异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总...

                       时序数据异常检测算法简述与分类

    摘要:异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法。

    关键词:异常检测,时序数据分析

     

    1 引言

        异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法。
     

    1.1 异常类型

        异常大致分为三种类型:点异常、上下文异常和集合异常。它们常见的表现形式如下:
    (1)点异常:离群点、孤立点、异常值;
    (2)上下文异常:值无异常,但在上下文环境中呈现异常(如时序数据);
    (3)集合异常:单点无异常,但子集相对于全集呈现异常;

     

    2 异常检测算法类别

        现有的异常检测算法大致可以分为以下四类:
    (1)基于统计的异常检测算法:通过历史同期的数据分布来确定当前数据的合理波动范围。例如基于3σ准则的异常检测算法。
    (2)基于预测的传统异常检测算法:比较预测值与真实值的差异,超出阈值则认为是异常点,例如ARIMA、指数平滑法。
    (3)直接异常检测算法:如LOF、孤立森林、One-class SVM算法等。
    (4)基于深度学习的异常检测算法:对数据降维再升维重构,不能良好复原的点认为是异常点。例如基于GAN,自编码器,变分自编码器等的异常检测算法。

     

    2.1 基于统计的异常检测算法


    1.  基于3σ准则的异常检测算法
        借助正态分布的优良性质,3σ准则常用来判定数据是否异常。由于正态分布关于均值μ对称,且数值分布在(μ-σ,u+σ)中的概率为0.6827,数值分布在(μ-3σ,u+3σ)中的概率为0.9973。即只有0.3%的数据会落在均值的±3σ之外,这是一个小概率事件。为了避免极端值影响到模型整体的鲁棒性,常将其判定为异常值并从数据中剔除。
        基于统计的异常检测算法优点为计算简单,缺点为要求数据分布近似正态,受异常点的影响较大。
    注:除了常见的正态分布,还存在幂律分布。在日常的数据分析中,订单数据和浏览数据都会呈现出近似幂律分布的状态,其特点为少数群体占有多数资源。

     

    2.2 基于预测的传统异常检测算法

    1.  ARIMA(p, d, q)数据预测模型
        ARIMA差分整合移动平均自回归模型,其中p为滞后值,d是非平稳序列转化为平稳序列所需的差分次数,q是预测误差的滞后值。AR模型描述的是当前值和历史值之间的关系。MA模型描述的是当前值与自回归部分误差累积的关系。对于非平稳序列,由于它的方差和均值不稳定,处理方法一般是将其转化成平稳序列。然后对它的滞后值以及随机误差值进行回顾来建立模型。 


    2. 指数平滑预测模型
        指数平滑兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。主要是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。

     

    2.3 直接异常检测算法

    1.  LOF局部离群因子检测法(基于密度)
        该算法为数据集中的每个点计算一个离群因子,通过判断其是否接近于1来判定该点是否为离群点。若离群因子远大于1,则该点为离群点,若接近于1,则为正常点。

    2.  孤立森林
        该算法基于集成学习,适用于连续数据的异常检测,通过多棵iTree形成森林来判定是否有异常点。


    3.  One-class SVM算法
        寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本。适用于已知样本绝大多数为正样本,仅有极少数为负样本的场景。它可以通过已知数据训练一个一类分类器,得到一个紧凑的分类边界,超出这个边界就认为是不合格产品。

     

    2.4 基于深度学习的异常检测算法

    1.  基于GAN网络的异常检测算法
        通过生成式对抗网络仅仅学习正常数据的数据分布,得到的模型G只能生成或者重建正常数据。将测试样本输入训练好的模型G,如果G经过重建后输出的数据和输入样本一样或者接近,表明测试的是正常数据,否则是异常数据。


    2.  基于AE(自编码器)的异常检测算法
        自编码器的输入层维度等于输出层维度,隐藏层维度小于输入层维度。通过自编码器学习数据分布最显著的特征,对原图进行重构并产生新图,新图与原图之间产生较大差异的点就是异常点。


    3.  基于VAE(变分自编码器)的异常检测算法
        使用训练数据训练好一个VAE,该VAE的encoder能够将输入数据X映射到隐变量Z,decoder将隐变量Z再映射回X。当训练好一个VAE之后,如果输入一个异常数据,该模型很大概率会将该异常数据重构成一个正常数据,因此我们就可以判别输入数据是否是一个正常数据。正常数据重构成正常数据的概率很高,而异常数据重构成异常数据的概率很低。
        AE与VAE的主要区别在于前者是一种没有概率基础的确定性判别模型,而后者是可以提供校准概率的随机生成模型。

     

    2.5 各类异常检测算法的优劣总结表


     

    3 不同异常检测算法的结合

        时间序列数据异常检测是指从正常的时间序列中识别不正常的事件或行为的过程,而由于时间序列数据具有周期性、趋势性、季节性、随机性,异常检测算法必须兼顾这些特性才能起到更好的检测效果,因此可以尝试不同类别异常检测算法组合,各取所长,从而提高检测的准确度。


    1.  基于预测与统计的时序数据异常检测
        该方法采用Prophet算法与3σ准则实现。在时间序列分析领域,有一种常见的分析方法叫做STL分解,它把时间序列分解为季节项(seasonal)、趋势项(trend)、残余项(residue)。即当t≥0时,满足下式:

                                                        

    而Prophet基于这种方法进行了必要的改进和优化,在上述三项的基础上又增加了节假日项,此时数据则满足下方的新公式:

                                                        

        其中g(t)为趋势项,表示时间序列在非周期上面的变化趋势;s(t)为周期项,或者称季节项,一般以周或者年为单位;h(t)为节假日项,表示在当天是否存在节假日;ϵt表示误差项或者称剩余项。Prophet 算法就是通过拟合这几项,然后进行累加就得到了时间序列的预测值。
        3σ准则借助历史的波动数据来估计并计算不同日期同一时刻的数值的标准差。
        最后,在Prophet预测上下界的基础上分别加减3σ得到数据波动的合理范围,当实际数据超过这个范围时则标注为异常数据。此算法训练快,效果好。


    2.  基于预测与直接异常检测的方法
        首先去除时间序列数据的趋势和周期性。用预测模型给出的预测值与真实值相减计算序列的残差,残差不包含周期性和趋势性,可以作为直接异常检测算法的输入。此算法效果较好,适用于离线、测试、生产三种场景。

     

    文末备注:本文是作者第一篇博客,如有不足之处,还请各位大佬海涵并提出修改意见,在下一定及时更正。内容来源于作者对百度和知乎上其他相关内容的汇总,涵盖了多数最基础的异常检测方法,如果各位有补充意见,请不吝赐教。谢谢大家的阅读!后续还会有其他关于异常检测的内容,愿与诸君共同进步!
     

    展开全文
  • 数据异常检测方法以及实际应用

    千次阅读 2019-05-28 20:35:17
    关于数据异常检测,看这一篇就够了 - 携程技术中心的文章 - 知乎 https://zhuanlan.zhihu.com/p/65023844 文章目录前言一、应用场景二、检测方法1、概率统计模型2、机器学习方法3、业务经验,逻辑规则4、判定...

    转载于:

    已获得作者同意转载

    关于数据的异常检测,看这一篇就够了 - 携程技术中心的文章 - 知乎
    https://zhuanlan.zhihu.com/p/65023844

    前言

    制造厂商需要抽样检测流水线上生产的产品,数据公司同样也需要对自己的数据产品质量进行把控。检测的目的无非是及时发现产品或数据中的异常,从而修正偏差改善产品质量。

    异常值在不同文献中有其不同的定义,通俗的说就是那些与其他观测值有显著偏差的观测点,有时也会称作是极端值、离群点或孤立点等,这些名词在数学的细分领域都有其不同的定义,这里不做区分。

    异常值产生的原因主要是数据生成机制的不同,异常值本身不是一个贬义词,异常观测也会涵盖有用的信息,帮助分析师理解数据的分布,保证线上流程的稳健性。

    一、应用场景

    异常检测与监控的应用场景多样,主要包括以下:

    1、ELT流程中的数据异常。ETL工程师在上层数据汇总过程中通常会考虑标记数据的极端值,比如单个用户的日pv数过千过万或单个用户周订单过百过千等,这将有助于数据分析师获取数据异常的先验信息。

    ELT用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。

    2、特征工程中的数据异常。分箱操作是特征工程中常用的一种异常处理方式,在线性模型中,将变量分箱离散化可将极端值圈定在某一固定的组别,不仅能消除极端值对模型鲁棒性的影响,也能在线性性基础上引入非线性性。

    3、AB测试中的数据异常。在计算转化率(随机变量服从0/1分布)时,个别的异常值不会影响AB测试的整体效果,但在计算人均订单数和人均pv数时,个别的极端值会对均值产生显著影响。

    AB测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。

    4、时序数据的监控。监控数据在时间维度上的异常情况,这里需要考虑时序数据的特性,比如趋势和周期等。

    5、欺诈检测。金融场景中的欺诈案例也属于异常数据,机器学习中有很多优秀的算法可用来支持欺诈检测。

    6、其他场景中的异常检测和监控不一一列举。

    二、检测方法

    1、概率统计模型

    概率给出总体的分布来推断样本性质,统计则从样本出发来验证总体分布的假设。所以概率统计模型需要我们去验证模型假设的正确性,比如概率分布是否正确,参数的设置是否合理。

    2、机器学习方法

    机器学习无外乎监督、非监督以及半监督学习方法等,比如常见的聚类,二分,回归。此类方法往往注重模型的泛化能力,而弱化概率统计中的假设检验。历史数据的异常如果已标注,那么二分类方法是适用的,但业务数据的异常大多没有显示的人工标注,无法应用监督学习。

    3、业务经验,逻辑规则

    业务经验的丰富以及对数据的敏感性能更加直接地帮助理解异常数据,在一些轻量级的任务中,配置简单的逻辑规则也能达到很好的检测效果。

    4、判定规则

    异常值的判定规则主要采用以下两种方式:

    a)区间判定

    给出一个阈值区间,实际观测落在区间之外则判定为异常。例如,在时间序列和回归分析中,预测值与真实值的残差序列便可构建这样一个区间。

    b)二分判定

    二分判定的前提是数据包含人工标注。异常值标注为1,正常值标注为0,通过机器学习方法给出观测为异常的概率。

    三、实际应用

    1、从3 Sigma准则说起

    借助正态分布的优良性质,3σ准则常用来判定数据是否异常。由于正态分布关于均值μ对称,数值分布在(μ-σ,μ+σ)中的概率为0.6827,数值分布在(μ-3σ,μ+3σ)中的概率为0.9973。也就是说只有0.3%的数据会落在均值的±3σ之外,这是一个小概率事件。为了避免极端值影响到模型整体的鲁棒性,常将其判定为异常值并从数据中剔除。

    正态分布的参数μ和σ极易受到个别异常值的影响,从而影响判定的有效性,因此又产生了Tukey箱型图法。

    第一四分位数 (Q1)、第二四分位数 (Q2,也叫“中位数”)和第三四分位数 (Q3)分别等于该样本中所有数值由小到大排列后第25%、第50%和第75%的数字。第三四分位数与第一四分位数的差距又称四分位距(interquartile range, IQR)。

    2、BOX-COX转化

    当原始数据的分布是有偏的,不满足正态分布时,可通过BOX-COX转化,在一定程度上修正分布的偏态。转换无需先验信息,但需要搜寻最优的参数λ。

    对于一个右偏数据,如下左图,λ取3.69时,转换后的数据分布近似一个正态分布,如下右图。严格地来说,在应用正态分布的性质之前,还需对转换后的数据做正态性检验。

    3、幂律分布(Power Law Distribution)vs 正态分布(Normal Distribution)

    除了常见的正态分布,还有一种极其重要却极易被忽略的分布-幂律分布。在日常的数据分析中,订单数据和浏览数据常呈现近似幂律分布。

    下图展现的是社交网络中用户数和用户粉丝数的关系,可以看出拥有200(横轴)以上的粉丝的用户数(纵轴)占极少数,而拥有<100粉丝的用户数成百上千,这就是幂律分布的特点:少数群体占有着多数的资源。

    呈现幂律分布特点的数据可通过log转换使观测点近似其分布在一条直线上,方便后续分析和预测,而分布中的那些所谓的“极端值”却不能像分析正态分布那样随意的剔除。考虑到计算中数据的倾斜问题,在不影响整体效果的情况下,可根据更加细致的分位点对极端值进行取舍。
    4、回归分析

    在回归分析中,尤其是线性回归中,异常的数值也会对模型的拟合效果产生较大的影响。

    对图中7个数据点进行拟合,蓝色的回归曲线线受到右上方高杠杆值的影响,偏向了它,拟合并不理想。对高杠杆值的识别不足以用来检测回归中的异常,更有效的方式是计算每个数据点的Cook距离。

    柯克距离(Cook Distance)是统计分析中一种常见的距离,用于诊断各种回归分析中是否存在异常数据。较大的Cook距离表明从回归统计量和计算中排除个案之后,系数会发生根本变化

    Cook距离表征了包含此观测点和剔除此观测点前后模型的拟合效果的差别,差别越大,此点对模型影响越大,可考虑删除,因为在一个稳健的模型中每个点对模型的影响都认为是均匀的。删除强影响点之后,橘色的曲线对大部分的点的拟合都比较满意。

    5、基于密度的方法

    在一维空间中的固有思维是较大或较小的数据会是异常,但是在高维空间中,数据是不能直接拿来比较大小的。仍以一维数据为例,考虑以下序列的异常情况:

    {1,2,3,2,50,97,97,98,99}

    50更有可能认为是异常或离群点,而非1或99。当数据分布的假设不是必要条件时,计算数据点的密度来判定异常也是一个行之有效的方法。

    点的密度可有多种定义,但多数都会依赖距离的定义,多维空间的距离计算较为复杂,尤其当数据混入分类变量和连续数值变量的时候。以一个简单的密度方法为例,在LOF(Breunig,M., Kriegel, H., Ng, R., and Sander, J. (2000). LOF:identifying density-based local outliers.)算法中,数据的异常判定依赖于计算每个观测的局部离群因子。

    离群因子表征了数据点与周围邻居点的密切程度,或者不合群的程度。因子值越大,其为异常点的可能性越大。上述一维序列的各点离群因子值如下左图,第5个点(50)对应的离群因子最高,可被判定是异常值。下右图是维基百科上一个二维空间的例子,根据局部离群因子同样可以识别出数据中的离群点。

    6、业务数据的时序监控

    业务数据的时序监控是对各业务线产生的时序数据,如访问量,订单量等进行异常检测,是对业务正常开展的反馈与保障。业务数据包含实时数据和离线数据,对实时性要求不高可采用T+1天监控预警。在实践中发现业务数据会有如下特点:

    a)数据稀疏:有的业务数据时间跨度小,历史数据不足;有的业务数据包含缺失值,时间不连续,通常会出现在投放业务中。

    b)无人工标注:历史的异常值无人工标注,后续判断异常主观性较强。

    c)节假日等影响因素不可控

    常用的判定流程如下:

    T时刻基于[1, T-2]时间段内的数据建立模型或规则来判定T-1时刻数据的是否异常。为了保证规则和模型的稳健,对于历史的异常值往往会采用平滑的方式处理。

    a、配置恒定阈值

    数据无趋势性,近似平稳,可配置简单的恒定阈值。时刻T配置的恒定阈值是对历史数据的恒定,在T+1时刻,这个阈值会被新加入的数据更新。

    b、配置动态阈值

    如果时间序列含有趋势性,但无明显周期性,可以配置动态阈值。比如基于固定的移动窗口计算移动平均值和移动标准差,基于两者给出监控的上下界。动态阈值会受到移动窗口大小设定的影响,对判定当前数据异常有一定的延迟性。

    c、监控差分序列

    对原始序列作一阶差分,如果差分序列稳定,可对差分序列配置恒定阈值,从而判定原序列的异常情况。

    原始序列:

    差分序列:

    d、时间序列分解法

    如果业务数据既有趋势性又有周期性,可将时间序列模型运用于监控任务中,如Arima,STL,TBATS等时间序列模型。在STL鲁棒加权回归时间序列分解法中,模型通过加权最小二乘回归将原始序列分解成周期序列,趋势序列和残差序列。下图从上到下依次是原始序列,周期序列,趋势序列和残差序列。

    模型基于残差序列的中位数和观测的残差值赋予每个观测一个稳健权重,权重低的观测会被判定为异常。这里之所以使用残差序列的中位值,也是考虑了中位值的稳健性。

    在实际应用中会发现,业务时序数据的不规则和特点的多变性往往对模型和规则提出更高的要求,不同的检测方法需要相互配合使用才能发挥作用。

    四、结束语

    异常检测与处理在各个领域都有其广泛的应用场景,本文仅以常见的case为例,论述了一些简单却行之有效的方法。文章并未涉及大规模数据和高维数据的异常检测,感兴趣的读者可以查阅相关文献做深入研究。

    其次,在实际操作中,一种或几种检测方案也无法覆盖所有数据问题。在洞察数据分布规律的基础上,分析师需要灵活的根据数据生成机制采取合适的方法或统计模型,再辅以相应逻辑规则来顾及模型所无法触及的边边角角,让异常检测算法实际落地。

    【作者简介】束开亮,携程大市场部BI团队,负责数据分析与挖掘。同济应用数学硕士,金融数学方向,法国统计学工程师,主修风险管理与金融工程。

    展开全文
  • 时序数据异常检测

    万次阅读 多人点赞 2019-07-12 17:22:21
    文章目录AIOPS网上相关资料一、时序数据概念及分析1.1 数据前期处理的重要性1.2.1时序数据周期研究(重点方向)1.3 时序数据的随机过程1.4 白噪声序列1.5 平稳性序列1.7 弱平稳1.7.1 原始序列平稳处理方法1.8 关于多...

    文章目录

    AIOPS网上相关资料

    华为云 AIOps 实践全面解析
    AIOps背景/所应具备技术能力分析
    AIOps探索:基于VAE模型的周期性KPI异常检测方法

    一、时序数据概念及分析

    1.1 数据前期处理的重要性

    数据处理是机器学习的重要环节,据说,机器学习相关问题,算法人员需要花百分之80的时间来对数据进行处理。
    由于不同的业务背景,不同类型的数据,不同的算法,数据如果不处理好,就无法正确的应用计算算法来得到想要的结果。
    ##1.2 时序数据组成
    趋势变动在长时期内按某种规则稳定地呈现出来的持续向上或向下或保持在某一水平。
    季节变动在一个年度内重复出现的周期性波动。它是诸如气候条件、生产条件、节假日或人们的风俗习惯等各种因素影响的结果。
    **循环波动:**是时间序列呈现出得非固定长度的周期性变动。循环波动的周期可能会持续一段时间,但与趋势不同,它不是朝着单一方向的持续变动,而是涨落相同的交替波动。

    1.2.1时序数据周期研究(重点方向)

    **不规则波动(随机变动):**是许多不可控的偶然因素共同作用的结果,致使时间序列产生一种波浪形或震荡式的变动。

    1.3 时序数据的随机过程

    在研究随机过程时人们透过表面的偶然性描述出必然的内在规律并以概率的形式来描述这些规律,从偶然中悟出必然正是这一学科的魅力所在。
    随机变量:简单的随机现象,如某班一天学生出勤人数,是静态的。
    随机过程:随机现象的动态变化过程。
    如某一时期各个时刻的状态。 所谓过程就是事物的发展变化过程,尽管过程的形式各异,但归纳起来不外乎两种:一种是确定性的,一种是随机性的。 所谓确定性过程,就是指事物的发展有必然的变化规律,用数学语言来说,就是事物变化的过程可以用一个(或几个)时间t的确定的函数来描述。可重复性。如自由落体。 所谓随机过程,就是说现象的变化没有确定形式,没有必然的变化规律。用数学语言来说,就是事物变化的过程不能用一个(或几个)时间t的确定的函数来描述。不可重复性。也就是说,如果对事物变化的全过程进行一次观测得到一次观察结果是一个时间t的函数,但对同一事物的变化过程独立地重复进行多次观测所得的结果是不相同的。 如果对于每一特定的t属于T(T是时间集合),X(t)是一个随机变量,则称这一族无穷多个随机变量{X(t),t属于T}是一个随机过程。

    1.4 白噪声序列

    随机变量X(t)(t=1,2,3……),如果是由一个不相关的随机变量的序列构成的,即对于所有s不等于k,随机变量Xs和Xk的协方差为零,则称其为纯随机过程。
    如果一个纯随机过程的期望和方差均为常数,则称之为白噪声过程。白噪声过程的样本实称成为白噪声序列,简称白噪声。
    白噪声序列是一个有限均值、有限方差的独立同分布随机变量序列(随机过程)。之所以称为白噪声,是因为他和白光的特性类似,白光的光谱在各个频率上有相同的强度,白噪声的谱密度在各个频率上的值相同。
    如果白噪声具体是服从均值为0、方差为常数的正态分布,那就是高斯白噪声序列。

    1.5 平稳性序列

    平稳性可以说是时间序列分析的基础。
    平稳的通俗理解就是时间序列的一些行为不随时间改变, 所谓平稳过程就是其统计特性不随时间的平移而变化的过程。
    仅仅通过统计特性不变来判别异常是不靠谱的,即时间序列内含的规律和逻辑,要在被预测的未来时间段内能够延续下去。这样我们才能用历史信息去预测未来信息,类似机器学习中的训练集和测试集同分布。如果时间序列的变化是没有规律的、完全随机的,那么预测模型也就没有用。平稳性的数学表达:如果时间序列在某一常数附近波动且波动范围有限,即有常数均值和常数方差,并且延迟k期的序列变量的自协方差和自相关系数是相等的或者说延迟k期的序列变量之间的影响程度是一样的,则称该序列为平稳序列。简单说就是没有明显趋势且波动范围有限。
    ##1.6 严平稳/强平稳
    通俗来说,就是时间序列的联合分布随着时间变化严格保持不变。
    数学表达:如果对所有的时刻 t, (yt1,yt2,…ytm)的联合分布与(y(t1+k),(yt2+k),…y(tm+k))的联合分布相同,我们称时间序列 {yt} 是严平稳的。也就是时间序列的联合分布在时间的平移变换下保持不变。

    1.7 弱平稳

    数学表达:均值不变,协方差Cov(yt,y(t-k))=γk,γk依赖于k。
    ——即协方差也不随时间改变,而仅与时间差k相关。
    可以根据根据时间序列的折线图等大致观察数据的(弱)平稳性:所有数据点在一个常数水平上下以相同幅度波动。
    弱平稳的线性时间序列具有短期相关性(证明见参考书),即通常只有近期的序列值对现时值得影响比较明显,间隔越远的过去值对现时值得影响越小。至于这个间隔,也就是下面要提到的模型的阶数。

    1.7.1 原始序列平稳处理方法

    1.如果序列波动很大,也就是方差比较大,可以对序列作对数转换以减缓其波动幅度
    2.如果序列存在明显趋势,且呈现近似一条直线的趋势,可以对序列作一阶差分,从而消除趋势性
    3.如果序列存在明显的S期季节性,则可对序列作S阶差分,从而消除季节性

    1.8 关于多时间间隔的处理办法研究(重点研究方向)

    1.8.1 研究背景

    多时间间隔,是时序数据在采集过程中有不同的采集频率,由于客户需要以及采集系统能够做到随时改变单一指标的采集间隔,以及不同之间存在不同的时间间隔,时序数据出现多标准化问题,无法用统一的办法来对其进行解决。

    在处理多时间间隔问题上,目前尚无成熟的解决方案,但是在应用上无法绕开多时间间隔带来的问题,由于无论是有监督还是无监督,都是需要依靠历史数据来对当前时刻点作出判断,历史数据缓存在本地是一个必然的事情,但是由于秒级数据存在量太大的问题,极有可能在指标量非常大的时候会带来内存问题以及性能问题;

    1.8.2 研究方法

    • 论文
    • 网络

    1.8.3 研究进展

    2019年6月20日

    目前规则化的解决方案
    这个解决方案的缺点在于,对于每一个指标,都有一套历史窗口的取值方法

    1. 如果间隔过大,历史值非常少,就取所有值;
    2. 如果间隔过小,历史值非常多,就取前后180个值,
    3. 关键是多少算多,如果一天数据量大于180就算多,如果小于180就算少;
    4. 而且正确率稍高的stl分解办法在这行不通了,而且现在对时序分解办法存在理论不了解;
    5. 其实时序分解是一种非常好的时序处理方法,但是目前还不适用几个小时内的数据处理;

    1.9 时序数据特征提取方法

    tsfresht特征提取库文档

    1.10 多指标检测

    1.10.1 如何判断多指标之间,是谁影响谁?

    格兰杰因果关系检验
    这种方法能够测出来是是谁影响谁

    1.11 时序数据预处理文档

    • 流入算法的数据需要满足什么条件?
    • 无null值
    • 数据格式符合要求
    • 历史数据数量符合要求
    • 数据无缺失值
    • 数据保持时序完整性
    • 数据无重复值
    • 指标聚类也算作预处理的一部分

    二、运用无监督进行异常检测

    2.0 无监督算法基本分类

    参考资料

    2.0.1 统计与概率模型

    主要是对数据的分布做出假设,并找出假设下所定义的“异常”,因此往往会使用极值分析或者假设检验。比如对最简单的一维数据假设高斯分布,然后将距离均值特定范围以外的数据当做异常点。而推广到高维后,可以假设每个维度各自独立,并将各个维度上的异常度相加。如果考虑特征间的相关性,也可以用马氏距离(mahalanobis distance)来衡量数据的异常度[12]。不难看出,这类方法最大的好处就是速度一般比较快,但因为存在比较强的“假设”,效果不一定很好。

    2.0.2 线性模型

    假设数据在低维空间上有嵌入,那么无法、或者在低维空间投射后表现不好的数据可以认为是离群点。举个简单的例子,PCA可以用于做异常检测[10],一种方法就是找到k个特征向量(eigenvector),并计算每个样本再经过这k个特征向量投射后的重建误差(reconstruction error),而正常点的重建误差应该小于异常点。同理,也可以计算每个样本到这k个选特征向量所构成的超空间的加权欧氏距离(特征值越小权重越大)。在相似的思路下,我们也可以直接对协方差矩阵进行分析,并把样本的马氏距离(在考虑特征间关系时样本到分布中心的距离)作为样本的异常度,而这种方法也可以被理解为一种软性(Soft PCA) [6]。同时,另一种经典算法One-class SVM[3]也一般被归类为线性模型。

    2.0.3 基于相似度衡量的模型

    异常点因为和正常点的分布不同,因此相似度较低,由此衍生了一系列算法通过相似度来识别异常点。比如最简单的K近邻就可以做异常检测,一个样本和它第k个近邻的距离就可以被当做是异常值,显然异常点的k近邻距离更大。同理,基于密度分析如LOF [1]、LOCI和LoOP主要是通过局部的数据密度来检测异常。显然,异常点所在空间的数据点少,密度低。相似的是,Isolation Forest[2]通过划分超平面来计算“孤立”一个样本所需的超平面数量(可以想象成在想吃蛋糕上的樱桃所需的最少刀数)。在密度低的空间里(异常点所在空间中),孤例一个样本所需要的划分次数更少。另一种相似的算法ABOD[7]是计算每个样本与所有其他样本对所形成的夹角的方差,异常点因为远离正常点,因此方差变化小。换句话说,大部分异常检测算法都可以被认为是一种估计相似度,无论是通过密度、距离、夹角或是划分超平面。通过聚类也可以被理解为一种相似度度量,比较常见不再赘述。

    2.0.4 集成异常检测与模型融合

    在无监督学习时,提高模型的鲁棒性很重要,因此集成学习就大有用武之地。比如上面提到的Isolation Forest,就是基于构建多棵决策树实现的。最早的集成检测框架feature bagging[9]与分类问题中的随机森林(random forest)很像,先将训练数据随机划分(每次选取所有样本的d/2-d个特征,d代表特征数),得到多个子训练集,再在每个训练集上训练一个独立的模型(默认为LOF)并最终合并所有的模型结果(如通过平均)。值得注意的是,因为没有标签,异常检测往往是通过bagging和feature bagging比较多,而boosting比较少见。boosting情况下的异常检测,一般需要生成伪标签,可参靠[13, 14]。集成异常检测是一个新兴但很有趣的领域,综述文章可以参考[16, 17, 18]。

    2.0.5 特定领域的异常检测

    比如图像异常检测 [21],顺序及流数据异常检测(时间序列异常检测)[22],以及高维空间上的异常检测 [23],比如前文提到的Isolation Forest就很适合高维数据上的异常检测。

    2.0.6 参考文献

    [1] Breunig, M.M., Kriegel, H.P., Ng, R.T. and Sander, J., 2000, May. LOF: identifying density-based local outliers. In ACM SIGMOD Record, pp. 93-104. ACM.
    [2] Liu, F.T., Ting, K.M. and Zhou, Z.H., 2008, December. Isolation forest. In ICDM ‘08, pp. 413-422. IEEE.
    [3] Ma, J. and Perkins, S., 2003, July. Time-series novelty detection using one-class support vector machines. In IJCNN’ 03, pp. 1741-1745. IEEE.
    [4] Micenková, B., McWilliams, B. and Assent, I. 2015. Learning Representations for Outlier
    Detection on a Budget. arXiv Preprint arXiv:1507.08104.
    [5] Goldstein, M. and Dengel, A., 2012. Histogram-based outlier score (hbos): A fast unsupervised anomaly detection algorithm. InKI-2012: Poster and Demo Track, pp.59-63.
    [6] Aggarwal, C.C., 2015. Outlier analysis. InData mining(pp. 237-263). Springer, Cham.
    [7] Kriegel, H.P. and Zimek, A., 2008, August. Angle-based outlier detection in high-dimensional data. InKDD '08, pp. 444-452. ACM.
    [8] Zhao,Y. and Hryniewicki, M.K. 2018. XGBOD: Improving Supervised Outlier Detection
    with Unsupervised Representation Learning. IJCNN. (2018).
    [9] Lazarevic, A. and Kumar, V., 2005, August. Feature bagging for outlier detection. In KDD '05. 2005.
    [10] Shyu, M.L., Chen, S.C., Sarinnapakorn, K. and Chang, L., 2003. A novel anomaly detection scheme based on principal component classifier. MIAMI UNIV CORAL GABLES FL DEPT OF ELECTRICAL AND COMPUTER ENGINEERING.
    [11] Rousseeuw, P.J. and Driessen, K.V., 1999. A fast algorithm for the minimum covariance determinant estimator. Technometrics, 41(3), pp.212-223.
    [12] Hardin, J. and Rocke, D.M., 2004. Outlier detection in the multiple cluster setting using the minimum covariance determinant estimator. Computational Statistics & Data Analysis, 44(4), pp.625-638.
    [13] Rayana, S. and Akoglu, L. 2016. Less is More: Building Selective Anomaly Ensembles. TKDD. 10, 4 (2016), 1–33.
    [14] Rayana, S.,Zhong, W. and Akoglu, L. 2017. Sequential ensemble learning for outlier
    detection: A bias-variance perspective. ICDM. (2017), 1167–1172.
    [15] Chandola, V., Banerjee, A. and Kumar, V., 2009. Anomaly detection: A survey.ACM computing surveys, 41(3), p.15.
    [16] Aggarwal, C.C., 2013. Outlier ensembles: position paper. ACM SIGKDD Explorations Newsletter, 14(2), pp.49-58. [Download PDF]
    [17] Zimek, A., Campello, R.J. and Sander, J., 2014. Ensembles for unsupervised outlier detection: challenges and research questions a position paper. ACM Sigkdd Explorations Newsletter, 15(1), pp.11-22.
    [18] Aggarwal, C.C. and Sathe, S., 2017.Outlier ensembles: an introduction. Springer.
    [19] Ramaswamy, S., Rastogi, R. and Shim, K., 2000, May. Efficient algorithms for mining outliers from large data sets. ACM Sigmod Record, 29(2), pp. 427-438).
    [20] Angiulli, F. and Pizzuti, C., 2002, August. Fast outlier detection in high dimensional spaces. In European Conference on Principles of Data Mining and Knowledge Discovery pp. 15-27.
    [21] Akoglu, L., Tong, H. and Koutra, D., 2015. Graph based anomaly detection and description: a survey.Data Mining and Knowledge Discovery, 29(3), pp.626-688.
    [22] Gupta, M., Gao, J., Aggarwal, C.C. and Han, J., 2014. Outlier detection for temporal data: A survey.IEEE Transactions on Knowledge and Data Engineering, 26(9), pp.2250-2267.
    [23] Zimek, A., Schubert, E. and Kriegel, H.P., 2012. A survey on unsupervised outlier detection in high‐dimensional numerical data.Statistical Analysis and Data Mining: The ASA Data Science Journal, 5(5), pp.363-387.

    2.1 3σ准则

    2.1.1 基本原理

    3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。且3σ适用于有较多组数据的时候。
    这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提的,当测量次数较少的情形用准则剔除粗大误差是不够可靠的。因此,在测量次数较少的情况下,最好不要选用准则,而用其他准则。
    在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴
    3σ原则为
    数值分布在(μ-σ,μ+σ)中的概率为0.6827
    数值分布在(μ-2σ,μ+2σ)中的概率为0.9545
    数值分布在(μ-3σ,μ+3σ)中的概率为0.9973
    可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%.

    ###2.1.2 优缺点

    2.1.2.1优点

    1. 计算速度非常快;
      ####2.1.2.2 缺点
    2. 效果可提升空间小;
    3. 计算正确率一般,百分之30左右(已经测过的)
    4. 无法应用到多维指标
      ##2.2 箱型图法

    2.2.1 基本原理

    箱线图算法不需要数据服从特定分布,比如数据分布不符合高斯分布时可以使用该方法。该方法需要先计算第一四分位数Q1(25%)和第三四分位数Q3(75%)。令IQR=Q3-Q1,然后算出异常值边界点Q3+λIQR和Q1- λIQR,通常λ取1.5(类似于正态分布中的image,如下图4所示:
    [外链图片转存失败(img-EPckB9Dr-1562923256468)(./1561460688230.png)]

    2.2.2 优缺点

    ####2.2.2.1 优点

    • 不需要数据服从任何分布
    • 不需要数据具有稳定间隔
    • 不需要数据时间上保持连续
    • 计算速度快

    2.2.2.2 缺点

    • 在异常表现上可能存在问题,目前还未证实

    依赖

    四分数的计算需要numpy第三方库
    ##2.3 LOF
    csdn相关文章
    [外链图片转存失败(img-tJGf9TwJ-1562923256470)(./1560835717842.png)]
    下面介绍LOF算法的相关定义:

    1) d(p,o)d(p,o):两点p和o之间的距离;

    2) k-distance:第k距离

    对于点p的第k距离dk§dk§定义如下:
        dk§=d(p,o)dk§=d(p,o),并且满足:
          a) 在集合中至少有不包括p在内的kk个点o,∈C{x≠p}o,∈C{x≠p}, 满足d(p,o,)≤d(p,o)d(p,o,)≤d(p,o) ;
          b) 在集合中最多有不包括p在内的k−1k−1个点o,∈C{x≠p}o,∈C{x≠p},满足d(p,o,)<d(p,o)d(p,o,)<d(p,o) ;
        p的第k距离,也就是距离p第k远的点的距离,不包括p,如图3。
    [外链图片转存失败(img-1ZdyN6rs-1562923256470)(./1560835816750.png)]

    3) k-distance neighborhood of p:第k距离邻域

    点p的第k距离邻域Nk§,就是p的第k距离即以内的所有点,包括第k距离。
        因此p的第k邻域点的个数 |Nk§|≥k|Nk§|≥k。

    4) reach-distance:可达距离

    点o到点p的第k可达距离定义为:
    reach−distancek(p,o)=max{k−distance(o),d(p,o)}reach−distancek(p,o)=max{k−distance(o),d(p,o)}
        也就是,点o到点p的第k可达距离,至少是o的第k距离,或者为o、p间的真实距离。
        这也意味着,离点o最近的k个点,o到它们的可达距离被认为相等,且都等于dk(o)。
        如图4,o1o1到p的第5可达距离为d(p,o1)d(p,o1),o2o2到p的第5可达距离为d5(o2)。
    [外链图片转存失败(img-iJ6vWeKQ-1562923256471)(./1560835962865.png)]

    5) local reachability density:局部可达密度

    点p的局部可达密度表示为:
        
    lr ⁡ d k ( p ) = 1 / ( ∑ o ∈ N k ( p ) r e a c h − dist ⁡ k ( p , o ) ∣ N k ( p ) ∣ ) \operatorname{lr} d_{k}(p)=1 /\left(\frac{\sum_{o \in N_{k}(p)} r e a c h-\operatorname{dist}_{k}(p, o)}{\left|N_{k}(p)\right|}\right) lrdk(p)=1/(Nk(p)oNk(p)reachdistk(p,o))

    表示点p的第k邻域内点到p的平均可达距离的倒数。
        注意,是p的邻域点Nk§Nk§到p的可达距离,不是p到Nk§Nk§的可达距离,一定要弄清楚关系。并且,如果有重复点,那么分母的可达距离之和有可能为0,则会导致lrd变为无限大,下面还会继续提到这一点。
        这个值的含义可以这样理解,首先这代表一个密度,密度越高,我们认为越可能属于同一簇,密度越低,越可能是离群点。如果p和周围邻域点是同一簇,那么可达距离越可能为较小的dk(o)dk(o),导致可达距离之和较小,密度值较高;如果p和周围邻居点较远,那么可达距离可能都会取较大值d(p,o),导致密度较小,越可能是离群点。

    6) local outlier factor:局部离群因子

    点p的局部离群因子表示为:
         L O F k ( p ) = ∑ o ∈ N k ( p ) l r d k ( o ) l r d k ( p ) ∣ N k ( p ) ∣ = ∑ o ∈ N k ( p ) lr ⁡ d k ( o ) ∣ N k ( p ) ∣ / lr ⁡ d k ( p ) L O F_{k}(p)=\frac{\sum_{o \in N_{k}(p)} \frac{l r d_{k}(o)}{l r d_{k}(p)}}{\left|N_{k}(p)\right|}=\frac{\sum_{o \in N_{k}(p)} \operatorname{lr} d_{k}(o)}{\left|N_{k}(p)\right|} / \operatorname{lr} d_{k}(p) LOFk(p)=Nk(p)oNk(p)lrdk(p)lrdk(o)=Nk(p)oNk(p)lrdk(o)/lrdk(p)
    表示点p的邻域点Nk§的局部可达密度与点p的局部可达密度之比的平均数。
        如果这个比值越接近1,说明p的其邻域点密度差不多,p可能和邻域同属一簇;如果这个比值越小于1,说明p的密度高于其邻域点密度,p为密集点;如果这个比值越大于1,说明p的密度小于其邻域点密度,p越可能是异常点。

    优缺点

    缺点

    1. 所需要的起始数据量较大;
    2. 检测效果不佳;
    3. 参数难以调整和固定;

    优点

    1. 该算法可以应用到多维指标
    2. 该算法异常检测效果再单指标上表现一般,但是在多维指标上可能表现良好;

    2.4 孤立森林

    [外链图片转存失败(img-qzQPsVzE-1562923256471)(./1560838962793.png)]
    csdn
    iForest 是刘飞博士(Fei Tony Liu)在莫纳什大学就读期间由陈开明(Kai-Ming Ting)教授和周志华(Zhi-Hua Zhou)教授指导发表的。第一个版本是在2008年ICDM上,获得年度最佳论文,扩充版本发表于TKDD。
    传统的异常检测算法都是通过数据拟合出来一个模型,然后用现有数据测试,然后看看是不是异常点。但是孤立森林却不是这样,而是通过一个简单的超平面划分数据集,来检测异常点的存在。
    其思想大致是:用一个随机超平面来分割数据空间,切一次可以生成两个子空间,然后继续用一个随机超平面来切割每个子空间,循环下去,直到每个子空间只有一个数据点为止。
    如图所示:
    [外链图片转存失败(img-qyfzUPLS-1562923256472)(./1560914699097.png)]

    孤立森林核心算法

    孤立森林是如何创造出来的,和以前的方法有什么不同;以前的异常检测方法,比如统计方法,以分类为基础的方法,以聚类为基础的方法,但是他们有两方面的缺点:⑴训练出来的异常检测器对正常数据拟合的特别好,但是对出现次数比较少的数据拟合的就不是很好,预测出来的异常很多都是假的,⑵ 另外大多数已经存在的方法因为计算复杂度太高受限于低纬度数据,无法对对高纬度数据进行有效检测。
    孤立森林利用过去方法存在的问题以及抓住异常点的特有特征——出现次数少而且和正常数据很不一样,利用这两点,提出了孤立森林的方法。
    孤立森林这种方法,基本的思想非常简单,就是不断的分割数据集,当整棵孤立树分割的高度超过限制高度的时候就停止分割。
    孤立树构造过程伪代码如图所示:
    [外链图片转存失败(img-QmCpnK7i-1562923256473)(./1560914715536.png)]

    但是,用这种方法,如果你不对它进行限制的话,如果原始数据有数十万个数据点,那么分割将会是一件非常麻烦的事情,而且对于数据密集的区域,不断进行迭代分割意义也并不是很大。
    所以,在伪代码中,对树的高度是有一定限制的。
    那么利用原始数据,最终得到一棵树,如何能够判断数据点是正常的还是不正常的,其实,我们在图一中就可以看到,对于 需要很多次才能够孤立出来,但是对于仅仅需要几次就能够孤立出来了,如下图所示,二者平均路径长度是不一样的。
    异常点往往很容易就能够孤立出来,但是正常点由于数据量比较大,需要好多次才能够孤立出来。
    那么,是不是根据这种孤立的次数就能够判断一个点是不是异常点了?
    实际上,对于孤立森林来说,一个数据集不仅仅构造一棵孤立树,而是很多棵孤立树,要不然也不会叫做孤立森林了。
    上面我们已经给出构造孤立树的过程,那么现在是如何构造孤立森林了,如图所示,我们能够看到构造孤立森林的伪代码:
    [外链图片转存失败(img-1cFUfYZ0-1562923256474)(./1560914730926.png)]

    那么这个切割出来又是如何进行异常点检测的?
    虽然树和森林都构造出来了,但是结果是如何得到的,实际上孤立森林算是集成方法的一种,但是对于单个的孤立树来说,如何判断一个样本是不是异常值,我们需要根据该样本被划分的难易,也就是说,该样本在孤立树中的深度如何,查询某个样本的树深度,其伪代码如图所示:
    [外链图片转存失败(img-ZDF8kkvL-1562923256475)(./1560914754043.png)]

    孤立森林应用场景
    通过对孤立森林的思想以及算法原理的了解,我们知道,孤立森林对基于密度的样本可以很好的展现它优良的特性,但是在异常检测领域,并不是所有的样本都是以向量的形式呈现,在工业界,有很多场景下产生的数据都是以时间为基准,不断的产生数据,对于这种时序数据,孤立森林处理起来比较困难,也就是说,孤立森林的应用领域具有一定的局限性。
    孤立森林优劣势分析
    孤立森林算法有着线性时间复杂度以及较低的内存需求,在大量非相关属性的高纬问题上表现很好,而且它的训练集不需要包含任何异常。
    对于其时间复杂度,我们很容易理解,为什么孤立森林具有很低的时间复杂度,能够达到线性,原因就在于,孤立森林每次对样本集进行切分,都只是随机选取一个特征,然后选取该特征的一个值进行切分,这样把整个样本集切分完,实际上,其时间复杂度,也就相当于其切分的次数;往往为了不让切割之后的图形过于复杂,在使用孤立森林之前,会预先设置孤立森林的树的深度,这样以至于,其切分次数计算如下;
    n——树的深度;
    我们可以看到孤立森林的深度如果设置为n的话,切割完成需要大概次,也就是说,如果按照操作次数,其实这个时间复杂度是不会到达线性的,但是为什么原作者告诉我们,孤立森林的时间复杂度会成为线性的了,这是因为,在构造孤立森林的过程中,还用到了剪枝策略,也就是说并不是对每一个子样本都需要切割,因为并不是每个子样本领域都有多个样本点,对于密度比较低的子样本,如果其样本个数不超过一个,就不用再进行切割了,所以这个剪枝方法大大减少了迭代执行的次数。
    孤立森林还有一个缺点就是无法对多属性进行有效的划分,一般来说,孤立森林表现最好的就是在二维平面上的划分。

    优缺点

    缺点

    1. 所需要的起始数据量较大;
    2. 检测效果不佳;
    3. 参数难以调整和固定;

    优点

    1. 可以应用到多维指标;
    2. 在多维指标上表现良好;

    2.5 密度聚类DBSCAN

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。下面我们就对DBSCAN算法的原理做一个总结。

    基本原理

    DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
    通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。

    密度定义

    在上一节我们定性描述了密度聚类的基本思想,本节我们就看看DBSCAN是如何描述密度聚类的。DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(ϵ, MinPts)用来描述邻域的样本分布紧密程度。其中,ϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵ的邻域中样本个数的阈值。

    假设我的样本集是D=(x1,x2,…,xm),则DBSCAN具体的密度描述定义如下:

    1) ϵ-邻域:对于xj∈D,其ϵ-邻域包含样本集D中与xj的距离不大于ϵ的子样本集,即Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}, 这个子样本集的个数记为|Nϵ(xj)|

    2) 核心对象:对于任一样本xj∈D,如果其ϵ-邻域对应的Nϵ(xj)至少包含MinPts个样本,即如果|Nϵ(xj)|≥MinPts,则xj是核心对象。

    3)密度直达:如果xi位于xj的ϵ-邻域中,且xj是核心对象,则称xi由xj密度直达。注意反之不一定成立,即此时不能说xj由xi密度直达, 除非且xi也是核心对象。

    4)密度可达:对于xi和xj,如果存在样本样本序列p1,p2,…,pT,满足p1=xi,pT=xj, 且pt+1由pt密度直达,则称xj由xi密度可达。也就是说,密度可达满足传递性。此时序列中的传递样本p1,p2,…,pT−1均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。

    5)密度相连:对于xi和xj,如果存在核心对象样本xk,使xi和xj均由xk密度可达,则称xi和xj密度相连。注意密度相连关系是满足对称性的。

    从下图可以很容易看出理解上述定义,图中MinPts=5,红色的点都是核心对象,因为其ϵ-邻域至少有5个样本。黑色的样本是非核心对象。所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。在这些密度可达的样本序列的ϵ-邻域内所有的样本相互都是密度相连的。
        [外链图片转存失败(img-tYhIIDKb-1562923256475)(./1560912435950.png)]

    DBSCAN密度聚类思想

    DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。

    这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里其他的非核心对象样本都在这个核心对象的ϵ-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的ϵ-邻域中一定有一个其他的核心对象,否则这两个核心对象无法密度可达。这些核心对象的ϵ-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。

    那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。

    基本上这就是DBSCAN算法的主要内容了,是不是很简单?但是我们还是有三个问题没有考虑。

    第一个是一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象在周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。

    第二个是距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,如果样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。如果大家对于最近邻的思想,距离度量,KD树和球树不熟悉,建议参考之前写的另一篇文章K近邻法(KNN)原理小结。

    第三种问题比较特殊,某些样本可能到两个核心对象的距离都小于ϵ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如果界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说DBSCAN的算法不是完全稳定的算法。

    DBSCAN聚类算法

    下面我们对DBSCAN聚类算法的流程做一个总结。
        输入:样本集D=(x1,x2,…,xm),邻域参数(ϵ,MinPts), 样本距离度量方式
        输出: 簇划分C. 
        1)初始化核心对象集合Ω=∅, 初始化聚类簇数k=0,初始化未访问样本集合Γ = D, 簇划分C = ∅
        2) 对于j=1,2,…m, 按下面的步骤找出所有的核心对象:
          a) 通过距离度量方式,找到样本xj的ϵ-邻域子样本集Nϵ(xj)
          b) 如果子样本集样本个数满足|Nϵ(xj)|≥MinPts, 将样本xj加入核心对象样本集合:Ω=Ω∪{xj}
        3)如果核心对象集合Ω=∅,则算法结束,否则转入步骤4.
        4)在核心对象集合Ω中,随机选择一个核心对象o,初始化当前簇核心对象队列Ωcur={o}, 初始化类别序号k=k+1,初始化当前簇样本集合Ck={o}, 更新未访问样本集合Γ=Γ−{o}
        5)如果当前簇核心对象队列Ωcur=∅,则当前聚类簇Ck生成完毕, 更新簇划分C={C1,C2,…,Ck}, 更新核心对象集合Ω=Ω−Ck, 转入步骤3。
        6)在当前簇核心对象队列Ωcur中取出一个核心对象o′,通过邻域距离阈值ϵ找出所有的ϵ-邻域子样本集Nϵ(o′),令Δ=Nϵ(o′)∩Γ, 更新当前簇样本集合Ck=Ck∪Δ, 更新未访问样本集合Γ=Γ−Δ, 更新Ωcur=Ωcur∪(Δ∩Ω)−o′,转入步骤5.
        输出结果为: 簇划分C={C1,C2,…,Ck}

    DBSCAN小结

    和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
        那么我们什么时候需要用DBSCAN来聚类呢?一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。如果数据集不是稠密的,则不推荐用DBSCAN来聚类。
        下面对DBSCAN算法的优缺点做一个总结。
        DBSCAN的主要优点有:
        1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
        2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
        3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
        DBSCAN的主要缺点有:
        1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
        2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
        3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

    DBSCAN实现

    sklearn-刘建平博客实现

    优缺点

    优点

    1. 唯一值得称赞的优点就是对于非凸数据簇也是可以分离开的;
    2. 相对于k-means聚类肯定是表现非常好的;

    缺点

    1. 所需要的起始数据量较大;
    2. 检测效果不佳;
    3. 参数难以调整和固定;

    2.6 oneclass-svm

    One Class Learning比较经典的算法是One-Class-SVM[参考文献1],这个算法的思路非常简单,就是寻求一个超平面将样本中的正例圈起来,预测是就用这个超平面做决策,在圈内的样本就认为是正样本。由于核函数计算比较耗时,在海量数据的场景用得并不多;
    [外链图片转存失败(img-DGnsnWKb-1562923256475)(./1560913837791.png)]

    优缺点

    缺点

    1. 要求只能使用正常数据点来拟合,然后才能检测是否有异常;
    2. 计算量较大

    优点

    1. 可以在多维指标上进行应用;

    2.7 时序分解pyculiarity

    此方法确实是在时序分解基础之上,更近一步,用中位数代替趋势分量,这样会消除掉假异常点
    S-H-ESD方法-非常详细的讲解[外链图片转存失败(img-Er13msZJ-1562923256476)(./1560906942581.png)]

    grubbs’Test

    一种假设检验的方法,常被用来检验服从正太分布的单变量数据集(univariate data set)Y 中的单个异常值。若有异常值,则其必为数据集中的最大值或最小值。原假设与备择假设如下:
    H0: 数据集中没有异常值
    H1: 数据集中有一个异常值
    Grubbs’ Test检验假设的所用到的检验统计量(test statistic)为
    G = max ⁡ ∣ Y i − Y ‾ ∣ s G=\frac{\max \left|Y_{i}-\overline{Y}\right|}{s} G=smaxYiY
    其中, Y ‾ \overline{Y} Y为均值,s为标准差。原假设 H 0 H_{0} H0被拒绝,当检验统计量满足以下条件
    G &gt; ( N − 1 ) N ( t α / ( 2 N ) , N − 2 ) 2 N − 2 + ( t α / ( 2 N ) , N − 2 ) 2 G&gt;\frac{(N-1)}{\sqrt{N}} \sqrt{\frac{\left(t_{\alpha /(2 N), N-2}\right)^{2}}{N-2+\left(t_{\alpha /(2 N), N-2}\right)^{2}}} G>N (N1)N2+(tα/(2N),N2)2(tα/(2N),N2)2
    其中,N为数据集的样本数,tα/(2N),N−2为显著度(significance level)等于α/(2N)、自由度(degrees of freedom)等于N−2的t分布临界值。实际上,Grubbs’ Test可理解为检验最大值、最小值偏离均值的程度是否为异常。
    grubbs’Test具体资料

    ESD方法

    在现实数据集中,异常值往往是多个而非单个。为了将Grubbs’ Test扩展到k个异常值检测,则需要在数据集中逐步删除与均值偏离最大的值(为最大值或最小值),同步更新对应的t分布临界值,检验原假设是否成立。基于此,Rosner提出了Grubbs’ Test的泛化版ESD(Extreme Studentized Deviate test)。算法流程如下:

    • 计算与均值偏离最远的残差,注意计算均值时的数据序列应是删除上一轮最大残差样本数据后;
      R j = max ⁡ i ∣ Y i − Y ′ ‾ ∣ s , 1 ≤ j ≤ k R_{j}=\frac{\max _{i}\left|Y_{i}-\overline{Y^{\prime}}\right|}{s}, \quad 1 \leq j \leq k Rj=smaxiYiY,1jk
    • 计算临界值(critical value);
      λ j = ( n − j ) ∗ t p , n − j − 1 ( n − j − 1 + t p , n − j − 1 2 ) ( n − j + 1 ) , 1 ≤ j ≤ k \lambda_{j}=\frac{(n-j) * t_{p, n-j-1}}{\sqrt{\left(n-j-1+t_{p, n-j-1}^{2}\right)(n-j+1)}}, \quad 1 \leq j \leq k λj=(nj1+tp,nj12)(nj+1) (nj)tp,nj1,1jk
    • 检验原假设,比较检验统计量与临界值;若Ri>λj,则原假设H0不成立,该样本点为异常点;
    • 重复以上步骤k次至算法结束。

    时间序列分解算法

    STL

    时间序列异常检测

    鉴于时间序列数据具有周期性(seasonal)、趋势性(trend),异常检测时不能作为孤立的样本点处理;故而Twitter的工程师提出了S- ESD (Seasonal ESD)与S-H-ESD (Seasonal Hybrid ESD)算法,将ESD扩展到时间序列数据。

    S- ESD (Seasonal ESD)

    STL将时间序列数据分解为趋势分量、周期分量和余项分量。想当然的解法——将ESD运用于STL分解后的余项分量中,即可得到时间序列上的异常点。但是,我们会发现在余项分量中存在着部分假异常点(spurious anomalies)。如下图所示:
    [外链图片转存失败(img-H8NdKJ6D-1562923256476)(./1560910207670.png)]
    在红色矩形方框中,向下突起点被误报为异常点。为了解决这种假阳性降低准确率的问题,S-ESD算法用中位数(median)替换掉趋势分量;余项计算公式如下:
    R X = X − S X − X ~ R_{X}=X-S_{X}-\tilde{X} RX=XSXX~
    其中,X为原时间序列数据,$
    S_{X}
    $为STL分解后的周期分量,X̃ 为X的中位数。

    S-H-ESD

    由于个别异常值会极大地拉伸均值和方差,从而导致S-ESD未能很好地捕获到部分异常点,召回率偏低。为了解决这个问题,S-H-ESD采用了更具鲁棒性的中位数与绝对中位差(Median Absolute Deviation, MAD)替换公式(1)中的均值与标准差。MAD的计算公式如下
    M A D = median ⁡ ( ∣ X i − median ⁡ ( X ) ∣ ) M A D=\operatorname{median}\left(\left|X_{i}-\operatorname{median}(X)\right|\right) MAD=median(Ximedian(X))

    实现开源代码

    优缺点

    优点

    1. 这种方法对时序数据起始量要求不高;
    2. 经过数据分解以及算法迭代,效果可以达到期望水平;
    3. 复杂度较高,但是计算成本不高
    4. 召回率、准确率都会良好表现

    缺点

    1. 理论上只能在单指标上进行应用,无法在多维指标上进行应用;
      ##2.8 自编码无监督异常检测
      Autoencoder,中文称作自编码器,是一种无监督式学习模型。本质上它使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制。

    Autoencoder包含两个主要的部分,encoder(编码器)和 decoder(解码器)。Encoder的作用是用来发现给定数据的压缩表示,decoder是用来重建原始输入。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。最终压缩后的表示就在中间的coder层当中。

    以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的coder共有3个节点,也就是说原始数据被降到了只有3维。Decoder根据降维后的数据再重建原始数据,重新得到10维的输出。从Input到Ouptut的这个过程中,autoencoder实际上也起到了降噪的作用。
    [外链图片转存失败(img-8GrsIhBw-1562923256477)(./1561463151170.png)]
    异常检测(anomaly detection)通常分为有监督和无监督两种情形。在无监督的情况下,我们没有异常样本用来学习,而算法的基本上假设是异常点服从不同的分布。根据正常数据训练出来的Autoencoder,能够将正常样本重建还原,但是却无法将异于正常分布的数据点较好地还原,导致还原误差较大。

    如果样本的特征都是数值变量,我们可以用MSE或者MAE作为还原误差。例如上图,如果输入样本为
    X = ( X 1 , X 2 , ⋯ &ThinSpace; , X 10 ) X=\left(X_{1}, X_{2}, \cdots, X_{10}\right) X=(X1,X2,,X10)
    经过自编码重建后的结果:
    X R = ( X 1 R , X 2 R , ⋯ &ThinSpace; , X 10 R ) X^{R}=\left(X_{1}^{R}, X_{2}^{R}, \cdots, X_{10}^{R}\right) XR=(X1R,X2R,,X10R)
    还原误差MSE
    1 10 ∑ i = 1 10 ( X i − X i R ) 2 \frac{1}{10} \sum_{i=1}^{10}\left(X_{i}-X_{i}^{R}\right)^{2} 101i=110(XiXiR)2
    还原误差MAE
    1 10 ∑ i = 1 10 ∣ X i − X i R ∣ \frac{1}{10} \sum_{i=1}^{10}\left|X_{i}-X_{i}^{R}\right| 101i=110XiXiR
    sofa教程
    自编码原理详解

    优缺点

    缺点

    训练数据中不能有异常数据

    ##2.9 主成分分析
    在主成分分析(PCA)这种降维方法中,数据从原来的坐标系转换到新的坐标系,新坐标系的选择是由数据集本身所决定的。第一个新坐标轴的方向选择的是原始数据集中方差最大的方向,第二个新坐标轴的选择是和第一个坐标轴正交并且具有最大方差的方向。该过程一直重复,重复的次数就是原始数据中特征的数目。如此操作下去,将会发现,大部分方差都包含在最前面的几个新坐标轴之中。因此,我们可以忽略余下的坐标轴,也就是对数据进行了降维的处理。

    为了提取到第一个主成分(数据差异性最大)的方向,进而提取到第二个主成分(数据差异性次大)的方向,并且该方向需要和第一个主成分方向正交,那么我们就需要对数据集的协方差矩阵进行特征值的分析,从而获得这些主成分的方向。一旦我们计算出了协方差矩阵的特征向量,我们就可以保留最大的 N 个值。正是这 N 个值反映了 N 个最重要特征的真实信息,可以把原始数据集合映射到 N 维的低维空间。
    [外链图片转存失败(img-H391Ur5X-1562923256478)(./1561463733420.png)]
    离这个偏差最大的点可以认为是异常点

    2.10 Histogram-based Outlier Score (HBOS)

    基本原理

    2.11 FastABOD: Fast Angle-Based Outlier Detection using approximation

    基本原理

    2.12 MCD: Minimum Covariance Determinant

    基本原理

    MinCovDet是基于最小协方差行列式(Minimum Covariance Determinant,简称MCD)的算法,是鲁棒协方差估计。

    2.13 EmpiricalCovariance

    基本原理

    EmpiricalCovariance是基于最大似然协方差估计的算法

    PyOD

    introduce pyod

    2.14 CLOF

    华南理工大学陶晶在他的毕业论文中,提出基于K-means算法和LOF算法的CLOP算法。其实基于密度的聚类算法的引入在离群点检测算法中很常见。下面简单叙述下该算法。
    基于聚类的离群点检测方法的基本思想是:在聚类过程中,将那些不属于任何簇的点作为离群点。然而,基于聚类的离群点检测方法主要目标是聚类,离群点只是聚类时产生的“副产物”。因此传统的基于聚类的离群点离群点检测方法检测精度比较低。
    基于密度的LOF算法,能有效的检测数据集中的局部离群点和全局离群点,检测精度比较高。但是基于密度的LOF方法存在如下缺点,使其应用受到一定的限制。
    LOF方法在检测离群点的过程中,遍历整个数据集以计算每个点的LOF值,使得算法运算速度慢。同时,由于数据正常点的数量一般远远多于离群点的数量,而LOF方法通过比较所有数据点的LOF值判断离群程度,这产生了大量没必要的计算,造成时间成本太高,同时由于中间结果的存储而浪费空间资源。因此,假如能在计算离群因子前,剪枝一部分正常数据点,则可以提高LOF方法的计算效率。
    那么如何进行剪枝呢?考虑到K-means是一种效率很高的聚类的算法,CLOF算法利用了该聚类算法,对数据集进行剪枝,得到“离群点侯选集”,最后对该集合中的所有点执行LOF算法,从而判断是否是离群点。
    综上所述,CLOF算法的第一阶段是调用k均值聚类算法,聚完类后,可以得到k个类的中心(质点),然后求出类中所有点到该质点距离的平均值,这个平均值记为半径R,针对类中所有点,若该点到质点的距离大于等于R,则将其放入离群点候选集中。

    Liu Y , Li Z , Zhou C , et al. “Generative Adversarial Active Learning for Unsupervised Outlier Detection”, arXiv:1809.10816, 2018.

    参考资料

    1. makedown编辑教程
    2. 孤立森林论文1
    3. 孤立森林论文2
    4. STL
    5. STL论文
    6. LOF论文
    7. one-class svm论文
    8. arima论文该方法用于预测,而不是检测,上述几种方法都是用于检测
    9. DBSCAN论文

    AI中台化发展

    AI中台宜信

    展开全文
  • 数据异常】异常检测方法

    千次阅读 2018-09-27 14:45:04
    1.在线流数据异常检测(iforest隔离森林算法) 该方法的主要思想是,通过随机选定样本属性及其值将样本空间进行随机划分,分割的过程可以看成类似于随机森林中树建立的过程,对于新的样本,基于建立的隔离树求其...
  • 数据异常解决方法汇总

    千次阅读 2020-07-01 22:23:28
    测算每个因素对结果的“贡献度”碰到实在分析不出原因的数据异常怎么办? 本文转载自公众号:数据分析师成长记录 Step1:积极与需求方沟通 数据异常很大一部分原因是自身对问题的理解与需求方意图不一致导致的,...
  • java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”我遇到过这个问题后调查发现两个原因:1.你的excel模版本身有问题,可以尝试新建一个模版。2.你的excel使用了一些POI不支持的函数。Excel...
  • 数据分析-数据异常的排查方法 数据异常主要从两个大方向进行排查:①数据是否有问题?②业务是否有问题? 第一个方向:数据是否有问题,即数据是否是真的异常? (1)亲自查看数据准确性,不要人云亦云 (2)时间轴...
  • matlab数据异常点识别及缺失值处理

    万次阅读 多人点赞 2019-08-23 10:14:31
    数据异常点识别及缺失值处理part 1:缺失数据处理观察对比以下几种缺失值插补方法的效果part 2:异常值发现观察对比以下几种异常值查找并插补的效果基于滑窗的方法 % 此文件讲解如何对缺失数据进行插补以及如何识别...
  • 数据异常值处理

    千次阅读 2019-06-09 17:02:38
    在我们进行数据处理的时候,经常会遇到异常数据点,偏离平均值或者中位数比较远的点,这种异常值我们可以通过以下三种方式进行处理: 1,3西格玛法,即计算出数据的均值以及标准差,距离均值3个标准差之外的点...
  • 传感器数据异常预测-实战篇

    千次阅读 2020-03-23 16:07:07
    时序数据异常检测我一般分成两类,单信号和多信号。 单信号 对于一条数据异常检测,我划分成两类,与时序无关和与时序相关。 与时序无关 指的是单看信号即可完成异常的判断。这块主要方法就是数据质量监控。...
  • 数据异常的三种主要类型 (1)违背常识的错误 比如调查上海市某小区居民的月收入,出现了小王的收入为-5000,这就属于异常值 (2)数据的离群值 离群值是指与其他数据差异较大,会对数据分析结果产生影响的观测值,...
  • 使用SPSS对数据异常值进行探索分析

    千次阅读 2020-12-09 14:11:56
    我们在进行临床分析数据的时候,有时候常遇到临床数据结果和临床常识不一样的时候。比如按照临床经验,下图B指标应该随着A指标升高而不断升高的,但是在A指标在115到126左右这段A指标升高,B指标反而下降了,为什么...
  • 基于深度学习的日志数据异常检测

    万次阅读 多人点赞 2020-12-27 12:00:12
    基于日志数据异常检测 数据对象 智能运维(AIOps)是通过机器学习等算法分析来自于多种运维工具和设备的大规模数据。智能运维的分析数据对象多源运维数据包括系统运行时数据和历史记录数据,历史记录数据主要包含...
  • 如何应对接口数据异常

    千次阅读 2018-12-17 17:10:48
    如何应对接口数据异常1 已知字段名一致,格式变化2 字段不存在或者Entity未定义字段 1 已知字段名一致,格式变化 参考1:https://www.jianshu.com/p/d6bd6bd5fce3 ( 采取方法:自定义Gson响应体变换器和响应变换...
  • 格拉布斯的测试基于正态假设。...从数据集中删除该异常值,并且迭代测试直到没有检测到异常值。但是,多次迭代会改变检测概率,并且测试不应该用于六个或更少的样本大小(n>6),因为它经常将大多数点标记为异常值。
  • R语言数据异常值处理

    千次阅读 2019-11-03 08:47:23
    异常值简单来说就是偏离数据集整体的值。在统计学意义上,如果一个值偏离整体,那么就会影响其正态分布,进而影响需要以正态分布为前提的统计模型(如线性回归、方差分析)的结果准确度。 ###检验异常值的方法 ####...
  • Js中JSON.parse函数解析导致的数据异常 今天在项目中遇到一个问题,通过扫一扫功能将扫描的条形码返回给前端,前端同学返回返回的条形码不正确,后边两位和源数据对不上,只有Android有这个问题,只有Android有这个...
  • Peirce准则是消除异常值的统计程序。
  • 解决并发导致数据异常问题

    千次阅读 2018-11-15 11:05:50
    通常我们数据异常是由于并发导致的,那么我们如何避免这种问题呢? 举例: 当用户买充值卡时,我们一般会先查取数据库,然后改数据状态,给用户返回充值卡号,那问题来了 当同一时刻的用户一起购买充值卡时,就...
  • ETL工具kettle批量插入数据异常情况 众多的Etl工具中,kettle是一个不是特别稳定的一个工具,不是特别建议使用,那么在使用kettle进行数据转换时,经常会出现的一个问题:批量数据插入目标库时,会中途异常,导致...
  • 如果说数据不在ACID特性的保护下会发生不一致的现象,那么:  在ACID的保护下,是不是数据就一定不会产生不一致的现象呢?  在关系数据库系统中,多个会话(session)可以访问同一个数据库的同一个表的同一行...
  • RS485发送数据异常问题解决办法

    万次阅读 2018-06-13 10:58:47
    代码: ****************************************************************************** ...* 功能说明: USARTx发送数据 * 形 参: usartNum:USARTx序号; buff:数据指针; Len:数据长度 * 返 回 值: 无 ****...
  • web报表轻松实现数据异常预警功能

    千次阅读 2018-08-06 10:10:12
    在业务系统中,经常会看到这样的数据显示需求:一些特殊数据有规定的标准范围,超出标准范围的数据我们要标红预警显示,告知客户此数据异常,也就是我们说的数据预警,效果如下图所示,红色显示了当运货费大于100...
  • 出现3F是奇偶校验错误导致的,你可以将奇偶校验属性设置为none,至于出现短文,是由于数据接收不完整导致,你可以在读取缓存数据的时候延时个20ms就可以了 转载于:https:...
  • 数据异常波动,应该如何分析?

    千次阅读 2020-04-21 21:37:00
    ↑关注 + 置顶 ~ 别错过小z的干货内容来源:python数据分析和机器学习对于一枚数据分析师而言,监控日常指标数据是必不可少的工作之一,数据异常分析是数据分析工作中最常见且重要的...
  • Python数据分析入门笔记1——学习前的准备 Python数据分析入门笔记系列文章目录一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 # 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的...
  • 孤立森林算法适用于连续数据异常检测,将异常定义为“容易被孤立的离群点”,可以理解为分布稀疏且离密度高的群体较远的点。用统计学来解释,在数据空间里面,分布稀疏的区域表示数据发生在此区域的概率很低,因而...
  • 数据清洗:异常值识别和处理方法

    千次阅读 2022-04-26 10:47:46
    对异常数据进行处理前,需要先辨别出哪些是真正的数据异常。 从数据异常的状态看分为两种: 一种是“伪异常”,这些异常是由于特定的运营动作产生,其实正常反映了业务状态。 一种是“真异常”,这些异常并不是...
  • 数据预处理之异常值处理

    千次阅读 2022-03-31 17:59:30
    在一般的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常点,通常异常点在预测问题中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,977,706
精华内容 791,082
关键字:

数据异常