[参赛经验分享]揭开KPI异常检测顶级AI模型面纱5(Excavator团队)

举报
就挺突然 发表于 2021/01/05 10:48:31 2021/01/05
【摘要】 首先感谢华为公司举办的比赛,感谢提供给我们一个提升自己的机会。我们是来自南开大学的Excavator团队(挖机联盟),本次比赛非常有幸能进入前10。01赛题任务本次KPI异常检测比赛提供了某运营商的部分网元的KPI真实数据,根据历史一个月的异常标签数据,训练机器学习模型,智能预测后续一周内KPI中的异常。评价函数为二分类中常用的F1-score:02数据初探训练集数据仅有5列,分别是:kpi...

首先感谢华为公司举办的比赛,感谢提供给我们一个提升自己的机会。我们是来自南开大学的Excavator团队(挖机联盟),本次比赛非常有幸能进入前10。


01


赛题任务



本次KPI异常检测比赛提供了某运营商的部分网元的KPI真实数据,根据历史一个月的异常标签数据,训练机器学习模型,智能预测后续一周内KPI中的异常。

评价函数为二分类中常用的F1-score:

图片







02


数据初探



训练集数据仅有5列,分别是:
  • kpi_id:表示某个KPI名称,本次共分为20个KPI_ID。
  • start time、end time:采样间隔为1小时,用于指示当前KPI值的开始时间和结束时间。
  • value:KPI值,本次KPI检测的关键数据,核心特征。
  • label:标签值,指示kpi值是否异常。0为正常,1为异常。 图片
除去ID列和标签列,仅有时间特征和kpi特征。其中最为关键的就是KPI值,通过KPI值的时序变化,来判别异常点。

根据上述分析,将本赛题归纳出几个关键字:时序类数据、原始特征较少、二分类问题。接下来我们进一步分析,发现三个问题:


01



通过绘制value值分布图发现,不同kpi_id的 value值分布截然不同:有的较为平稳,有的波动很大,且取值区间也相差很大。

图片
图片

02



通过对label列的value_counts()函数统计发现,0值较多,1值极少。0与1取值分布如下图所示,比值约为98.5:1.5,训练集数据极为不平衡。
图片

03



训练集数据的时间范围是2019/08/01至2019/09/22,将近两个月的数据;测试集数据的时间范围是2019/09/23至2019/09/29日一周的数据。特征工程时可以围绕“7天”这个周期进行构造。

图片

训练集时间范围

图片

试集时间范围




第一时间想到的解决方案是:分ID训练不同模型,根据1/0比值划分阈值,窗口大小优先选择7



03


特征工程



时序类数据和时间强相关,上下联系紧密,首先想到的就是窗口特征和差分特征。

01



窗口特征:向上向下取一定数量的值(称为窗口),进行统计分析,观察某一周期内value值的变化情况。可以使用Dataframe中rolling函数。
(1)统计量:均值(mean)、标准差(std)、方差(var)等。
(2)窗口大小:12h内,24h内,7天内等。

02



差分特征:时间移位作差,目的是观察数据的时序变化。可以使用diff函数。
(1)差分方式:时间向上移位作差、时间向下移位作差。
(2)差分量:1阶~10阶。

03



卡方分箱:基于卡方检验,将连续型变量做分箱处理,减小数据异常值带来的影响。在本题中主要针对不稳定ID,将其value值放缩并进行一个映射,衍生出非线性特征,便于模型理解。
图片



04


解决方案



常见的时序类模型会想到lstm等神经网络,但是其训练速度较慢,所以本次并未采用。本次采用数据挖掘比赛常用的Lightgbm模型,并结合数据规则进行综合评判。分ID思路如下:

01

稳定ID


一部分ID具有较稳定的value值,异常点即离群点。针对这个现象,我们根据折线图和散点图,找出这些稳定ID,设置一个KPI正常区间。区间之外的点为异常点,置为1。
  图片 图片

02

不稳定ID


(1)直接按照模型概率划分0,1
对于一部分不稳定ID,我们直接采用LGB模型预测,得到每个点是异常点的概率,再通过计算Train中0,1比例,得到概率划分基准点,再进行微调。
图片

(2)经常会出现两个连续1的ID
有一部分ID的异常点经常是连续出现的(2个),根据这种情况,我们采用的方案是:
①确定必然是异常的点(异常概率大,超过0.5)。
②在异常点的上下寻找概率较大的点,也将其记作异常点。
图片

(3)模型概率加阈值划分
最后一类问题是我们最头疼的一类问题,某些谷底的值,因为下降过程非常平滑,模型有时不能判断其是否是异常,这种我们通过模型概率先找出异常点,再划分阈值来判断异常。
图片

划分阈值思路:LGB五折交叉验证后得到训练集异常概率,再遍历0.001到0.5之间阈值(步长0.001),对比训练集标签并计算F1_score,从而得到最优的阈值list。根据最优阈值对测试集概率划分。
图片

最终评分0.9403,线上排名第10,复核排名第9



05


总 结



  1. 首先分ID训练优化模型,对于较少ID的比赛(比如本次比赛)还可以,对于ID多的恐怕会相当复杂,所以还是很期待前排“1”佬们的方案。
  2. 我们提供的方案主要还是单模,难免在最后阶段进入瓶颈期。后面还要更多考虑模型融合,发掘不同模型之间的优势,取长补短。
  3. 特征挖掘思路较为常规,还需要进行更深入的挖掘,毕竟“特征为王”,挖到几个强特可能直接分数暴增。
  4. 对于华为NAIE平台,刚开始使用的时候还是挺困难的,但是一天的摸索后,就一句话:NAIE真香。
  5. 对于赛制:没有B榜可能是唯一的槽点吧,全都朝着A棒拟合,模型泛化能力检测不够吧。有点慈善赛的味道(不是为了买代码)。
  6. 希望下次还能有机会参加华为的比赛,和各路高手比拼。和GREAT再战300回合!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。