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

    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框架详细的处理流程图。

    egads_architecture_sequence

    4. 参考资料

    1. https://github.com/yahoo/egads
    2. Yahoo 大规模时列数据异常检测技术及其高性能可伸缩架构 https://www.infoq.cn/article/automated-time-series-anomaly-detection
  • 相关阅读:
    Ubuntu加上一个命令搜索路径/etc/ environment
    在Ubuntu中编译QT工程Tesful
    Java中的多线程
    [转载]iOS开发之手势识别
    OracleDBA之表管理
    JDBC与JAVA数据库编程
    Oracle之PL/SQL学习笔记
    在Objective-C中浅谈面向对象
    Web前端上万字的知识总结
    类比Spring框架来实现OC中的依赖注入
  • 原文地址:https://www.cnblogs.com/ljhbjehp/p/14287917.html
Copyright © 2020-2023  润新知