TL;DR
基于 eBay SREs 观测到的异步时间序列场景,论文中提出一种生产环境可用的多变量时间序列异常检测和定位模型 RANSynCoders。主要想法是:首先利用 AutoEncoder 对原始异步时间序列提取特征,然后对序列特征进行傅里叶变换分析,学习到相位差来对齐异步时间序列获得同步的时间序列表示,最后选择同步时间序列的子集序列来训练 AutoEncoder 重构误差来推断和定位异常(majority vote)。实验部分不仅在公开数据集和 eBay 自家数据验证了 RANSynCoders 模型的有效性,还提出了一种更加真实的评价方法。
Algorithm/Model
论文中提到的模型如下所示
主要包括以下内容:
- 原始序列潜在谱密度估计
- 异步时间序列转为同步表示
- 时序异常检测和定位
谱密度估计
主要是利用 autoencoder 来提取原始时间序列的特征,对应的重构损失函数为minLq=0.5(Y^,Y) [50th quantile loss]。
然后对于每个单变量序列特征应用 FFT 来得到大小为S 的频率向量W ,可以通过对应的正弦波近似表示原始多变量序列Y。
异步时间序列对齐
对于I 个特征和T 个观测点(对应时间戳T~)的多维时间序列,其傅里叶变换后的表达形式如下
yi,ti=[s=0∑Sαs,isin(ωs(ti+βs,i))]+γi+ϵi,ti
其中i∈I,ti∈T~ 分别表示特征维度索引及其对应的时间戳,y∈Y,ω∈W 且ω∈W 为对应的频率;α,β,γ 表示振幅、相位和基;ϵ 表示对应的特征噪声。
对于噪声的定义如下
ϵi,ti=αϵ,i,tisin(ω0(ti+βϵ,i,ti))
其中ω0 表示W 最大的值,对于原始异步序列
βϵ,i,ti≈−ti+4v0
举🌰说明上述傅里叶变换的结果如下所示
需要上述异步时间序列进行对齐,例如参考时间点tˉ 及其异步的相位差βs,i 和βϵ,i,ti ,计算公式如下
βˉi=β0,i+(ti−tˉ)
yi,tˉ=[s=0∑Sαs,isin(ωs(ti+βs,i−βˉi))]+γi+ϵi,tˉ
对应的噪声为
ϵi,tˉ=ϵi,tisin(ω0(4v0−βˉi))
举🌰说明对齐后的时间序列结果如下图所示,可以将不同时刻的时间序列同步到一个时间点。此部分不求甚解暂不细述。
RANCoders
主要是利用 autoencoder 来进行异常检测,但其模型设计上基于两种假设:
- 输入较小的时间序列子集可以容纳足够的信息,以足够的质量重建整个序列。
- 对于异常检测,在训练和推理方面,重建输入信号的阈值边界更有效,而不是尝试重建输入,然后进行不可靠的阈值选择过程以进行异常推理。
因此论文中采样时间序列来训练两种类型的 autoencoder:AEnUB 和AEnLB(upper bound + lower bound)。
例如对于下界 autoencoder 的损失函数如下
Lq=δ=i=0∑Imax[δ(y^i,tˉ,nLB−yi,tˉ),(δ−1)(y^i,tˉ,nLB−yi,tˉ)],∀n∈N
其中δ 表示分位数,通常q=1−δ。
异常检测与定位
对于单变量时间序列的异常检测,逻辑非常简单,即超出基带上下界即为异常:
P(in){01 if y^i,tˉ,nLB<yi,tˉ<y^i,tˉ,nUB,∀i∈I,n∈N otherwise
整体判断异常论文中使用的还是 majority voting。
对于异常定位,论文中提到了两种计算方法:
Term frequency (TF) analysis,即取每个维度元属性 attr 的对整体的贡献。
loc( attr )=n∑i attr i∑i∑nP(in∣ attr i)
这种方法类似于多维定位中的想法。
对于元属性未知的情况,直接计算特征维度异常分数。
loc(i)=n∑i∑nP(in)
根据异常指标占比排序。
Experiments
实验部分采用了 4 个 baselines 和 4 个 datasets 进行对比。
注:其中F1∗ 为论文中提出的评价指标,主要是考虑了阈值对算法性能的影响,非完全可靠。
实验结果如下所示:
Thoughts
- 论文整体思路描述的非常清楚,解决了实际中存在的时间序列异步问题。吐槽下符号描述 😣
- 主要解决的还是异步时间序列对齐的问题,而且方法仅适用于周期性的指标,否则相位检测的对齐方法用处不大。
- 关注的异常指标定位模块较为简单,主要思路是基于多维属性异常数量贡献分数,貌似缺少故障传播关系。