异常值检测

2018-04-04 15:05:01 浏览数 (1)

之前发过一篇讨论文章——异常值怎么整。

在原文评论区里(戳此→异常值怎么整?| 讨论)得到了各位大大的指教,数说君也受益匪浅,现在整理一下供大家参考:

聚类

很多人提到聚类,通过距离发现一些距离很远的点,是一个常用的方法。

异常值识别除了看残差图还可以看影响分析DFFITS准则Cook统计量辣些。如果是按时间先后排列的,出现异常值很有可能是有断点,计量里边比较经典的是邹断点检验了昂,然后可以考虑加虚拟变量解决。单纯的截面数据老师说可能是由于结构出了问题(然而并没有遇到过)。反正出现异常值不要第一反应就是去掉了昂~

假设我有80年的时间序列数据,前面30年数据和后面50年数据的走势完全不同,拟合出来的模型也当然会不同,那么就说数据出现了断点或转折点。这位同学提出了高级计量里的邹氏检验,让我觉得这次讨论非常值。

单指标一般看时间序列图就可以直接识别,这种异常值虽然统计上定义为异常但是最终决定是否异常的主意还是要看实际业务,比如:如果一个网站频道CR在某一天明显下降,但是很有可能是这一天有大量爬虫进来导致访问量激增的结果;如果多指标可以主成分后再综合排序,选出ToP几和Last几之后再结合业务特点分析原因…一言以蔽之就分析异常一定结合业务逻辑

非常经典的思路,后面分享的一个芝加哥大学PPT中,就用了这个思路:

PCA提取多指标的主成分——进行聚类或者排序——找出异常值/点

我做面板数据一般都是缩尾异常值(winsorize),相当于人为censored保留其部分信息,使后续分析结论更稳健

异常值有很大的价值,需要提取出来进行专门分析,但有时候为了把握大势或者总体规律,或者为了发文章扑项目,不得不进行缩尾处理。

(๑• . •๑)一直都很想搞清楚异常值和缺失值该怎么处理~~之前都是根据业务背景处理,方法比较“粗暴”,数说君赶紧点拨一二吧::>_<::

我想说根据业务背景处理也非常重要,有时候统计分析半天,还不如专业人士扫一眼...

异常值是一个小的研究方向,2013年的时候有美国的大牛写了一本书outlier analysis,系统介绍了异常值的处理方法

非常感谢,数说君找到了电子版,大家可以自行下载:

http://bbs.pinggu.org/thread-2595321-1-1.html

感谢在评论区里留言的大大们:

傅培国、Rpanda.W?、冬眠中的M小姐、释冰燃、钱亦欣、Koonie Tseung、Thinkdeeper


除了outlier analysis这本书,数说君分享一个PPT。作者是芝加哥大学的Robert Grossman。

简单翻译一下大体内容:

题目是”大数据集中监测异常值的方法“,主要内容有3点:

1. 概括三种异常值检测方法

方法1:对总体进行统计建模来检测异常值

  • k个标准差以外的;
  • 用指数加权移动回归;
  • 类似CUSUM的一些方法,可以最快速的检测到一些变化。

方法2:聚类法

聚类之后,通过比较每个点到每类的距离,可以发现异常点。但是,

  • 距离的定义有很多种;
  • 聚类的方法也不止一种。

因此最终的结果也不是一定的。

方法3:近邻比较

比较与周围点的分布密度,比如某一段的密度曲线明显与周围其他地方不一样,那么就存在异常情况。

2. 概括三种数据

有监督的数据:即知道哪些数据是正常的哪些是异常的;

无监督的数据:没有标签,不知道哪些是异常的哪些是正常的;

半监督的数据:只知道部分数据的标签,它们是异常还是正常。

3. 举了三个例子

例1:FMRL中的活跃三维像素

(FMRL:功能性核磁共振成像技术)

这个例子首先给鲑鱼show一组照片,照片里有人,这些人在不同的社会环境下,表现出来的情绪也各不同。给鲑鱼看完照片之后,将鲑鱼拿去进行核磁共振扫描(文中说扫描的时候已经死了,之前看照片的时候应该是活的),

这个研究就是利用鲑鱼来判断照片里人的情绪。

很神奇吧??

但是它跟本文基本没什么关系!从这个例子,作者引出的的多重校正才是重点。

多重校正其实也算是一种异常值的检测方法,进行多次独立test之后,比如1000次,有很多显著的结果,比如其中的100个都是显著的,但这100个中肯定有很多是由于”test太多了,碰巧造成的“,因为我们设定P=0.05,本身的意义就是”允许100次犯5次错误"嘛。

关于多重校正,数说君之前专门写过一篇文章,戳这里:浅议P值校正

例2:光谱异常值检测

这个例子要检测有异常光谱的像素。怎么做的呢?简单来说三点:

1)对每一个 像素 的一系列 光谱值 进行主成分分析,提取前5个主成分。

2)在转换过的5D空间里(对应5个主成分),进行K均值聚类。k=50,距离采用马氏距离。

3)根据每个点到类(一般是我们感兴趣的那个类)的距离,对每个点进行异常程度打分,将结果可视化。

这个例子中,使用的工具是Hadoop和Accumulo,算法是聚类、PCA。该项目在操作上,每天都整理好一些异常值给领域专家检查。

例3:疾病发病率在地理空间上的变化

工具上,该项目用private secure OpenStack cloud来储存数据,算法是基于近邻的bootstrap(Neighbor based bootstrap,NB2),在操作上特别注意结果的显现和可视化。

例4:POS机支付信息的异常检测

这个项目中简单来说也分三步:

1)作者分了很多层建模型,对每个银行建模(银行维度)、对每个区域建模(区域维度)、对每种交易类型建模(交易类型维度)。

2)对于三个维度空间里的每个子空间(cell),建立一个基准模型(baseline),最后可能会有几千个基准模型。

3)对每个POS机的支付行为,比较其与基准模型的差异,并对异常程度进行打分,可视化结果。

由于没有这方面的项目经验,这个例子我看的也不是很懂,如果有了解的行内人希望给科普一下~

总之,在这个PPT中,作者强调:

异常值是指与其他观测值偏离很大的值,这样的大偏离,让我们怀疑它是否由一个不同的机制所生成的。异常检测就是要寻找出背后这个机制。 我们将异常值就简单定义为,由一个不同的机制或者总体所产生值。

以上是数说君个人的理解,详细还是看PPT吧:

:


0 人点赞