异常检测(MSRA,KDD'19)

Time-Series Anomaly Detection Service at Microsoft

Spectral Residual(SR) 以及 Convolutional Neural Network(CRR) 方法来进行时序异常检测。

挑战: 1. 缺少标签:系统往往需要同时处理千百万的数据量,不能手动添加标签。时序数据分布也是不断变化的,需要识别从前没有过的异常模式,也就是说有监督的模型是不可以的。 2. 普适性:需要兼容多种数据模式。 3. 有效性:监控系统往往要实时处理很多的数据,尤其是分钟级的数据,异常检测系统需要在有限时间内进行处理。

CNN是一种带标签的有监督检测,SR则是一个无监督的模型,二者结合。


系统

Data Ingestion

连接及粒度。连接可以将用户存储系统和异常检测系统对接,粒度可以确定异常检测任务周期性接纳新的数据。(fluxDB和Kafka) ### Online Compute 在线计算可以让每个数据都在进入流水线后立即得到处理,这里需要一个滑动窗口来优化内存以及保证计算有效性。(Flink) ### Experimentation Platform 衡量性能,可以人工标记一些数据来评判检测的准确性


方法

异常检测可以使用SR的基础是,时序的异常表现在图形图像上来说往往是突出的。CNN可行的原因是有标签的数据效果较好,因此二者要结合

SR

步骤如下: 1. 快速傅里叶变化FTT得到对数振幅频谱 2. 计算频谱冗余 3. 逆傅里叶变化将序列反转到空间域名

特别的快速傅里叶FFT是通过滑动窗口处理队列的。更多的是关注延迟,发现当检测点是滑动窗口中间点时效果最好,因此要在已知输入的最后一个点后加上几个预测点来从而使该点放在滑动窗口的中心位置,对于\(x_n\)后的估计点\(x_{n+1}\)计算如下: \[ \bar{g}=\frac{1}{m}\sum_{i=1}^mg(x_n,x_{n-i})\\ x_{n+1} = x_{n-m+1}+\bar{g}\cdot m \]

其中\(g(x_i,x_j)\)可以作为i,j两点直线上的斜率,\(\bar{g}\)也就是平均梯度,m=5,\(x_{n+1}\)作为一个关键点这里复制K次加到序列末尾即可。


SR-CNN

原始的SR可以通过设置阈值实现异常检测,但是为了解决更复杂的问题要采用CNN,用在显著图(FTT变换后的)而非原始输入图。CNN由两个1-D的卷积层(卷积核大小与滑动窗口大小一样)以及两个全连接层构成,第一个卷积层的通道大小与滑动窗口一样,第二个卷积层大小翻倍,全连接层在Sigmoid输出前是堆叠的,交叉熵采用损失函数