4.3 多维衍生
上一节中介绍的异常发现方法是将“聚集”在一起的点视为常见点,“分散”的点视为异常点,“聚集”通常是无规则的,只要在多维空间中距离近的点就算“聚集”。不过,有时我们会发现某些场景的“聚集”会有强烈的规则性,如下图:
两张图都是基于某种规则聚集的,但使用上节介绍的空间距离法效果不会太好,会有很多的误报或漏报。
这类能看出“聚集”规则的多维时间序列可以利用规则计算出衍生序列,将多维时间序列发现异常的问题转化为衍生出的单维时间序列异常发现问题。
多维时间序列X
通过某种数学变换Dv(…),衍生出单维时间序列D
D=Dv(X,…)
对D做单维时间序列异常发现,得到异常度序列Od
Od=Sg(D,…)
以最常见的线性聚集型二维时间序列为例介绍衍生方法。
二维时间序列X
Xc1和Xc2整体可能是非线性的,但在一段比较小的区间内Xr[-k]i近似是线性的,可以这样衍生:
1. 在Xr[-k]i内通过最小二乘法拟合得到系数wi
令Z=Xr[-k]i
wi=linefit(Zc1,Zc2)
2. wi和当前点xi1计算得到xi2的预测值x’i2
x’i2=wi* xi1
3. 真实xi2和x’i2的差值就是衍生值dfi
dfi= xi2-x’i2
衍生列Df就是dfi的集合,dfi与Xri一一对应。
Df=[df1,df2,…,dfn]
SPL例程
A |
B |
|
1 |
=file(“linedata1.csv”).import@tci() |
/第一维数据 |
2 |
=file(“linedata2.csv”).import@tci() |
/第二维数据 |
3 |
15 |
/特征区间k |
4 |
=A1.(~[-A3,-1].(~|1)).to(A3+1,) |
/Zc1 |
5 |
=A2.(~[-A3,-1].([~])).to(A3+1,) |
/Zc2 |
6 |
=A4.(linefit(~,A5(#))) |
/wi |
7 |
=A1.([~|1]).to(A3+1,) |
/[xi1,1](不含开始的k个) |
8 |
=A6.(mul(A7(#),~)) |
/x‘i2(不含开始的k个) |
9 |
=A2.to(A3+1,) |
/xi2(不含开始的k个) |
10 |
=A9--A8 |
/Df |
A6是最小二乘法算wi的过程
A8是计算预测值x‘i2的过程
计算结果示例:
第一幅图是二维时间序列的走势图,其中。横轴是时间序列索引,(a)中纵轴是Xc1,(b) 中纵轴是Xc2,加粗点是待观测点;
第二幅图是二维时间序列的关系图,横轴是Xc1,纵轴是Xc2,加粗点是待观测点。
观察右图,两个序列呈线性相关趋势,但待观测点明显不在线性“聚集”区,视为异常;观察左图的曲线走势,两者基本是同增同减,而带观测点却出现了Xc1减,Xc2增的反常情况,而且幅度还很大,同样视为异常。
上图是衍生列的走势图,横轴是时间序列索引,纵轴是衍生列取值,加粗点是待观测点(前k个点没有衍生值,所以总数少k个点)。
观察上图中的衍生列,观测点衍生值非常大,我们已经知道这种值非常大的点是会被单维度异常发现算法发现的。仔细观察上图,凡是特别大或者特别小的点都可以对应原二维时间序列的异常走势。