论文:
Robust and Rapid Clustering of KPIs for Large-Scale Anomaly Detection
问题场景
运维场景下需要对KPI做监控和各种算法处理(比如异常检测),但是KPI数量和维度都太多,每一条单独训练成本太高,所以希望能对KPI进行聚类,每个聚类蔟内用同一个模型。
问题挑战
- 聚类首先要判别距离,KPI曲线上噪声/异常/相位偏差和振幅会造成相似度计算的困难。
- KPI曲线时间跨度从几天到数周,维度通常较高,进一步增加了对聚类的挑战。
算法框架
- 预处理:消除振幅差异
- 基线提取:消除噪声和异常点
- 相似性度量:基于形状的SBD距离作为相似性度量,消除相位差异
- 聚类:为每个类别计算聚类中心,新来曲线直接与中心计算相似度并聚类
算法细节
- 预处理
- 缺失值:线性插值填充
- 振幅差异:标准化(均值0方差1)
- 基线提取
目的:降低噪声和异常的影响
- 去异常点:去除异常点并用相邻点做线性填充(本文是去除离均值最远的5%点,也可以用箱线图等)
- 去噪声:滑动平均,将曲线分成基线和余项
公式如下:
效果:
- 相似性度量
- 相似性计算:对基线使用基于互相关距离度量SBD来比较相似性。
互相关计算两条kpi的滑动内积,对相位偏差有天然鲁棒性。两条kpi曲线x,y和相位偏差s,标准化互相关NCC及距离度量SBD计算如下:
解释:移动s后,x,y无相位差,此时内积最大。NCC范围是[-1,1],SBD范围是[0,2]。SBD越小则相似度越高。
特别的!利用卷积和傅立叶变换可以计算两条长度为m的kpi时间复杂度降低为(mlogm)
4. 聚类
- 基于密度的聚类算法DBSCAN
实验对比
- 聚类效果和微软YADING的对比:
- 算法内技术的对比
- DTW计算曲线相似度
DTW可以准确地捕获具有相移的KPI之间的相似性。 但是,它也可以使两个具有不同周期性或季节性的KPI完美对齐。 例如,关于网页浏览量的KPI和关于搜索响应时间的KPI可能具有相似的形状,但季节性不同(例如,一天与一周之间)。 在DTW距离下它们是相似的,但是根据前面所述的运营商规则,不同类型的KPI不能归为同一簇。 此外,DTW计算时间更长。
辅助异常检测
与DONUT结合
- E1: 仅使用原始DONUT为每条KPI训练模型进行异常检测,按原作者的方法为每条KPI调优寻找能取得最佳F-score的阈值。
- E2: ROCKA+DONUT。利用ROCKA对KPI曲线进行聚类并求出聚类中心。仅在聚类中心曲线上训练DONUT模型,并选出最佳阈值。将聚类中心的模型及阈值应用于同聚类簇的其他KPI曲线上。
- E3: ROCKA+DONUT+重选阈值。仍使用聚类中心曲线训练模型应用于同类其他KPI上。但在有足够标注的情况下,我们可以为每条KPI重新调优阈值来取得最佳F-score。
结果:
- 相比于E1,E2的方法节省了90%的模型训练时间,而异常检测的平均F-score下降不超过15%,仍能达到0.76的平均F-score。
- 而在与E1有相同标注量的情况下采用E3的方法,平均F-score下降不超过5%。同时,在面对更大规模的KPI时,同一聚类簇中将包含更多相似曲线,从而能够节省更多的模型训练时间。