R中的异常值检测

发布时间: 2016-01-04 阅读数: 1440

引言

受Netfix帖子的启发,我决定写一篇如何利用R语言实现该异常值检验的博文。

有好几个非常棒的软件包可以实现这个功能,本文所采用的是AnomalyDetection包

你可以从这里下载完整的R语言代码。

正常值 VS 异常值

异常值的定义是:和大多数样本表现不一致的个体。

数据噪声:就好比当你收听一个信号不好的无线广播时,你会听到许多背景噪声。

1、 图中橙色区域的数据围绕某个值上下波动并且没有表现出确定的趋势,我们称之为白噪声数据。

2、 图中红圈中的数据是噪声数据吗?抑或是某种未发现趋势的峰值呢?

一个好的算法可以检测出异常值并将其剔除掉,AnomalyDetection包中的AnomalyDetectionTs函数可以很好地实现这个功能。

异常值检测实例

本文案例采用的是维基百科的数据,我们可以利用R通过API接口下载某个特定词项每日浏览量的数据。

本文的研究数据是:英文词语fifa从2013-02-22至今每日浏览量的数据。

应用上文提到的算法,我们可以绘制出原始的时间序列图并标注出异常值的位置。

算法解析

算法中的参数max_anoms=0.01表示在最终结果中标注出0.01%的异常值;而参数direction="pos"则表示检测高于平均水平的异常值。 如下表所示,该算法不仅可以检测出异常值,还会返回对应的平均水平值。

如果你想了解更多的关于该算法的数学原理,你可以搜索Generalized ESD和时间序列分解。

发现异常情况

上图中黑色直线表示该时期内的浏览量呈递减趋势。有趣的是,位于直线上方用黑圈标注出来的两个点并没有被判定为异常值,这是因为该异常值检测算法主要关注的是趋势变化时的情况。黑圈中的点还是处于下降趋势中,所以没有被判定为异常值。相反地,2014-07-12的浏览量突然上升,突破前期的下降趋势,因此该点被判定为异常值。

新闻核实

词语fifa浏览量的异常值与国际足联的新闻消息息息相关,第一组异常值出现在2014年世界杯期间(2014年6 - 7月),而第二组异常值出现在国际足联丑闻事件期间(2015年5月)。 洛杉矶时报中展示了国际足联丑闻事件进展的时间表,正如我们算法所检测出的异常值,该丑闻事件有两个重要的时间点:5月27日和28日。

本文转载自数据工匠,原文请参考Anomaly Detection in R作者hrbrmstr。转载请注明链接http://www.xueqing.tv/cms/article/100

分享到:
热门文章

REmap发布,用R绘制百度迁徙图

2015年07月23日更新 21725次阅读

学习R语言,一篇文章让你从懵圈到入

2016年05月09日更新 15399次阅读

在R中填充缺失数据—mice包

2015年12月31日更新 11842次阅读

清华大学教授:大数据时代 统计学依

2015年08月07日更新 11480次阅读

精通 R plot—第一部分:颜色

2016年01月20日更新 10744次阅读

学习Tableau的六大好处(一个

2015年12月24日更新 8610次阅读
热门课程

R语言初级课程

2015年02月20日发布 3293名学员

R语言高效数据清理工具包dplyr

2015年08月30日发布 1728名学员

R语言数据分析入门

2016年05月10日发布 1625名学员

如何用R做数据预处理

2016年06月03日发布 1180名学员

全栈数据工程师养成攻略

2016年11月08日发布 1068名学员

R语言大规模数据分析实战

2015年12月17日发布 959名学员
登录 注册