运维场景下需要对KPI做监控和各种算法处理(比如异常检测),但是KPI数量和维度都太多,每一条单独训练成本太高,所以希望能对KPI进行聚类,每个聚类蔟内用同一个模型。
互相关计算两条kpi的滑动内积,对相位偏差有天然鲁棒性。两条kpi曲线x,y和相位偏差s,标准化互相关NCC及距离度量SBD计算如下:
解释:移动s后,x,y无相位差,此时内积最大。NCC范围是[-1,1],SBD范围是[0,2]。SBD越小则相似度越高。 特别的!利用卷积和傅立叶变换可以计算两条长度为m的kpi时间复杂度降低为(mlogm) 4. 聚类
基于密度的聚类算法DBSCAN与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时,同一聚类簇中将包含更多相似曲线,从而能够节省更多的模型训练时间。