程序地带

EGADS框架处理流程分析


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


1. 简介

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


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


2. 整体架构

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


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源码,笔者将框架处理流程划分为四部分:


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

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


把输入文件转化为TimeSeries列表

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


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


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

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


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


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


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

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


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


egads_architecture_sequence


4. 参考资料
https://github.com/yahoo/egads
Yahoo 大规模时列数据异常检测技术及其高性能可伸缩架构 https://www.infoq.cn/article/automated-time-series-anomaly-detection

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ljhbjehp/p/14287917.html

随机推荐

进一步深挖工业数据价值

进一步深挖工业数据价值

随着新一轮科技革命和产业变革蓬勃兴起,我国大数据技术在工业领域的用户需求精准分析、生产过程改进优化、营商管理智能决策等方面的运用方兴未艾。工业数据作为新的生产要素资源,能够...

CECBC 阅读(169)

python模式识别_模式识别与机器学习(一)

模式识别与机器学习[国科大]模式:为了能够让机器执行和完成识别任务,必须对分类识别对象进行科学的抽象,建立它的数学模型,用以描述和代替识别对象,...

weixin_39953618 阅读(859)

20201202问题记录

20201202问题记录

1、虚谷数据库一个数据库下多个实例,怎样访问特定的实例例如如图,想默认访问USR_MUSIC的数据库实例,虚谷数据库创建用户时,默认会创建用户同...

dada678 阅读(130)