一、相关算法研究
1.1 常见的开源算法
- Yahoo:EGADS
- FaceBook:Prophet
- Baidu:Opprentice
- Twitter:Anomaly Detection
- Redhat:hawkular
- Ali+Tsinghua:Donut
- Tencent:Metis
- Numenta:HTM
- CMU:SPIRIT
- Microsoft:YADING
- Linkedin:SAX改进版本
- Netflix:Argos
- NEC:CloudSeer
- NEC+Ant:LogLens
- MoogSoft:一家创业公司,做的内容蛮好的,供大家参考
1.2 基于统计方法的异常检测
基于统计方法对时序数据进行不同指标(均值、方差、散度、峰度等)结果的判别,通过一定的人工经验设定阈值进行告警。同时可以引入时序历史数据利用环比、同比等策略,通过一定的人工经验设定阈值进行告警。
通过建立不同的统计指标:窗口均值变化、窗口方差变化等可以较好的解决下图中(1,2,5)所对应的异常点检测;通过局部极值可以检测出图(4)对应的尖点信息;通过时序预测模型可以较好的找到图(3,6)对应的变化趋势,检测出不符合规律的异常点。
如何判别异常?
- N-sigma
- Boxplot(箱线图)
- Grubbs’Test
- Extreme Studentized Deviate Test
PS:
- N-sigma:在正态分布中,99.73%的数据分布在距平均值三个标准差以内。如果我们的数据服从一定分布,就可以从分布曲线推断出现当前值的概率。
- Grubbs假设检验:常被用来检验正态分布数据集中的单个异常值
- ESD假设检验:将Grubbs'
- Test扩展到k个异常值检测
1.3 基于无监督的方法做异常检测
什么是无监督方法:是否有监督(supervised),主要看待建模的数据是否有标签(label)。若输入数据有标签,则为有监督学习;没标签则为无监督学习。
为何需要引入无监督方法:在监控建立的初期,用户的反馈是非常稀少且珍贵的,在没有用户反馈的情况下,为了快速建立可靠的监控策略,因此引入无监督方法。
针对单维度指标
- 采用一些回归方法(Holt-Winters、ARMA),通过原始的观测序列学习出预测序列,通过两者之间的残差进行分析得到相关的异常。