Twitter开源云环境时间序列数据断层检测工具BreakoutDetection

更新时间:2014-10-29 10:10:21点击次数:961次

区别于传统环境,鉴于云环境中众多不可预测的因素和异常,其时间序列breakout检测并不容易。近日,Twitter开源了一款基于E-Divisive with Medians(EDM)的breakout检测工具,旨在更好地分析复杂环境中的时间序列数据。


以下为译文


当下,大数据已经深入影响到各个领域,其中包括新产品决策制定、用户参与程度衡量、产品的定制化推荐、医疗、数据中心效率等。


而着眼数据类型,时间序列数据无疑是非常常见的一种形式。随着数据收集和挖掘成本的下降,包括Twitter等越来越多的公司每天都会使用大数据技术执行数百万的度量。而在生产环境中,时间序列也常常因为内在或(和)外在的因素而产生breakout(断层,跳跃),不幸的是,这些breakout往往可能会从本质上影响到用户体验或者(和)业务底线。举个例子,在云基础设施环境中,系统度量时间序列数据突变(类似硬件故障影响等因素)可能就会对服务的可用性和性能产生影响。


鉴于Twitter的实时特性(高性能已经成为最佳用户体验交付的关键所在),具备及早发现breakout的能力无疑至关重要。同时,breakout监测还常常被用于考量现实生活中一些流行事件的用户参与形势,比如奥斯卡奖、超级碗、世界杯等。


Breakout由两个稳定状态和一个过渡区间构成。概括来讲,breakout分为两种:


均值漂移(Mean shift):时间序列的突发性变化。举个例子,CPU使用率忽然从40%跳到60%就是个均值漂移。


平滑改变(Ramp up):一个渐变的过程,两个平稳状态之间平滑的转变。举个例子,CPU利用率缓缓地从40%提升到60%。


下图阐述了现实数据中的多个均值漂移

  

鉴于度量上的每个增值都可以被收集,breakout的自动化检测已势在必行。当下已经不乏许多传统环境下的breakout检测研究,但是却不存在云数据中的breakout检测技术。这种情况主要归结于现存技术在异常环境中不具备足够的鲁棒性,而这些异常在云数据中又恰恰经常出现。


今天,我们非常高兴的公开BreakoutDetection,一个可以便捷和快速监测breakout的开源R包。通过BreakoutDetection,我们希望社区可以像Twitter一样从中获益,并且促进它的快速发展。


BreakoutDetection建立的原因非常简单,我们期望在异常环境中拥有一个鲁棒性良好的工具,站在统计的角度上对breakout进行检测。当下,BreakoutDetection包已可被用于各种各样的环境中,举个例子,它可以在用户参与的A/B测试环境中检测breakout,也可以被用于行为变化的检测,或者解决计量经济学、金融工程学以及社会科学等领域的问题。


BreakoutDetection工作机制


这个包实现了一个被称为E-Divisive with Medians(EDM)的算法。同时,EDM同样可用于给定时间序列中的分布变化。EDM使用了一个 极具鲁棒性的度量指标,也就是通过中值,使用排列检验来概算一个breakout的统计显著性。


此外,EDM是非参数型的。鉴于生产数据很少遵从通常的假定正态分布以及其他公认模型,非参数型这一点非常重要。而在我们的实践中,时间序列往往包含一个以上的breakout。有鉴于此,BreakoutDetection包同样可以被用于给定时间序列上的多breakout检测。


开始使用BreakoutDetection


在R控制台中使用如下命令安装这个R包:


install.packages("devtools")

devtools::install_github("twitter/BreakoutDetection")

library(BreakoutDetection)

breakout函数被调用以检测给定时间序列上的一个或多个统计显著性breakout,你可以使用以下命令来获得breakout函数的帮助文档:


[js] view plaincopy在CODE上查看代码片派生到我的代码片

help(breakout)  

简单用例


为了完成这个例子,我们建议用户使用BreakoutDetection包中包含的实例数据集,这个操作可以通过以下命令完成:


data(Scribe)

res = breakout(Scribe, min.size=24, method='multi', beta=.001, degree=1, plot=TRUE)

res$plot

通过上面的操作,你可以获得下图


  


从上图我们可以得知,我们发现给定时间序列中存在一个breakout,同时还存在大量的异常。两个垂直红线中间的部分显示了由EDM算法检测出的breakout。区别于上文我们提到的常见方法,EDM在多异常环境下表现出了良好的鲁棒性。时间序列上出现的平均变化可以通过下方注释图更好地进行理解:

上面注释图中的水平线相当于每阶段的近似均值。


博文链接: Breakout detection in the wild

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息