内容简介:最近半年时间(2019年1月到今天),我和几个小伙伴参加了清华大学举办的【多维监测指标的异常定位】AI OPS比赛。总共327个队伍参加比赛,经过我们的努力,我们进入决赛,并且通过代码审核,成为最终进入决赛阶段的14个队伍中的一员。今天就是决赛的尾声,程序已经调通,正在调参等待结果,所以想借这个时间写点什么,对这段工作做一个总结。多维度指标的异常定位是AI Ops领域的一个典型且有挑战的问题。在互联网服务运维中,当某个总指标(如总流量)发生异常时,需要快速准确地定位到是哪个交叉维度的细粒度指标(如“省份=北
前言
最近半年时间(2019年1月到今天),我和几个小伙伴参加了清华大学举办的【多维监测指标的异常定位】AI OPS比赛。总共327个队伍参加比赛,经过我们的努力,我们进入决赛,并且通过代码审核,成为最终进入决赛阶段的14个队伍中的一员。今天就是决赛的尾声,程序已经调通,正在调参等待结果,所以想借这个时间写点什么,对这段工作做一个总结。
问题背景
多维度指标的异常定位是AI Ops领域的一个典型且有挑战的问题。在互联网服务运维中,当某个总指标(如总流量)发生异常时,需要快速准确地定位到是哪个交叉维度的细粒度指标(如“省份=北京 & 运营商=联通”的流量)的异常导致的,以便尽快做进一步的修复止损操作。由于运维中的指标维度多、每个维度取值范围大,导致异常定位时的搜索空间非常大(可能的搜索空间$2^{10000}$)。
本质上这是一个搜索问题,而不是传统机器学习比赛中的回归或者分类问题。所以,我们平时积累的机器学习技术能力只有很少的一部分能够使用。不过,从另一个角度来看,说明我们平时积累的技术有短板,正好通过这个机会补足。
我们经历了什么?
接到这个比赛的任务的时间是今年1月初,当时官方给了参考资料如下,
- Hot Spot算法 (2018)HotSpot: Anomaly Localization for Additive KPIs withMulti-Dimensional Attributes
- Adtributor算法 (2014)Adtributor: Revenue debugging in advertising systems
- iDice算法 (2016)Idice: problem identification for emerging issues
经过一个多月的学习,我们大概对上面三个算法有所了解,三篇文章解决的思路为,
- 整体框架使用启发式规则;
- 局部行为使用数据挖掘,机器学习或统计等技术,提高准确率;
- 算法实现难度:Aditributor $<$ iDice $<$ HotPot;
- 算法精准度:Aditributor $<$ iDice $<$ HotPot,(HotSpot的论文实验数据显示)
具体的论文导读,可以参考本文最后的附录。
预赛第一个阶段3月底结束,我们当时实现了Aditributor算法,最后的得分为0.18,而排行榜第一名的得分可以达到0.97(1为满分)。令人窒息,感觉这次果然是跨界打酱油了。我们决定果断放弃实现iDice,而是直接开始实现HotPot,希望可以得到比较理想的成绩。
预赛第二阶段,Hotspot那篇论文花了两到三周的时间琢磨整个算法,然后花了2周的时间实现,最后在5.1劳动节假期实现了完整版本,在预赛第二阶段的比赛中得到了0.49的得分,排名为18名。不过,在代码中有个bug(在预赛第三阶段才发现,所以导致得分不是特别理想)。
预赛第三阶段,找到了之前提到了那个bug,并修复,得分有大幅度提升,但是没有排到理想位置。后来,我们发现一个规律可以筛选出潜在候选集,然后使用MCTS在这个候选集中找到根因,可以极大的提升得分。并且,我们发现即使不需要MCTS,只需要在这个候选集合中直接计算PS,都可以得到比较好的结果。所以,我们认为MCTS的作用不是特别大。最终,在5月26日,我们用完了最后的提交机会,获得了0.64的分数,较稳的排在了前16的位置,进入了决赛。
决赛阶段只有一周时间,主要是将算法改为增量执行模式。在这个过程中,无法使用异常时刻之后的数据,这样会很大的影响KPI预测质量。现在,整个结果已调通并且提交可执行程序,等待组委会的最终排名。
收获和总结
经过这次比赛,本人还收获了不少,
- 开阔了视野,了解了AI在运维邻域中的实践,尤其是多维监控问题;
- 实战应用了MCTS的运行机制,后面也许有用;
- 累积了平级跨团队合作的经验,对后面的工作有所帮助;
- 连续3个多月的周末和假期都投入到这个比赛中,这种体验也比较难得,多年后回忆起这段时光,也许别有一番滋味。
附录1 Aditributor导读
着重阅读第3章,算法介绍。第4章将算法扩展到衍生指标,与本次比赛无关,有兴趣的同学可以看下。其他章节是背景介绍,问题定义,实验等。算法核心规则如下,
Explanatory Power
- $ EP_{ij} = \frac{A_{ij}(m)-F_{ij}(m)}{A(m)-F(m)} $
- 度量变化占比
Surperise
- 度量指标分布的变化
- 使用JL散度,KL散度的变种。
- KL不对称,而且在概率为0有严格要求,不适合当前场景。
附录2 iDice导读
第四章介绍iDice核心算法。核心算法主要分为三部分,
Impact based Prunning
- 核心思想:一个有用组合必须引起较大数量变化。
- 频繁集合裁剪非频繁项,与时间无关,例如啤酒和尿布问题。
Change Dection based Pruning
- 核心思想:一个有用组合必须在时间点上符合变化特征。
- 检查集合下数据是否在时序上符合特征,例如Figure 1中跳跃点在8th-Dec。使用Generalized Likelihood Ratio计算时序差异。
Isolation Power based Pruning
- 核心思想:合并多余组合。
- 方法借鉴决策树中信息增益的思路,将Entry增减明显的属性集合放在前面。
附录3 HotSpot导读
此论文核心思想有三个
- Potential Score计算,这个指标还是比较赞,虽然仍有不完美,但是在我们的比赛中起到了较关键的作用;
- MCTS启发式搜索,其实只用了TS,没用MC;我们认为这个比较鸡肋,估计用了这个好发文章,毕竟Alpha Go也用了这个技术。
- 贪心逐层剪枝策略。
以上所述就是小编给大家介绍的《AI OPS比赛【多维监测指标的异常定位】回顾》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 利用RunLoop监测卡顿
- Flutter异常监测与上报
- 视频演讲: 移动 App 性能监测
- Linux 系统监测工具 sysstat 介绍
- 监测防护SambaCry CVE-2017-7494漏洞
- 保险业反洗钱智能监测模型研究
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
自制编程语言 基于C语言
郑钢 / 人民邮电出版社 / 2018-9-1 / CNY 89.00
本书是一本专门介绍自制编程语言的图书,书中深入浅出地讲述了如何开发一门编程语言,以及运行这门编程语言的虚拟机。本书主要内容包括:脚本语言的功能、词法分析器、类、对象、原生方法、自上而下算符优先、语法分析、语义分析、虚拟机、内建类、垃圾回收、命令行及调试等技术。 本书适合程序员阅读,也适合对编程语言原理感兴趣的计算机从业人员学习。一起来看看 《自制编程语言 基于C语言》 这本书的介绍吧!