大规模时间序列数据自动异常检测架构

Yahoo大规模时列数据异常检测技术及其高性能可伸缩架构

本文已经在InfoQ首发

本文是Yahoo在ACM国际会议上发布的一篇关于时序数据自动异常检测上的学术论文,对在智能监控尤其是趋势预测、异常数据监测和报警等方面的技术同学具有一定研究和参考价值,以下是中文翻译,部分内容进行了删改,附录是该论文的英文原文,方便读者查阅。由于笔者知识有限,内容翻译不恰当之处欢迎批评指正共同讨论。

作者介绍

彭冬 Andrew(微博@AndrewPD,微信 justAstriver

新浪微博广告业务部架构师,目前负责广告核心引擎基础架构、Hubble系统D+ 商业数据平台建设及基础架构团队管理工作。关注于计算广告、大数据、人工智能、高可用系统架构设计。 Innovation and Open, Technical,Extremely Perfect

关键词 : 智能监控 EGADS 故障检测 机器学习 Yahoo 趋势预测 模型

1. 摘要

本文介绍了大规模时序数据自动异常检测的通用和可扩展框架。能够在早期检测到系统异常,无论在维护用户数据一致性方面,还是在保护企业免受恶意攻击都发挥着非常关键的作用。现有技术在异常检测方法受到可扩展性和易用性上都存在很大问题。我们在雅虎(EGADS)的系统设计了基于异常检测和预测模型构建的异常过滤层,用于准确地进行时序数据的异常检测。我们比较我们的方法与其他异常检测系统对实时和合成数据的不同时间序列特征。EGADS框架在精度和召回率提高了50%~60%。

2. 简介

虽然计算硬件和软件的快速发展已经极大提高了应用程序的可靠性,但是在大型集群中仍然存在大量的软件错误和硬件故障。系统要求7*24小时不间断运行,因此,对这些系统的持续监控就至关重要。从数据分析的角度来看,这意味着不间断地监视大量的时间序列数据,以便检测潜在的故障或异常现象。由于实际中的系统异常或者软件BUG可能会非常多,通过人工监控几乎是不可能的,因此非常有必要使用机器学习和数据挖掘技术进行自动化异常检测。

异常值本质上是一个数据点。通常,大多数应用程序中的数据是由一个或多个反映系统功能的程序产生的。当底层应用程序以不正常的方式运行时,它会产生异常值。快速高效地发现这些异常值非常具有价值,比如在:入侵检测,信用卡欺诈,传感器事件,医疗诊断,执法等。

我们在雅虎的系统被称为EGADS,它可以准确和可扩展地检测时间序列异常。 EGADS将预测、异常检测和警报分为三个单独的组件,允许人员将自己的模型添加到任何组件中。本文重点介绍后两个组件。

EGADS是第一个灵活、准确、可扩展和可扩展的异常检测综合系统。 EGADS框架与异常检测基准数据一起开源,帮助学者和行业合作开发新的异常检测模型。在雅虎,EGADS每天被许多团队用于数百万次的时间序列异常检测工作。

整体架构

EGADS框架由三个主要部分组成:时间序列建模模块(TMM),异常检测模块(ADM)和报警模块(AM)。给定一个时间序列,TMM组件模拟产生时间序列,由ADM和AM组件进行消费处理,分别计算误差并过滤不感兴趣的异常。这些组件在第3和4节中有详细描述。

EGADS被构建为一个框架,可以轻松地集成到现有的监控基础设施中。在雅虎,我们的内部雅虎监控服务(YMS)每秒处理数百万个数据点。因此,对YMS进行可扩展,精准和自动化的异常检测至关重要。接下来我们将详细描述YMS的具体细节。

2.1系统集成

EGADS作为独立平台运行,可用作大型系统中的库。因此,设计EGADS和内部雅虎监控服务(YMS)之间的接口至关重要。 EGADS与YMS的集成架构图如图1所示。
这里写图片描述

图1 EGADS-YMS 整体架构

此外,异常检测,还需要几个支撑组件来驱动完成。首先,所有的异常检测模型都是离线批处理(batch)生产的,然后应用到实时环境(real time)。其中批处理由三个步骤组成:

  • 监测(即监视的时间序列数据)数据批量存储在Hadoop集群上
  • 批量模型生成器针对这些数据运行,并为目标时间序列构建模型
  • 模型存储在模型数据库中

然后在线实时流使用这些存储的模型,具体步骤如下:

  • 数据流入Storm进行流式处理
  • 集群中的一个模块调用EGADS ADM,根据存储在模型数据库中的模型来评估输入数据点
  • 如果存在异常,则将其发送到由组合规则和其他包含特定逻辑组成的辅助规则流(见第4节)
  • 根据规则,如果异常是警报事件,则生成事件,存储在状态数据库中,并转发到警报路由系统
  • 警报路由系统应用路由配置规则将警报发送给相应的处理人员

2.2 可扩展性

EGADS的监控需要每秒分析超过百万级数据点,亿级别时间序列。要求在CPU负载,I/O和内存占用方面具有可扩展性,并且数据点的处理需要尽可能高效。这意味着需要预先计算尽可能多的模型。从磁盘读取模型是不切实际的会降低性能,因此模型应该存储在内存中。另一方面,为了控制成本,模型应尽可能小。

异常检测算法

在本节中,我们给出了EGADS支持的异常检测算法。目前,EGADS能够检测出三类异常:

  • 异常值:给定输入时间序列x,异常值是时间戳值对(txt),其中观测值xt与该时间序列的期望值(即 E(xt))不同
  • 波动点(Change Points):给定输入时间序列x,波动点是指在某个时间t,其状态(行为)在这个时间序列上表现出与t前后的值不同
  • 异常时间序列:给定一组时间序列X={xi},异常时间序列xjX是在X上与大多数时间序列值不一致的部分

在以下部分中,我们给出了EGADS当前用于检测上述异常类型的方法。

3.1 异常检测

检测异常值是许多监控应用中最重要的功能。EGADS提供了两类用于检测输出的算法,这些在本节中进行了描述。

3.1.1 插件方法

EGADS中异常值检测的第一类方法称为插件方法。为了模拟输入时间序列的正常行为,可以业务和时序数据的特点来插入大量的时间序列模型和预测模型(例如ARIMA,指数平滑,Kalman滤波,状态空间模型等)。这就是为什么我们将这个总体策略称为插件方法。应该注意的是,所有这些模型都在EGADS中用于时间序列预测,这是我们框架的另一个特征;然而,由于本文的重点是异常检测,更多关于EGADS的建模和预测特征的细节我们不进行更深入的讨论。

我们提出的插件框架由两个主要组件组成:时间序列建模模块(TMM)和异常检测模块(ADM)。给定时间序列X={xtRt0},TMM提供时间txt的预测值,由ut表示。我们也将这个量称为xt的预期值(不要与期望的数学概念混淆)。TMM可以是机器学习模型,其基于数据或基于规则进行预测,在时间t上挖掘数据点xt的具体表现特征(如波动或异常)。本文中,可以认为TMM只是一个可以产生预测的黑匣子模块。在这个意义上,我们提出的框架是通用的,不依赖于任何特定的时间序列建模框架。

给定预测值ut和实际观测值xt,ADM计算一些我们称为偏差度量(DM)的偏差概念。最简单的衡量偏差的方法是预测误差,即:

PEt=xtut
。如果错误超出某些固定阈值,则会发出警报。这种简单的方法在某些情况下可能会起作用,但是对于大多数的方法来说,它不会是一个很好的策略,因为它不能捕获到相对错误的具体信息。

相对误差REt定义为ut的一个因素:

REt=xtutut=xtut         (1)

通过对相对误差进行阈值处理,可以检测异常值,同时对所期望值的幅度进行归一化。虽然这些阈值确定了异常检测模块的敏感度,然而,很难确定异常检测的最佳度量。事实上,给定时间序列的最优度量的选择取决于时间序列的性质以及TMM性能。例如,如果我们处理一个非常规则的时间序列,我们有一个准确的模型,使用预测误差进行异常检测可能就足够了,因为它预期是正常分布的。在其他情况下,最佳度量可能在预测误差和相对误差之间存在某种差异。因此,EGADS默认跟踪一组偏差度量,使用系统的人可以创建自己的错误度量。在第4节中描述的警报模块(AM)中使用这些错误度量以及其他功能(如时间序列特征)来了解用户的偏好并过滤不重要的异常。

3.1.2 基于分解的方法

EGADS中第二类异常值检测方法是基于时间序列分解的思想,在时间序列分析中,通常将时间序列分解为:趋势、季节性和噪声的三个要素。通过监测噪声分量,可以捕获异常值。更准确地说,如果点xt的噪声分量的绝对值大于某个阈值,则可以认为xt为异常值。

3.2 变点检测

在一些文献里有提到一种基于时间窗口的变点检测技术,在EGADS中,目前采用基于模型的方法。在这些方法中,时间序列的预期行为通过3.1.1节中提到的建模技术建模。我们结合3.1.1节中描述的插件方法来计算输入时间序列的残差序列(或模型预测的偏差)。然后我们对残差系列应用绝对变化点检测的方法来检测残差分布。我们使用内核密度估计(Kernel Density Estimation)非参数估计残差分布和Kullback-Leibler(KL距离,常用来衡量两个概率分布的距离)来测量分布变化。

3.3 检测异常时间序列

EGADS支持的另一类异常检测技术涉及检测异常时间序列。异常时间序列T定义为与其他时间序列有明显的平均偏差的时间序列。假设所有的时间序列是均匀的,并且来自相同的源(即,是相同簇的一部分),则可以简单地计算相对于其他时间序列的时间序列(i)的平均偏差。在EGADS中,我们目前的方法是基于各种时间序列特征将时间序列聚类到一组簇 C 中,包括趋势和季节性,光谱熵,自相关,平均欧几里德距离等。在聚类后,我们通过测量集群质心内和之间的偏差和时间序列(i)执行帧内或群集时间序列异常检测。这种EGADS异常检测类型的常见场景是用来进行分类。例如,如果网络工程师希望在数百万个时间序列中找到异常的服务器,那么以前的方法可能不切实际,因为建模是按照每个时间序列的基础完成的,而不考虑其他度量的行为。这种异常检测类型的另一个应用是发现类似的异常,这与以前的场景相反。

报警

异常检测的最终目标是产生准确和及时的警报。 EGADS通过两阶段过程实现这一点,首先通过阈值选择产生一组候选异常,然后对给定的规则过滤不相关的异常。

4.1 阈值选择

阈值选择的作用是根据异常检测模块(ADM)产生的偏差度量选择合适的阈值。目前,EGADS基于以下两种阈值选择算法实现:

(a)Kσ 偏差

(b)密度分布

第一种方法是参数化的,并假定数据正态分布,有明确的平均值和标准偏差。依靠高斯分布,并根据为“3sigma规则”(即:其中99.73%的样本位于平均值的三个标准偏差之内。因此,根据Kσ中的K值,可以确定在时间t观测样品的可能性。根据所需的敏感度,可以测量给定的样品是否在K = 2或1的所有样品的95.45%或68.27%之内。请注意,这里的假设是我们的偏差度量是正态分布的。 第二种方法是非参数的,并且对于偏差度量不是正态分布的情况是有用的。基本思想是找到偏差度量分布的低密度区域。一种方法是使用诸如局部离群因子(LOF)的算法。通过将对象的局部密度与其邻居的局部密度进行比较,可以识别具有相似密度的区域,以及具有比邻居密度明显更低的密度的点,这些点被认为是异常值。

4.2 过滤

过滤是传递给应用的最后阶段的处理。虽然作为过滤阶段的输入的候选异常在统计上是显著的,但并不是所有异常都与特定用例相关。例如,一些应用对时间序列中的尖峰感兴趣,而其他应用对下降感兴趣,而其他应用对变化点感兴趣。 EGADS提供了一个简单直观的界面,允许用户标记时间序列的哪些区域是异常的。然后,该反馈被EGADS与时间序列和模型特征一起用于训练一个分类器,该分类器预测异常ai是否与用户uj相关。 EGADS使用的时间序列数据特征如表1所示。

表1 EGADS所使用的时序数据特征表
时间序列功能 描述
周期(频率) 周期对于确定季节性非常重要。
趋势 如果平均水平存在长期变化,则存在
季节性 当时间序列受季节性因素影响时,如一年中的一个月或一周中的某一天
自相关 代表远程依赖。
非线性 非线性时间序列包含通常不由线性模型表示的复杂动力学。
偏态 测量对称性,或更加明确地说,缺乏对称性。
峰度 如果数据相对于正常分布达到峰值或平坦,则采取措施。
林中小丘 衡量时间序列的长期记忆。
李亚普诺夫指数 衡量附近轨迹的发散速度。

图2显示了样本时间序列的特征曲线。请注意,以dc开始的指标是在时间序列上经过调整后(即删除趋势和季节性数据后)得到的。在第6.2节中,我们将看看这些时间序列特征如何影响模型性能。

这里写图片描述

图2:EGADS提取的时间序列及其特征的一个示例

实验研究

6.1数据

用于实验的数据集由1:1的合成和真实数据混合而成。我们已经创建了一个合成的时间序列生成工具,该工具随着框架和基准数据的开放。使用该工具,通过指定长度,幅度,异常数,异常类型,异常大小,噪声水平,趋势和季节性来生成合成时间序列。真实数据集使用了雅虎会员登录数据(YML)。合成和真实数据在时间序列都包含3000个数据点,YML数据包含了3个月的数据点。除非另有说明,所有实验均以1000次随机选取的时间序列进行,结果取平均值。还要注意,合成和真实数据都有异常标签,方便测量精度和召回率。

6.2建模实验

时间序列建模(由EGADS中的TMM组件捕获)是异常检测的基本部分。通常情况下,异常检测与底层时间序列模型一样好。由于大量的候选模型,模型选择变得至关重要,并且取决于时间序列特征和可用资源。在下面的实验中,我们展示了时间序列特征对模型性能的影响,并显示了精度,实验中使用的模型和误差度量分别参见表2和3。

表2 用于建模实验的模型列表

模型 描述
Olympic Model 季节模型,其中下一个点的预测是先前n个时期的平滑平均值
指数平滑模型 用于产生平滑时间序列比较流行的模型,双重和三重指数平滑变量增加了模型的趋势和季节性,用于实验的ETS模型自动选择最佳“拟合”指数平滑模型
移动平均模型 在这种模式下,预测是基于人为构建的时间序列,其中给定时间段的值被该值的平均值和一些前后时间段的值所取代,加权移动平均和初始预测模型是移动平均模型的特例
回归模型 使用一个或多个变量来对xy之间的关系进行建模
ARIMA Autoregressive integrated moving average
(T)BATS系列 带有Box-Cox变换的指数平滑状态空间模型

表3 用于建模实验的指标列表

模型 描述
Bias 误差的算术平均值
MAD 平均绝对偏差,也称为MAE
MAPE 平均绝对百分比误差
MSE 误差的均方
SAE 绝对错误的总和
ME 平均误差
MASE 平均绝对比例误差
MPE 平均百分比误差

6.2.1时间序列特征和性能

为了证明时间序列特征对模型性能的影响,我们比较了不同模型的时间序列与不同特征的误差度量(见4.2节)。图3显示了时间序列特征在模型行为中起着重要作用。例如,季节性模式的Olympic模型在数据集上表现不佳,没有季节性和强劲趋势。 EGADS能够跟踪历史时间序列特征和模型性能,使用这些历史信息,EGADS选择由表3中描述的误差度量判断的最佳模型(给定时间序列特征)。实际上,基于数据特征进行模型选择比针对每个模型执行交叉验证要快得多。

这里写图片描述

图3 具有不同特性的时间序列性能

6.2.2时序模型的可扩展性

如第2节所述,时序模型需要高性能技术以支持大规模(例如每秒数百万点)数据流的实时计算,因此需要在模型大小、训练时间和准确性之间进行权衡。 这种权衡在图4(a)和4(b)中可以看出。 例如,从图中可以看出,季节性天性模型很快训练,但是具有较大的存储要求和较高的平均误差。 在雅虎,首先设定了资源和模型训练时间的目标,然后选择相应的模型。 换句话说,目标是将资源和模型建立时间限制下使得表3中的错误减到最小。

这里写图片描述

图4 模型大小与训练时间的权衡

6.3异常检测实验

在本节中,我们比较了开源系统与EGADS,参考的开源系统如表4所示。

表4 开源异常检测模型(系统)列表

模型 描述
EGADS ExtremeLow-密度模型异常值 EGADS基于密度的异常检测
EGADS CP 基于EGADS内核的波动点检测
EGADS KSigmaModel异常值 EGADS重新实现了经典的k-西格玛模型
Twitter Outlier 基于广义ESD方法的开源Twitter-R异常检测库
ExtremeI&II R异常值 开源单变异常值检测,阈值绝对值和残差检测异常
BreakOut Twitter CP 来自Twitter基于ESD统计测试来检测变化点的一个库
ChangePt1 R CP 一个R库,实现各种主流和专门的变化点方法,用于在数据中查找单个和多个变化点
ChangePt2&3 R CP 检测平均值和变量的变化

在图5显示了对6.1节中描述的数据的测试结果,比较方法采用:

F1Score=2××+

这里写图片描述

图5 异常模型在不同数据集上的表现(观察到在所有数据集上没有最好的单一模型)

结果可以看出,没有一个最佳的异常检测模型能适合所有业务场景,不同的算法需要结合检测不同类型的异常来确定。例如,Twitter在数据集TS2上表现最好,而ExtremeLowDensity模型在TS3上表现最好。但是,EGADS的设计初衷是在用户对数据类型的时间序列和异常类型不了解的情况下,该系统能够优雅和稳健地处理数据中存在的各种异常现象。因此,EGADS被构建为将一组异常检测模型组合成一个最佳的框架的库。这些模型的异常被转发到过滤组件以进行精确的异常检测。

6.4异常过滤实验

异常的重要性往往取决于实际应用场景。具体来说,一些用户可能对展示恶意攻击的时间序列行为感兴趣,而其他用户可能对收入有兴趣。
为了解决这个要求,过滤阶段扫描所有模型的所有异常ai,并使用分类为ai作为真正的模型。在YM用例的过滤阶段使用的模型是基于AdBoost的增强树模型。模型中使用的特征参见表1。AdaBoost的核心原理是在变化的数据上进行适合一系列weak learners(例如,小决策树),最后的结果是通过组合加权多数表决产生的。图6中的实验结果表明,在滤波阶段使用不同的模型特征,得到比较好的精确率和召回率。

这里写图片描述

图6:使用不同类型特征的过滤阶段的精度

结论

异常检测是许多具有故障应用的实时监控系统的核心部分, 检测,欺诈检测,网络入侵检测等等。尽管它至关重要,但实际上实施全自动异常检测系统是一项具有挑战性的任务,这些挑战通常导致解决方案不是可扩展的或高度专业化的,也导致了较高的误报率。

在本文中,我们介绍了EGADS,雅虎实现的通用异常检测系统,对不同的Yahoo属性进行数百万个时间序列进行自动监控和警报。正如我们在本文中所描述的,Hadoop上的EGADS的并行架构以及它通过Storm的流处理机制使得它能够在雅虎的数百万个时序数据集上执行实时异常检测。此外,EGADS采用不同的时间序列建模和异常检测算法来处理不同的监控场景。通过将这一组算法与机器学习机制结合在警报模块中,EGADS自动适应对用户重要的异常检测用例。所有这些功能都有效地创建了一个功能强大的异常检测框架,它是通用的和可扩展的。我们对真实和综合数据集的展示实验表明,与其竞争对手的解决方案相比,我们的框架具有优越的适用性。

EGADS的设计本质上是可扩展的,为系统中插入新的模型和算法提供了一种简单的机制。我们的框架及其所有数据集都已经开源。

原文地址:Generic and Scalable Framework for Automated Time-series Anomaly Detection

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页