Time Series异常检测算法 – 动态阈值估计

时序数据异常检测问题中,涉及异常阈值的动态预测场景。检索到算法Dynamic Thresholding,该阈值计算方法在工程应用中实现成本较低;多个阈值计算过程无数据依赖,可拆分并行计算提高效率;时间窗口计算思想与Flink实时计算框架中的窗口一致,利于技术对接

原作论文 Kyle Hundman, Valentino Constantinou, Christopher Laporte, Ian Colwell, and Tom Soderstrom. Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding. KDD, 2018.
开源地址 https://github.com/khundman/telemanom

核心思想1:对序列模型的预测值和真实值误差进行建模

使用LSTM预测时序序列数据,得到一个时序误差序列窗口

\scriptsize
\textbf{e} = [e^{(t-h)},\dots,e^{(t-l_s)},\dots,e^{(t-1)},e^{t}]

为抑制LSTM预测值陡然突变,使用指数加权平滑误差序列窗口值

\scriptsize \mathbf{e_s} = [e_{s}^{(t-h)},\dots,e_{s}^{(t-l_s)},\dots,e_{s}^{(t-1)},e_{s}^{t}]

核心思想2:对最近误差进行统计学分析预估异常阈值

使用上述窗口数据的均值和标准差估计阈值,通过枚举z计算一个初始阈值

\scriptsize \mathbf{\epsilon} = \mu(\mathbf{e_s}) + \mathbf{z}\sigma(\mathbf{e_s})

将上述枚举得到的各初始阈值作为异常数据判定标准,带入下式得到结果:大多数数据在阈内,同时阈外数据对序列离散程度贡献较大的情况会在下式取得大值,反映出较好的异常数据区分度。因此结果最大的初始阈值定为最终阈值

\scriptsize
\mathbf{\epsilon} =
argmax{(\mathbf{\epsilon})} =
\frac{\Delta \mu(\mathbf{e_s})/ \mu(\mathbf{e_s}) + \Delta \sigma(\mathbf{e_s})/ \sigma(\mathbf{e_s})}
{|\mathbf{e_a}|+|\mathbf{E_{seq}}|^2}\\

\Delta \mu(\mathbf{e_s}) = \mu(\mathbf{e_s}) - \mu(\{e_s \in \mathbf{e_s}|e_s \lt \epsilon\})\\

\Delta \sigma(\mathbf{e_s}) = \sigma(\mathbf{e_s}) - \sigma(\{e_s \in \mathbf{e_s}|e_s \lt \epsilon\})\\

\mathbf{e_a} = \{e_s \in \mathbf{e_s}|e_s \gt \epsilon\}\\

E_{seq} = continuous\ sequences\ of\ e_a \in \mathbf{e_a}

论文使用下式衡量异常值的偏离严重程度

\scriptsize
s^{(i)} =
\frac{max(\mathbf{e^{(i)}_{seq})} - argmax(\mathbf\epsilon)}
{\mu(\mathbf{e_s})+\sigma(\mathbf{e_s})}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

©2018-2024 Howell版权所有 备案号:冀ICP备19000576号