分享

EGADS介绍:大规模时间序列异常检测


问题导读

1.什么是EGADS?
2.为何产生EGADS?
3.EGADS如何使用?

EGADS介绍
今天给大家介绍Yahoo开源的一门技术EGADS,EGADS (Extensible Generic Anomaly Detection System) 是一个开源的 Java 包,用于在大规模时间序列数据中自动检测异常。

EGADS 旨在包括一组异常检测技术,可以应用到一个包的许多用例中,且只唯一的依赖是 Java。EGADS 首先创建时间序列模型,用于计算在时间 t 的期望值。EGADS 自动确定阈值 E 并输出最有可能的异常。 EGADS 库可用于大部分情况下的上下文,检测出离群性和时间序列的改变点,这些可能含有各种即时性、趋势和噪声组件。


场景
虽然计算硬件和软件的快速发展已经带来了强大的应用程序,但仍然有数百个软件错误和硬件故障在大型集群中继续发生,从而影响用户体验和随后的收入。不间断系统具有严格的正常运行时间要求,并且对这些系统的持续监控至关重要。从数据分析的角度来看,这意味着不间断地监控大量的时间序列数据,以便检测潜在的故障或异常。由于问题的大规模,人类监测这些数据实际上是不可行的,这导致我们自动异常检测。异常或异常值是与其余数据明显不同的数据点。通常,大多数应用程序中的数据由反映系统功能的一个或多个生成过程创建。

当底层生成过程以不寻常的方式运行时,它会创建异常值。快速有效地识别这些异常值对于许多应用是有用的,包括:入侵检测,信用卡欺诈,传感器事件,医疗诊断,执法等。自动异常检测中的当前方法遭受大量误报,这些误报在实践中禁止这些系统的有用性。用例或类别特定的异常检测模型可能对特定应用程序具有低误报率,但是当时间序列的特征发生变化时,这些技术在没有适当再训练的情况下表现不佳。

EGADS(可扩展通用异常检测系统)可以准确,可扩展地检测时间序列异常。 EGADS将预测和异常检测分为两个独立的组件,允许此人将自己的模型添加到任何组件中。


结构
EGADS框架由两个主要部分组成:时间序列建模模块(TMM),异常检测模块(ADM)。 给定一个时间序列,TMM组件对时间序列进行建模,产生ADM后来消耗的预期值,用于计算异常分数。 EGADS是作为一个框架构建的,可以轻松集成到现有的监控基础架构中。 在雅虎,我们的内部雅虎监控服务(YMS)每秒处理数百万个数据点。 因此,对YMS进行可扩展,准确和自动化的异常检测至关重要。 出于这个原因,EGADS可以编译成一个轻量级的罐子并且可以大规模地部署。

TMM和ADM可以在main / java / com / yahoo / egads / models下找到。

TMM和ADM支持的模型示例可在下面的两个表中找到。 随着社区提出更多贡献,我们希望这些模型集合能够增长。


当前时间序列模型列表
egadstsmd.png

当前异常检测模型列表
egadsadm.png



这两个模块我们知道构成,一个是时间序列构造模块,另一个是异常检测模块。给定一段时间的离散值(构成一个序列),时间序列模块会学习这段序列的特征,并试图重新构建一个和原序列尽量接近的序列。结果和原序列一同送入异常检测模块,基于不同的算法(原则,阈值),异常点会被标记出来。

时间序列构造模块提供了多种算法(Time-series Modeling Module):
1.Olympic Model(Seasonal Naive)一个简单的窗口模型,对点Px的预测为点Px前n个值的Smoothed Average.
2.Exponential Smoothing Model 一个平滑模型,由简单的数列获得。ETS模型可以自动选择Single、Double、Triple里面匹配最好的输出。
3.Moving Average Model 也是平滑模型,点Px的预测值取邻近点的平均值。
4.Regression Models 一般是线性回归,特殊例子或者异常偏差特别大的时候有用。


异常检测模块(Anomaly Detection Module)
1.ExtremeLowDensityModel 超低密度模型,很简单有效的密度模型。
2.AdaptiveKernelDensityChangePointDetector 拐点检测模型
3.KSigmaModel 经典K-sigma模型
4.DBScanModel(Density-Based Spatial Clustering of Applications with Noise)又是一个基于密度的模型,在空间中作聚类,如果目标序列可以比较好的分类的话会有不错的效果。


上面介绍了什么是EGADS,该如何使用。下面我们详细介绍

如何开始
EGADS被设计为一个独立的库,其中包含一系列适用于各种用例的时间序列和异常检测模型。 要将库编译到单个jar中,请克隆repo并键入以下内容:
[mw_shl_code=bash,true]mvn clean compile assembly:single
[/mw_shl_code]

将JAVA_HOME变量设置为适当的JVM。 要执行此操作:
[mw_shl_code=bash,true]export JAVA_HOME=/usr/lib/jvm/{JVM directory for desired version}
[/mw_shl_code]

用法
要运行一个简单的示例类型:
[mw_shl_code=bash,true]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
[/mw_shl_code]

生成以下图片(请注意,可以通过在sample_config.ini中将OUTPUT配置键设置为GUI来启用此UI)。
ui.png

还可以在命令行上指定配置参数。 例如,使用奥林匹克评分作为时间序列模型进行异常检测,使用基于密度的方法作为异常检测模型,使用以下方法。
[mw_shl_code=bash,true]java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads "MAX_ANOMALY_TIME_AGO:999999999;AGGREGATION:1;OP_TYPE:DETECT_ANOMALY;TS_MODEL:OlympicModel;AD_MODEL:ExtremeLowDensityModel;INPUT:CSV;OUTPUT:STD_OUT;BASE_WINDOWS:168;PERIOD:-1;NUM_WEEKS:3;NUM_TO_DROP:0;DYNAMIC_PARAMETERS:0;TIME_SHIFTS:0" src/test/resources/sample_input.csv
[/mw_shl_code]

要使用没有时间序列模型和异常检测的自动静态阈值来运行异常检测,请使用以下命令:
[mw_shl_code=bash,true]java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads "MAX_ANOMALY_TIME_AGO:999999999;AGGREGATION:1;OP_TYPE:DETECT_ANOMALY;TS_MODEL:NullModel;AD_MODEL:SimpleThresholdModel;SIMPLE_THRESHOLD_TYPE:AdaptiveMaxMinSigmaSensitivity;INPUT:CSV;OUTPUT:STD_OUT;AUTO_SENSITIVITY_ANOMALY_PCNT:0.2;AUTO_SENSITIVITY_SD:2.0" src/test/resources/sample_input.csv
[/mw_shl_code]

要将EGADs库嵌入到应用程序中,请通过添加适当的存储库从JCenter中提取已编译的JAR。 例如,在Maven POM文件中添加:
[mw_shl_code=xml,true]<repositories>
  <repository>
    <id>jcenter</id>
    <url>https://jcenter.bintray.com/</url>
  </repository>
</repositories>[/mw_shl_code]
然后导入依赖项,例如:
[mw_shl_code=xml,true]<dependency>
  <groupId>com.yahoo.egads</groupId>
  <artifactId>egads</artifactId>
  <version>0.4.0</version>
</dependency>[/mw_shl_code]

配置
以下是EGADS支持的各种配置参数。
[mw_shl_code=bash,true]# Only show anomalies no older than this.
# If this is set to 0, then only output an anomaly
# if it occurs on the last time-stamp.
MAX_ANOMALY_TIME_AGO  99999

# Denotes how much should the time-series be aggregated by.
# If set to 1 or less, this setting is ignored.
AGGREGATION        1

# OP_TYPE specifies the operation type.
# Options: DETECT_ANOMALY,
#          UPDATE_MODEL,
#           TRANSFORM_INPUT
OP_TYPE        DETECT_ANOMALY

# TS_MODEL specifies the time-series
# model type.
# Options: AutoForecastModel
#          DoubleExponentialSmoothingModel
#          MovingAverageModel
#          MultipleLinearRegressionModel
#          NaiveForecastingModel
#          OlympicModel
#          PolynomialRegressionModel
#          RegressionModel
#          SimpleExponentialSmoothingModel
#          TripleExponentialSmoothingModel
#          WeightedMovingAverageModel
#            SpectralSmoother
#            NullModel
TS_MODEL        OlympicModel

# AD_MODEL specifies the anomaly-detection
# model type.
# Options: ExtremeLowDensityModel
#          AdaptiveKernelDensityChangePointDetector
#          KSigmaModel
#          NaiveModel
#          DBScanModel
#          SimpleThresholdModel
AD_MODEL        ExtremeLowDensityModel

# Type of the simple threshold model.
# Options: AdaptiveMaxMinSigmaSensitivity
#          AdaptiveKSigmaSensitivity
# SIMPLE_THRESHOLD_TYPE

# Specifies the input src.
# Options: STDIN
#          CSV
INPUT        CSV

# Specifies the output src.
# Options: STD_OUT,
#          ANOMALY_DB
#          GUI
#          PLOT
OUTPUT  STD_OUT

# THRESHOLD specifies the threshold for the
# anomaly detection model.
# Comment to auto-detect all thresholds.
# Options: mapee,mae,smape,mape,mase.
# THRESHOLD mape#10,mase#15

#####################################
### Olympic Forecast Model Config ###
#####################################

# The possible time-shifts for Olympic Scoring.
TIME_SHIFTS 0,1

# The possible base windows for Olympic Scoring.
BASE_WINDOWS  24,168

# Period specifies the periodicity of the
# time-series (e.g., the difference between successive time-stamps).
# Options: (numeric)
#          0 - auto detect.
#          -1 - disable.
PERIOD        -1


# NUM_WEEKS specifies the number of weeks
# to use in OlympicScoring.
NUM_WEEKS 8

# NUM_TO_DROP specifies the number of
# highest and lowest points to drop.
NUM_TO_DROP 0

# If dynamic parameters is set to 1, then
# EGADS will dynamically vary parameters (NUM_WEEKS)
# to produce the best fit.
DYNAMIC_PARAMETERS  0

###################################################
### ExtremeLowDensityModel & DBScanModel Config ###
###################################################

# Denotes the expected % of anomalies
# in your data.
AUTO_SENSITIVITY_ANOMALY_PCNT        0.01

# Refers to the cluster standard deviation.
AUTO_SENSITIVITY_SD        3.0

############################
### NaiveModel Config ###
############################

# Window size where the spike is to be found.
WINDOW_SIZE        0.1

#######################################################
### AdaptiveKernelDensityChangePointDetector Config ###
#######################################################

# Change point detection parameters
PRE_WINDOW_SIZE        48
POST_WINDOW_SIZE        48
CONFIDENCE        0.8

###############################
### SpectralSmoother Config ###
###############################

# WINDOW_SIZE should be greater than the size of longest important seasonality.
# By default it is set to 192 = 8 * 24 which is worth of 8 days (> 1 week) for hourly time-series.
WINDOW_SIZE 192

# FILTERING_METHOD specifies the filtering method for Spectral Smoothing
# Options:                  GAP_RATIO                (Recommended: FILTERING_PARAM = 0.01)
#                        EIGEN_RATIO                (Recommended: FILTERING_PARAM = 0.1)
#                        EXPLICIT                (Recommended: FILTERING_PARAM = 10)
#                        K_GAP                        (Recommended: FILTERING_PARAM = 8)
#                        VARIANCE                (Recommended: FILTERING_PARAM = 0.99)
#                        SMOOTHNESS                (Recommended: FILTERING_PARAM = 0.97)
FILTERING_METHOD GAP_RATIO

FILTERING_PARAM 0.01[/mw_shl_code]

最新经典文章,欢迎关注公众号



已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条