EGADS框架处理流程分析

最近在搞异常检测相关的工做,所以调研了业界经常使用的异常检测系统。经过查阅相关资料,发现业界对雅虎开源的EGADS系统评价比较高,其git项目已有980个star。这周阅读了项目的源码,梳理了系统框架的基本处理流程,整理成这篇文章。现分享给你们,但愿对想了解EGADS系统工做原理的同窗有所帮助。java

1. 简介

EGADS (Extensible Generic Anomaly Detection System 可扩展通用的异常检测系统) 是雅虎开源的java库,用于自动检测大规模时序数据中的异常。它包含了许多异常检测技术,适用于不少使用状况,只须要一个包,惟一依赖是java。EDADS的工做原理是,首先创建一个时间序列模型来计算时间t的预期值,而后经过对比时间t的预期值和实际值,计算出若干偏差E。EDADS自动肯定E的阈值,并输出最有可能的异常点。EGADS库能够在各类各样的情形中使用,以检测具备各类季节性、趋势和噪声成分的时间序列中的异常点和变化点。git

EGADS可以准确、可扩展地检测时间序列的异常。EGADS将预测和异常检测分离成两个独立的组件,容许用户将本身的模型添加到任何组件中。github

2. 总体架构

EGADS框架由两个重要部分组成:时间序列建模模块(TMM)和异常检测模块(ADM)。给定一个时间序列,TMM组件对时间序列建模生成预期值,该值随后被ADM消费并计算出异常评分。EGADS是做为一个框架构建的,能够很容易地集成到现有的监测基础实施中。Yahoo内部的Yahoo监控服务(YMS)每秒处理数百万的数据点。所以,有一个 可扩展的、准确的和自动化的异常检测 对于YMS相当重要。基于此,EGADS能够编译成一个轻量级jar包,而且很容易大规模部署。TMM和ADM能够在main/java/com/yahoo/egads/models找到。shell

EGADS系统将输入数据转化为时间序列,而后选择一个时间序列模型应用于时间序列,构成时间序列建模模块(TSMM),再把异常检测模型应用于时间序列建模模块输出的预测值,构成异常检测模块(ADM),最终把检测出的异常点写入DB。总体架构以下图所示。架构

egads系统集成

3. 框架处理流程

EGADS的github上给出了一个简单使用案例:框架

java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads src/test/resources/sample_config.ini src/test/resources/sample_input.csv

以github上的示例为例,经过阅读EGADS源码,笔者将框架处理流程划分为四部分:函数

  1. 初始化配置文件和输入文件

主函数加载配置文件 sample_config.ini 和数据输入文件sample_input.csv ,并实例化输入文件的处理对象FileInputProcessor 。 这里要说明一点,若是数据是以其余形式输入的,如经过控制台输入,则须要示例化控制台输入的处理对象StdinProcessor.性能

  1. 把输入文件转化为TimeSeries列表

FileInputProcessor 负责把输入文件转化为List<TimeSeries>,其中一个TimeSeries对象存储了一列时间戳及对应的一列值,若输入文件若包含了一列时间戳和n 列值,那么就会产生nTimeSeries组成的列表。3d

同时TimeSeries也封装了时序数据的元数据信息,如文件名,列名称等。而后根据配置中的参数,判断是否须要对输入数据进行简单的缺失值处理和聚合处理。code

  1. 加载时序模型和异常检测模型

使用ProcessableObjectFactory工厂类构建时间序列模型。时序模型经过类加载器加载并实例化,示例中实例化的类为OlympicModel, 而后把时间序列TimeSeries和时序模型List<TimeSeriesModel>封装成ModelAdapter,做为时序模型的模块。

使用ProcessableObjectFactory工厂类构建异常检测模型。异常检测模型经过类加载器加载并实例化,示例中实例化的类为ExtremeLowDensityModel, 而后把时间序列TimeSeries和异常检测模型List<AnomalyDetectionModel>封装成AnomalyDetector,做为异常检测模型的模块。

最后把时序模型的模块ModelAdapter和异常检测模型的模块AnomalyDetector封装成异常检测处理模块DetectAnomalyProcessable.

  1. 使用时序模型预测,并使用异常检测模型检测出异常点

先使用时间序列训练模型,根据训练好的模型获得预期值,这里使用的模型为OlympicModel。接着使用异常检测模型计算若干项偏差指标对应的阈值,其中偏差指标包括:MAE, sMAPE, MAPE, MASE,再根据各个偏差指标的阈值检测出异常点,这里使用的模型为ExtremeLowDensityModel

下图是EGADS框架详细的处理流程图。

egads_architecture_sequence

4. 参考资料

  1. https://github.com/yahoo/egads
  2. Yahoo 大规模时列数据异常检测技术及其高性能可伸缩架构 https://www.infoq.cn/article/automated-time-series-anomaly-detection
相关文章
相关标签/搜索