为什么我的眼里常含泪水?因为我对这土地爱得深沉……
本文基于Github :ad4j:Anomaly Detection For Java
项目中有完整代码示例,欢迎Star、Issue、提交PR,获得Contributor勋章,共同成长。
系列文章导航:
- 指标检测(一):绝对值/离群值异常检测
- 指标检测(二):波动异常检测-基于二阶导和距离寻找最大弯曲点
- 指标检测(三):趋势异常检测-基于Mann-Kendall检验
- 指标检测(四):业务阈值检测-基于规则引擎的业务异常检测
一、概述
概述请参考系列文章(一)的概述
本文将重点介绍 ad4j:Anomaly Detection For Java 项目中的基于规则引擎的检测算法。
本文主要介绍基于业务阈值设定的异常检测,作为自动化异常检测的业务补充监控方案。是的整套检测框架全面覆盖各种应用场景。
二、基于业务阈值的异常检测
1.原理
类似规则引擎的方案
-
(1)设定规则和规则集:
- 规则集:支持规则以任意逻辑形式(OR(||)、AND(&&))的组合成规则集,例如 R u l e 3 Rule3 Rule3 o r or or ( R u l e 1 Rule1 Rule1 a n d and and R u l e 2 Rule2 Rule2)
- 规则 R u l e Rule Rule: x i > F a c t o r ∗ S x_i >Factor * S xi>Factor∗S。
其中,比较符号支持(>,>=,=,<,<=) , F a c t o r Factor Factor是因子系数, S S S是指标数值统计量,支持:
S S S统计量类型 | 说明 |
---|---|
constant | 常量(即数值当前值) |
min | 最小值 |
max | 最大值 |
mean | 均值 |
var | 方差 |
std | 标准差 |
quantile | 分位值 |
- (2)循环递归检测
规则引擎内部解析规则后,会按照规则进行判定是否符合规则异常。
2.计算过程
- (1)解析规则:将规则配置解析为规则树
- (2)规则引擎判断:递归规则树,依次从叶子节点判定规则,将当前节点结果 与 同级节点结果进行逻辑(and,or)判断,逐步递归只根节点,获取到最终规则判定结果。
3.数据计算示例
数据准备:时间序列数据: X = 1.0 , 2.0 , 3.0 , 4.0 X={1.0,2.0,3.0,4.0} X=1.0,2.0,3.0,4.0。
- (1)设置规则:
>= 5 * constant || <= 1 * constant || (> 1 * min && < 1 * max)
- (2)解析规则:规则树如下