1 SBD
继ED欧式算法与DTW算法之后,SBD是时间序列度量距离的方法之一。在网上看到的来源来自于此篇论文《k-Shape: Efficient and Accurate Clustering of Time Series》(如有错误,欢迎指正)。
获取形状的相似性需要能够处理振幅和相位畸变的距离测度。然而,能够满足这种要求的距离测度如DTW计算代价太大。互相关是一种对时滞信号相似度的度量,广泛应用于信号和图像处理。不正确地使用互相关,会使得它的实现像DTW一样慢,由于这些缺点,互相关没有被广泛采用作为时间序列的距离测度。
1.1 互相关
为了让更好理解什么叫互相关,可参考这个博客:基于Cross-Correlation互相关函数的信号同步方法 - 知乎
如果没时间看,我会稍微解释一下:
例如有2路信号,一个是从
MIC->链路线->3.5接口进入手机
一个是从
MIC->蓝牙DSP编码->蓝牙传输进入耳机
那么采集到的信号会由于开始采集时间的不同和处理时间的不同,得到如下个结果:
可以看到,2者信号存在一个时延误差的。那如何找到这个时延误差,让这个序列对齐?我们需要让序列移位多少个时间戳才能找到2个序列对齐的那个位置,让其完全对齐?
什么时候序列对齐呢?————B和T有相同变化趋势的时候。
可以用一个经典的方法:互相关分析(Cross-Correlation Analysis)
1.2 互相关分析
统计学中的互相关是2个随机变化X和Y的协方差。那信号处理中,都是离散信号,互相关函数定义为
m代表了滑动的量,将g(x)整体向左平移了m个时间后,通过求和,对整个时域内的f和平移之后的g球函数值。那么对应一个m就有一个和,我们就可以得到一个关于m的分布。只要找到m值最大的那一个分布,我们就能知道其信号滞后了多少,并且可以知道他们的相关系数。
2 互相关测度
互相关测度可以看做是2条序列的相似性,即使这两个序列没有对齐,为了实现平移不变性,计算互相关时保持y序列不变,并将x在y上滑动,计算x的每一个位移s的内积。
由我们上面介绍了m代表了滑动的量,我们要计算2个序列的相似度,那我们就要把y滑动次,如图所示(图比较简略)。
得到了个相关系数,取出最大的m作为2个序列的相关程度。
最后,公式如下SBD的公式如下:
2.总结:
由于SBD算法计算的是距离,因此在计算距离前我们需要进行Z-score归一化处理。
细心的朋友可以发现,当延迟为0时,归一化后该算法中的ncc值相当于在计算皮尔森相关系数。
SBD算法的缺点就是计算量大,在类似KPI场景数据量庞大的时候,SBD算法可能无法得到支撑。
但是,在涉及告警根因分析等问题时,SBD能自动的判断出延迟的位数。
我们可以通过对比延时的大小,从而准确地判断出故障根因。
注意事项:使用算法时切记要在告警点附近使用!!注意避开周期性的数据,不然可能会出现关联偏差。