最近在搞异常检测相关的工作,因此调研了业界常用的异常检测系统。通过查阅相关资料,发现业界对雅虎开源的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。整体架构如下图所示。

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组成的列表。

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

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

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

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

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

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

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

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

4. 参考资料

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

EGADS框架处理流程分析的更多相关文章

  1. Android之 MTP框架和流程分析

    概要 本文的目的是介绍Android系统中MTP的一些相关知识.主要的内容包括:第1部分 MTP简介            对Mtp协议进行简单的介绍.第2部分 MTP框架            介绍 ...

  2. vue2源码框架和流程分析

    vue整体框架和主要流程分析 之前对看过比较多关于vue源码的文章,但是对于整体框架和流程还是有些模糊,最后用chrome debug对vue的源码进行查看整理出这篇文章.... 本文对vue的整体框 ...

  3. ThinkPHP 框架执行流程分析

    总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode ...

  4. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  5. [Abp 源码分析]一、Abp 框架启动流程分析

    Abp 不一定仅用于 Asp.Net Core 项目,他也可以在 Console 与 WinFrom 项目当中进行使用,所以关于启动流程可以分为两种,一种是 Asp.Net Core 项目的启动流程, ...

  6. nodejs的Express框架源码分析、工作流程分析

    nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...

  7. rest_framework框架之认证功能的使用和源码实现流程分析

    rest_framework框架之认证的使用和源码实现流程分析 一.认证功能的源码流程 创建视图函数 Note 创建视图函数后,前端发起请求,url分配路由,执行视图类,视图类中执行对应方法必须经过d ...

  8. 01 . Go框架之Beego简介部署及程序流程分析

    Beego简介 beego是一个使用Go语言来开发WEB引用的GoWeb框架,该框架起始于2012年,由一位中国的程序员编写并进行公开,其目的就是为大家提供一个高效率的web应用开发框架.该框架采用模 ...

  9. Android多媒体框架总结(1) - 利用MediaMuxer合成音视频数据流程分析

    场景介绍: 设备端通过服务器传向客户端(Android手机)实时发送视频数据(H.264)和音频数据(g711a或g711u), 需要在客户端将音视频数据保存为MP4文件存放在本地,用户可以通过APP ...

随机推荐

  1. Day5 - 03 函数的参数-位置参数和默认参数

    位置参数    调用函数时,传入函数的参数,按照位置顺序依次赋值给函数的参数.#计算乘方的函数                def power(x, n):            s = 1     ...

  2. Maven基础知识详解

    1. 简介   Maven在Java领域的应用已经非常广泛了,有了Maven的存在是的开发人员在搭建.依赖.扩展和打包项目上变得非常简单. 2. Windows安装Maven 下载安装包   http ...

  3. Mybatis执行流程源码分析

    第一部分:项目结构 user_info表:只有id和username两个字段 User实体类: public class User { private String username; private ...

  4. K8S安装Kubesphere

    准备工作 安装Helm curl -L https://git.io/get_helm.sh | bash 创建账户 cat > heml-rbac.yaml << EOF apiV ...

  5. [日常摸鱼]bzoj1001狼抓兔子-最大流最小割

    题意就是求最小割- 然后我们有这么一个定理(最大流-最小割定理 ): 任何一个网络图的最小割中边的容量之和等于图的最大流. (下面直接简称为最大流和最小割) 证明: 如果最大流>最小割,那把这些 ...

  6. Mysql 52条SQL语句性能优化策略汇总

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...

  7. Nocalhost,让开发回归原始又简单

    在刚刚结束的 2020 腾讯云 Techo Park 大会 DevOps 分论坛「开发乘云起,扶摇九万里」上,CODING CEO 张海龙发布了由 CODING 团队自主研发的全新产品 Nocalho ...

  8. Python之word文档模板套用 - 真正的模板格式套用

    Python之word文档模板套用: 1 ''' 2 #word模板套用2:套用模板 3 ''' 4 5 #导入所需库 6 from docx import Document 7 ''' 8 #另存w ...

  9. C#随机生成不重复邀请码&创建登录Token&转换人民币大小金额

    /// <summary> /// 创建登陆Token /// </summary> /// <param name="length">< ...

  10. C#中打印拼接的字符串

    实例化打印文档 //声明打印对象 PrintDocument pd = new PrintDocument(); int ilvPreviewIndex = 0; 在打印事件中设置基本属性 priva ...