摘要:2020GDE全球开发者大赛-KPI异常检测告一段落,来自深圳福田莲花街道的“原子弹从入门到精通”有幸取得了总榜TOP1的成绩,在这里跟大家分享深圳福田莲花街道在本次比赛的解决方案。

背景介绍

核心网在移动运营商网络中占据举足轻重的地位,其异常往往会导致呼叫失败、网络延迟等现网故障,对全网的服务质量带来重大的负面影响,多则影响十数万用户,并引发大面积投诉[1]。因此需要快速及时地发现核心网的异常风险,在影响扩大之前及时消除故障。

KPI是一类能够反映网络性能与设备运行状态的指标,本赛题提供某运营商核心网的KPI真实数据,数据形式为KPI时间序列,采样间隔为1小时,选手需要使用[2019-08-01,2019-09-23)的数据进行建模,使用训练好的模型对未来7天的数据进行预测,识别未来一周KPI序列中的异常点。

评估指标:

本赛题采用F1作为评估指标,具体计算公式如下:

P = TP/(TP+FP)

R = TP/(TP+FN)

F1 = 2*P*R/(P+R)

数据探索

数据**有20个不同的KPI,不同的KPI物理意义不同,代表了不同的核心网指标,由于赛题需要对未来7天的数据进行预测,因此对于建模样本也进行周级别的分布查看。从Fig1中可以明显看到训练集中前三周的异常率显著低于后续几周。进一步分析可以发现虽然赛题提供了[2019-08-01,2019-09-23)的全部数据,但2019-08-15之前所有20个KPI均毫无异常,第一个异常点是从2019-08-15 02:00:00开始出现的(Fig2),因此推测8.15前的数据分布不同于后续样本,或8.15之前存在标注异常的问题。实验中剔除8.15之前的样本建模效果也优于保留该时间段样本,进一步验证了该推测。

Fig1. KPI周级别异常统计

Fig2. 异常与否的最早数据时间

时间序列图对于快速理解数据及业务有着重要的作用,对20个时间序列进行观察后,将异常粗分为4类,如Fig3所示。

Fig3. 异常分类(时间序列中红点为异常,蓝点为正常)

1.边界型异常

如Fig3中a部分(红框)所示,边界型异常中异常样本的取值范围与正常值取值完全不同,即存在明确的决策边界可以完全分离异常点。

2.趋势破坏型异常

如Fig3中b部分(绿框)所示,正常样本点的走势往往沿着一个趋势,而趋势破坏型的异常点会偏离这个趋势,但取值范围可能仍然在正常样本的取值范围内,这类异常与相邻点的差异较大,与相同时刻正常点的取值差异也较大。

3.0值型异常

如Fig3中c部分(橙框)所示,此类异常取值直接为0,根据对业务的理解,正常的KPI不应出现0值,根据分析,20个KPI中有19个正常取值均不应为0,仅1个KPI正常取值为0,非0则为异常。

4.其他型异常

如Fig3中d部分(紫框)所示,此类异常往往既没有破坏趋势,取值也在正常的范围内,但可能会偏离相同时刻的正常取值。

解题思路

赛题有20个不同的KPI,KPI物理意义不同且异常的种类也多种多样,若将所有KPI作为一个整体建立一个统一的二分类模型,模型效果差强人意,难以进入前排,但若对每个KPI单独建模,则需要建立并维护调优至少20个不同的模型,维护成本过高,因此思路是将KPI或异常进行分类建模。

1)边界发现

决策树会根据目标的分布将样本划分在不同的特征空间范围内(如Fig4 所示),非常适合用于边界的发现与确定。因此针对边界型异常,即好坏样本取值完全不同的异常,决定采用决策树进行边界的自动发现与确定,具体如下:

遍历20个KPI,若仅使用时间序列取值建立的单变量浅层简单决策树在训练集中的F1score=1,便认为该KPI为边界型异常KPI,并使用该决策树的预测结果作为决策边界,对相同KPI的未来样本进行预测。

Fig4. 基于决策树的边界发现

对KPI进行遍历后可知,存在7个KPI所有异常均为边界型异常,即7个KPI在训练集中的所有异常取值范围均不同于正常样本。最终结果也表明,该方案不仅在训练集中能100%识别边界型KPI的异常,在测试集中也能100%识别相关异常。

2)非边界型异常探索

非边界型异常往往KPI走势存在一定的周期,若将时间周期剥离出来进行分析,则可以从二维的角度对时间序列进行观察。

Fig5. 时间序列的二维展示

以kpi_id= 9415a… 为例,若将日期信息剥离,x轴仅为一天中的第几小时,y轴仍然为时间序列取值,则会得到如Fig5的展示。此时整个时间序列被呈现在一个二维空间中,且异常值(红点)多与正常值(蓝点)偏离较远,一个朴素的思路便是采用无监督方法识别图中的异常。事实上,在实际的生产环境中,多达5000+原始KPI,300+衍生KPI,难以获得有异常标注的时间序列,因此在生产环境中往往使用统计方法或无监督算法进行异常检测[1,2]。但在当前有标签的赛题下,经多次尝试,无监督算法如iForest,DBSCAN以及时间序列分解方法如Prophet均无法胜过有监督机器学习算法。因此,对于非边界型异常,最终决定使用有监督机器学习算法进行建模。

3)KPI类型划分在

1)中基于简单决策树发现了7个边界型异常KPI,但剩余的13个KPI物理意义各不相同,需要进行分组建模。分组最基本的思想便是相似的KPI应该分在相同的组中。Pearson相关系数是最熟悉的相关性指标,其物理意义是表示两个变量同向或反向变动的程度,非常适合用于时间序列的相似性分析。通过对剩余13个KPI的相似性分析可以发现,以下两组id间的两两相关系数在0.9或以上。cluster1=[9415a…, 600a5…, ed63c…]

cluster2=[b3842…, bb6bb…, 3fe4d…]

Fig6. cluster1时间序列对比示例

以cluster1为例(Fig6.),可以看到相似性分组中不同KPI的时间序列不仅走势接近,而且往往当分组内一个KPI产生异常时,其他KPI也会同步异常,表现出非常高的联动性。因此对于相似性分组的模型建立非常关键,往往异常的召回和误报均为3倍,也就是对一个则3倍上分,错一个则3倍掉分,赛程中段快速上分的核心点便是这部分模型的建立。

对于剩余的7个KPI,最终依据是否包含周期,将其划分为3小类进行分组建模:半周期型:cluster3_1 = [4f493…]无周期型:cluster3_2 = [29374…,8f522…]强周期型:cluster3_3 = [681cb…, 0a9f5…,355ed…,3e1f1…]其中,半周期型KPI仅在部分时间段表现出周期趋势,其他时间段取值几乎完全相同。无周期型KPI取值与时间无明显关联,强周期型KPI取值随时间不同产生周期性波动。

特征构造

根据前文分析以及对时间序列问题的理解,本赛题中构造了以下5种类型的变量。1.基础变量:一天中的第几小时,星期几,kpi_id的各种编码如label encoder,target encoder等等;2.差分变量:一阶差分,二阶差分,三阶差分;3.平移变量:上n个时间点该kpi_id的value或差分的取值及其简单衍生,如24小时前的value取值等;4.滑窗变量:过去n段时间该kpi_id的各类统计变量及其简单衍生,如过去24小时value的均值等;5.强相关窗口统计:如过去7天内该时间点上下两小时内介于该取值0.95-1.05范围内样本的总个数等等;

模型方案

鉴于本赛题难以建立一个能够应用于全部KPI的统一模型,而解题过程中有较多模型需要建立与调优,为提高效率,在早期进行不同模型的若干次尝试后便决定使用训练速度较快且效果较好的LightGBM为各个分组建立二分类模型。

在实际的建模中发现仅用[2019-08-15,2019-09-08]的数据建模效果优于全部数据或使用更接近测试集样本的后几周数据,结合Fig1中异常率在后几周大幅持续降低的现象,判断[2019-09-09,2019-09-22]的异常分布可能不同或存在部分标注问题。在进一步探索后发现嫁接学习的引入能够充分的使用到全部异常数据并取得更好的效果。

嫁接学习是迁移学习的一种,用来描述将一个树模型a的输出作为另一个树模型b的输入的方法(a,b往往数据分布不同或完全属于不同产品,与同分布数据的常规融合有着本质区别),此种方法与树木繁殖中的嫁接类似,故而得名[3]。在IJCAI2018广告算法大赛中,前六天和最后一天数据分布不同,于是大部分人用同分布的第七天上半天的数据预测下半天,而植物大佬用前六天的数据训练了一个模型,预测第七天得到的分数作为第七天模型的特征,再用第七天上半天的数据预测下半天,最后轻松得到solo冠军,事后植物说这是他玩的最容易的比赛,毕竟人家用半天数据,植物用的是六天半的数据[3,4,5]。其他数据分布不同的场景下TOP方案中亦有嫁接学习的身影,如蚂蚁金服ATEC支付风险识别TOP1方案[6],CCF BDCI 2018 个性化套餐匹配TOP1方案[7]等[3] 。

在若干次尝试后,最终确定了以存在异常日期样本为1层模型样本, [2019-08-15,2019-09-08]样本结合1层模型分数作为2层模型输入的方案,模型框架如Fig7.所示,该框架的引入在本赛题中提分明显,是上分的关键点之一。

Fig7. 模型框架

结合前文的内容,最终建模方案如Fig8所示,先进行KPI边界的自动发现,解决7个边界型KPI的异常,对于剩余的13个KPI,先根据相似性将其拆解为相似群组(6个KPI)和不相似群组(7个KPI),相似群组由组内相关系数较高的cluster1和cluster2构成,不相似群组按照是否包含周期划分为半周期群组cluster3_1,无周期群组cluster3_2和强周期群组cluster3_3,再对不同的群组分别建模,最后汇总生成最终结果。最终该方案取得了线上最高分及答辩最高分的成绩。

Fig8. 建模方案

鸣谢

非常感谢希旭哥,苕芸博士,素颜姐,小爱姐等人在比赛过程中的帮助与指导,希旭哥还是一如既往的热情,总能在第一时间为大家答疑解惑。

感谢庐山大佬赛后的精彩分享[2],让人受益匪浅。以前没看过华为云开发者沙龙的分享,这次看完后觉得可针不戳,以后每期都不能错过。

最后祝华为及NAIE蒸蒸日上,再创辉煌!

Reference

[1] 网络AI-KPI异常检测,利器大揭秘https://bbs.huaweicloud.com/videos/103579

[2] DevRun开发者沙龙—火遍网络的KPI异常检测到底什么https://vhall.huawei.com/fe/watch/6658

[3] 嫁接学习简述https://zhuanlan.zhihu.com/p/98728768

[4] 结构化数据的迁移学习:嫁接学习https://zhuanlan.zhihu.com/p/51901122

[5] IJCAI-2018 TOP1分享https://github.com/plantsgo/ijcai-2018

[6] ATEC支付风险大赛Top1解决方案https://zhuanlan.zhihu.com/p/45826529

[7] CCF BDCI 2018 个性化套餐匹配TOP1方案https://github.com/PPshrimpGo/BDCI2018-ChinauUicom-1st-solution

本文分享自华为云社区《揭开KPI异常检测顶级AI模型面纱1》,原文作者:就挺突然 。

点击关注,第一时间了解华为云新鲜技术~

揭开KPI异常检测顶级AI模型面纱的更多相关文章

  1. AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测

    AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com   作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...

  2. 网络KPI异常检测之时序分解算法

    时间序列数据伴随着我们的生活和工作.从牙牙学语时的“1, 2, 3, 4, 5, ……”到房价的走势变化,从金融领域的刷卡记录到运维领域的核心网性能指标.时间序列中的规律能加深我们对事物和场景的认识, ...

  3. 从时序异常检测(Time series anomaly detection algorithm)算法原理讨论到时序异常检测应用的思考

    1. 主要观点总结 0x1:什么场景下应用时序算法有效 历史数据可以被用来预测未来数据,对于一些周期性或者趋势性较强的时间序列领域问题,时序分解和时序预测算法可以发挥较好的作用,例如: 四季与天气的关 ...

  4. Abnormal Detection(异常检测)和 Supervised Learning(有监督训练)在异常检测上的应用初探

    1. 异常检测 VS 监督学习 0x1:异常检测算法和监督学习算法的对比 总结来讲: . 在异常检测中,异常点是少之又少,大部分是正常样本,异常只是相对小概率事件 . 异常点的特征表现非常不集中,即异 ...

  5. Stanford机器学习---第十一讲.异常检测

    之前一直在看Standford公开课machine learning中Andrew老师的视频讲解https://class.coursera.org/ml/class/index 同时配合csdn知名 ...

  6. 《为大量出现的KPI流快速部署异常检测模型》 笔记

    以下我为这篇<Rapid Deployment of Anomaly Detection Models for Large Number of Emerging KPI Streams>做 ...

  7. 从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主

    总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制.过采样后模型选择RF.xgboost.神经网络能够取得非常不错的效果.(2)模型层面:使用模型 ...

  8. 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF

    https://www.researchgate.net/post/How_to_determine_unknown_class_using_neural_network 里面有讨论,说是用rbf神经 ...

  9. EGADS介绍(二)--时序模型和异常检测模型算法的核心思想

    EDADS系统包含了众多的时序模型和异常检测模型,这些模型的处理会输入很多参数,若仅使用默认的参数,那么时序模型预测的准确率将无法提高,异常检测模型的误报率也无法降低,甚至针对某些时间序列这些模型将无 ...

  10. 【异常检测】孤立森林(Isolation Forest)算法简介

    简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...

随机推荐

  1. 每个后端都应该了解的OpenResty入门以及网关安全实战

    简介 在官网上对 OpenResty 是这样介绍的(http://openresty.org): "OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成 ...

  2. db-cdc之mysql 深入了解并使用binlog

    1.什么是binlog? 2.binlog可以用来干什么? 3.怎么样使用binlog? binlog是记录所有数据库表结构变更(例如CREATE.ALTER TABLE-)以及表数据修改(INSER ...

  3. 手撕Vue-界面驱动数据更新

    经过上一篇文章,已经将数据驱动界面改变的过程实现了,本章节将实现界面驱动数据更新的过程. 界面驱动数据更新的过程,主要是通过 v-model 指令实现的, 只有 v-model 指令才能实现界面驱动数 ...

  4. 简单实现.NET Hook与事件模拟

    最近玩<星露谷物语>上瘾,本来是看着个休闲游戏,现在玩成修仙游戏了,上百个小时浑身是肝,中午午休习惯都强行给改了. 虽然挺有意思,但是太肝了,入坑前请谨慎.补充一下,这个游戏应该是基于 X ...

  5. NLP技术如何为搜索引擎赋能

    在全球化时代,搜索引擎不仅需要为用户提供准确的信息,还需理解多种语言和方言.本文详细探讨了搜索引擎如何通过NLP技术处理多语言和方言,确保为不同地区和文化的用户提供高质量的搜索结果,同时提供了基于Py ...

  6. 决策树C4.5算法的技术深度剖析、实战解读

    在本篇深入探讨的文章中,我们全面分析了C4.5决策树算法,包括其核心原理.实现流程.实战案例,以及与其他流行决策树算法(如ID3.CART和Random Forests)的比较.文章不仅涵盖了丰富的理 ...

  7. 一道入门的java安全题

    [XCTF]Zhuanxv 收获 java题的一般流程 HQL注入 SQL注入 看题 目录扫描 dirsearch扫目录,发现list目录: 一个登录界面,本着尽量不写sql注入题目的原则(因为太菜了 ...

  8. Vue3+Vite+ElementPlus管理系统常见问题

    本文本记录了使用 Vue3+Vite+ElementPlus 从0开始搭建一个前端工程会面临的常见问题,没有技术深度,但全都是解决实际问题的干货,可以当作是问题手册以备后用.本人日常工作偏后端开发,因 ...

  9. jdk21的外部函数和内存API(MemorySegment)(官方翻译)

    1.jdk21:   引入一个 API,通过该 API,Java 程序可以与 Java 运行时之外的代码和数据进行互操作.通过有效地调用外部函数(即JVM外部的代码)和安全地访问外部内存(即不由JVM ...

  10. [THUPC 2023 初赛] 快速 LCM 变换

    题目描述 小 I 今天学习了快速最小公倍数变换(Fast Least-Common-Multiple Transform, FLT),于是他想考考你. 给定一个长度为 \(n\) 的正整数序列 \(r ...