基于统计的异常检测方法S-H-ESD[twitter]
前10离群点中第三个点检测为异常,则至少有3个异常点
S-ESD
考虑ESD有如下两个限制:一是对于具有季节性的时间序列异常不能很好的识别,下图1中很多周期性变化的点并非异常点;二是多峰分布的数据点,一些低峰异常数据点不能被识别出来,如图2。
图1 时间序列图
图2 数据分布图
因此介绍S-ESD(Seasonal-ESD),Algorithm 1 中主要的不同是对时间序列数据进行STL分解,剔除其中的季节项,中位数做为趋势项(STL Variant),对残差项进行ESD检验。STL variant不同于STL主要考虑图3的情形,(a)中的STL分解得到的残差项,其中红色阴影部分存在spurious anomalies(这些点在原时间序列中并非异常)。
图3 STL和变形STL分解对比图
(局部异常和全局异常可识别性)S-ESD通过分解之后对残差项进行ESD检验,不仅可检验全局异常点,而且可以检验出如图4的局部异常点,这些异常点在原始数据中介于季节项的最大值和最小值之间,直接对原始数据ESD检验则无法识别。
图4 局部异常和全局异常对比
S-H-ESD
但是S-ESD也有局限性,就是对于数据中含有异常点数量较多时,很难识别较多的异常点。因此下面介绍Seasonal Hybrid ESD (S-H-ESD),首先介绍MAD。
MAD
考虑到ESD的检验统计量中的均值和方差对于过大的异常值较为敏感,于是选择利用MAD(Median Absolute Deviation)进行代替,如下
更一般的可以使用
或者
。
因此S-H-ESD相比S-ESD,是把ESD中的均值方差计算的统计量替换成MAD,图5比较了两种方法的效果,S-H-ESD对于异常点的识别率更高,同时由于计算中位数,时间复杂度也相对会更高。
图5 S-ESD和S-H-ESD对比
python实现
推荐pyculiarity,原文的github地址是R的实现[5]。
参考
- ^Hochenbaum J, Vallis O S, Kejariwal A. Automatic anomaly detection in the cloud via statistical learning[J]. arXiv preprint arXiv:1704.07706, 2017.
- ^Francisco Augusto Alcaraz Garcia. Tests to identify outliers in data series. Pontifical Catholic University of Rio de Janeiro, Industrial Engineering Department, Rio de Janeiro, Brazil, 2012.
- ^Bernard Rosner. On the detection of many outliers. Technometrics, 17(2):221–227, 1975.
- ^https://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm
- ^https://github.com/twitter/AnomalyDetection
发布于 2020-10-13
标签:STL,残差,检验,中位数,ESD,MAD,异常 From: https://blog.51cto.com/u_11908275/6952839