建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
温馨提示

抱歉,您需设置社区昵称后才能参与社区互动!

前往修改
我再想想

华为云大赛技术圈

话题 : 467 成员 : 405

加入HCSD

揭开KPI异常检测顶级AI模型面纱(5)--南开大学Excavator团队(挖机联盟)

华为云大赛... 2020/12/8 602

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

赛题任务


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

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

image.png

数据初探


训练集数据仅有5列,分别是:

  • kpi_id:表示某个KPI名称,本次共分为20个KPI_ID。

  • start time、end time:采样间隔为1小时,用于指示当前KPI值的开始时间和结束时间。

  • value:KPI值,本次KPI检测的关键数据,核心特征。

  • label:标签值,指示kpi值是否异常。0为正常,1为异常。

image.png


除去ID列和标签列,仅有时间特征和kpi特征。其中最为关键的就是KPI值,通过KPI值的时序变化,来判别异常点。


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

01

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

image.png

image.png

02

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

image.png

03

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


image.png

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


特征工程


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

01窗口特征:向上向下取一定数量的值(称为窗口),进行统计分析,观察某一周期内value值的变化情况。可以使用Dataframe中rolling函数。(1)统计量:均值(mean)、标准差(std)、方差(var)等。(2)窗口大小:12h内,24h内,7天内等。02差分特征:时间移位作差,目的是观察数据的时序变化。可以使用diff函数。(1)差分方式:时间向上移位作差、时间向下移位作差。(2)差分量:1阶~10阶。03
卡方分箱:基于卡方检验,将连续型变量做分箱处理,减小数据异常值带来的影响。在本题中主要针对不稳定ID,将其value值放缩并进行一个映射,衍生出非线性特征,便于模型理解。image.png

解决方案

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

01

稳定ID

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

image.png

image.png

02

不稳定ID

(1)直接按照模型概率划分0,1

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

image.png


(2)经常会出现两个连续1的ID

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

image.png


(3)模型概率加阈值划分

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

image.png

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

image.png

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


总 结


  1. 首先分ID训练优化模型,对于较少ID的比赛(比如本次比赛)还可以,对于ID多的恐怕会相当复杂,所以还是很期待前排“1”佬们的方案。

  2. 我们提供的方案主要还是单模,难免在最后阶段进入瓶颈期。后面还要更多考虑模型融合,发掘不同模型之间的优势,取长补短。

  3. 特征挖掘思路较为常规,还需要进行更深入的挖掘,毕竟“特征为王”,挖到几个强特可能直接分数暴增。

  4. 对于华为NAIE平台,刚开始使用的时候还是挺困难的,但是一天的摸索后,就一句话:NAIE真香。

  5. 对于赛制:没有B榜可能是唯一的槽点吧,全都朝着A棒拟合,模型泛化能力检测不够吧。有点慈善赛的味道(不是为了买代码)。

  6. 希望下次还能有机会参加华为的比赛,和各路高手比拼。和GREAT再战300回合!


本文首发:网络人工智能园地

https://mp.weixin.qq.com/s/vcSB8qtpDI6m4_NCGUAV3w


回复 (0)

没有评论
上划加载中
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

华为云大赛小助手

角色:成员

话题:136

发消息
更新于2020年12月08日 09:26:32 6020
直达本楼层的链接
楼主
正序浏览 只看该作者
[参赛经验分享] 揭开KPI异常检测顶级AI模型面纱(5)--南开大学Excavator团队(挖机联盟)

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

赛题任务


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

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

image.png

数据初探


训练集数据仅有5列,分别是:

  • kpi_id:表示某个KPI名称,本次共分为20个KPI_ID。

  • start time、end time:采样间隔为1小时,用于指示当前KPI值的开始时间和结束时间。

  • value:KPI值,本次KPI检测的关键数据,核心特征。

  • label:标签值,指示kpi值是否异常。0为正常,1为异常。

image.png


除去ID列和标签列,仅有时间特征和kpi特征。其中最为关键的就是KPI值,通过KPI值的时序变化,来判别异常点。


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

01

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

image.png

image.png

02

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

image.png

03

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


image.png

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


特征工程


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

01窗口特征:向上向下取一定数量的值(称为窗口),进行统计分析,观察某一周期内value值的变化情况。可以使用Dataframe中rolling函数。(1)统计量:均值(mean)、标准差(std)、方差(var)等。(2)窗口大小:12h内,24h内,7天内等。02差分特征:时间移位作差,目的是观察数据的时序变化。可以使用diff函数。(1)差分方式:时间向上移位作差、时间向下移位作差。(2)差分量:1阶~10阶。03
卡方分箱:基于卡方检验,将连续型变量做分箱处理,减小数据异常值带来的影响。在本题中主要针对不稳定ID,将其value值放缩并进行一个映射,衍生出非线性特征,便于模型理解。image.png

解决方案

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

01

稳定ID

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

image.png

image.png

02

不稳定ID

(1)直接按照模型概率划分0,1

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

image.png


(2)经常会出现两个连续1的ID

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

image.png


(3)模型概率加阈值划分

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

image.png

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

image.png

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


总 结


  1. 首先分ID训练优化模型,对于较少ID的比赛(比如本次比赛)还可以,对于ID多的恐怕会相当复杂,所以还是很期待前排“1”佬们的方案。

  2. 我们提供的方案主要还是单模,难免在最后阶段进入瓶颈期。后面还要更多考虑模型融合,发掘不同模型之间的优势,取长补短。

  3. 特征挖掘思路较为常规,还需要进行更深入的挖掘,毕竟“特征为王”,挖到几个强特可能直接分数暴增。

  4. 对于华为NAIE平台,刚开始使用的时候还是挺困难的,但是一天的摸索后,就一句话:NAIE真香。

  5. 对于赛制:没有B榜可能是唯一的槽点吧,全都朝着A棒拟合,模型泛化能力检测不够吧。有点慈善赛的味道(不是为了买代码)。

  6. 希望下次还能有机会参加华为的比赛,和各路高手比拼。和GREAT再战300回合!


本文首发:网络人工智能园地

https://mp.weixin.qq.com/s/vcSB8qtpDI6m4_NCGUAV3w


点赞 举报
分享

分享文章到朋友圈

分享文章到微博

游客

您需要登录后才可以回帖 登录 | 立即注册