2020AIIA杯人工智能5G网络应用大赛KPI异常检测冠军团队方案分享

举报
就挺突然 发表于 2021/01/05 11:24:48 2021/01/05
【摘要】 核心网KPI指标异常检测作者:极限大家好,我们团队(USST)在2020AIIA杯人工智能5G网络应用大赛中核心网KPI指标异常检测赛道获得得了第一名的成绩,这里我们简单分享一下我们做该赛题的一个完成流程,主要从数据分析、特征工程和建模三大部分概述。针对此次赛题,我们团队通过从特征的时间序列、相关性、异常分布等角度分析入手,然后根据不同网元分组进行特征缩放、再通过提取统计特征(均值、方差等)...

核心网KPI指标异常检测

作者:极限


大家好,我们团队(USST)在2020AIIA杯人工智能5G网络应用大赛中核心网KPI指标异常检测赛道获得得了第一名的成绩,这里我们简单分享一下我们做该赛题的一个完成流程,主要从数据分析、特征工程和建模三大部分概述。针对此次赛题,我们团队通过从特征的时间序列、相关性、异常分布等角度分析入手,然后根据不同网元分组进行特征缩放、再通过提取统计特征(均值、方差等)、对比特征(差值、变化比例等)和组合特征完成特征工程部分。下面展示了我们团队完整的比赛过程,从数据分析到特征工程以及建模。



题目介绍

核心网在整个移动运营商网络中占据着举足轻重的地位,一旦故障,会对全网的服务质量影响很大。需要及时快速发现核心网的风险,在影响范围扩大之前及时消除故障。

关键性能指标(KPI),反应了网络性能和质量。对KPI进行检测,能够及时发现网络质量劣化风险。主办方将在比赛中提供某运营商的KPI真实数据,采样间隔为5分钟。参赛选手需要根据历史一个月异常标签数据(训练数据集),训练模型并检测后续一周内各KPI(测试数据集)中的异常。

链接:https://js.aiiaorg.cn/match/matchitem/109


数据分析+可视化

1、数据分析—时间序列

我们选取了其中一个网元位置一个月的数据分析了不同KPI指标的时间序列性。
数据:网元位置为” JS_NJ_VOLTEAS12_ZX_V”;
时间:2020-08
时间序列:部分特征有明显的周期性

注:红色的点表示异常点

图片
图片
整体来看,用户数量随着时间呈上升趋势

图片

当一次变量较大突变时,有大概率发生异常。

图片

一些变量发生断崖式变化时伴随着异常

图片

有些特征没有一个明显的周期规律,波动幅度也比较大

图片

图片


2、数据分析—特征分布

从一天的时间分布来看,从凌晨12点到4点发生异常的频率较高。

中午11点、12点和下午4点、5点发生频率较低。

图片
不同特征的集中趋势以及偏态和峰度都各有不同。
如下几个特征在训练集和测试集上分布一致。

图片

一些特征分布比较不均衡、训练集和测试集差异也较大。

图片


3、数据分析—相关性

数量型特征——通过计算皮尔逊相关系数
终端不可及次数、其他失败次数、被叫一号通未应答次数和应答话务量(Erl)之间的相关性达到0.9 以上。

主叫平均响应时长(秒)和被叫侧平均占用时长(秒)相关系数为0.73。

AS SH更新回应(PUA)失败次数和AS SH查询回应(UDA)失败次数相关系数为0.69

图片


变化率型的特征:
Rf接口开始计费成功率(%)、 Rf接口停止计费成功率(%)和 SH订阅成功率(%)两两之间特征相关性较强。

数据库空间占用率(%)和发送OPTIONS消息成功率(%)之间负相关性较高(相关系数为-0.84)。
图片



二、数据处理+特征工程



1、特征缩放+特征提取

①.分组:根据“网元位置”进行分组
②.组内归一化:
对数量型的特征全部进行分组归一化
优点:规避了不同网元位置变量之间的巨大差异性。
增强普适性,可预测未知网元位置的数据。
效果:变化率型的特征值范围: [0,100] 
数量型的特征值范围: [0,1]
代码
from sklearn.preprocessing import MinMaxScaler
mms=MinMaxScaler()
for col in cols:
    #分组归一化
ts[col] = ts.groupby("NE")[col].transform(lambda x:np.concatenate(mms.fit_transform(x.values.reshape(-1,1))))

③.组内特征提取
按时间序列通过滑动窗口提取特征
统计特征:均值、方差、分位数、偏度等。
对比特征:差值、变化比例等(主要和前一小时或前一天同时刻进行对比)。
组合特征:对一些统计特征也做对比。

代码:
<<  左右滑动查看更多  >>
for col in cols_win:1ts['win_2_mean_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=2,min_periods=1).mean().reset_index(0,drop=True)
2ts['win_2_sum_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=2).sum().reset_index(0,drop=True)

<<  左右滑动查看更多  >>
1ts['win_6_mean_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).mean().reset_index(0,drop=True)
2ts['win_6_std_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).std().reset_index(0,drop=True)
3ts['win_6_skew_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).skew().reset_index(0,drop=True)
4ts['win_6_kurt_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).kurt().reset_index(0,drop=True)
5ts['win_6_q25_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).quantile(0.25).reset_index(0,drop=True)
6ts['win_6_q50_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).quantile(0.50).reset_index(0,drop=True)
7ts['win_6_q75_{}'.format(col)]= ts.groupby("NE")[col].rolling(window=6,min_periods=3).quantile(0.75).reset_index(0,drop=True)



三、建模


模型上最初尝试使用了基于LSTM的AutoEncoder的无监督算法,经测试弱于监督算法且可解释性较弱,再没有采用。最后采用了常用的LightGBM和CatBoost,实际表现最好,泛化能力强。其中交叉验证采用了根据网元位置分组5折交叉验证(sklearn.model_selection.GroupKFold(n_splits=5),最后加权融合根据阈值判断异常。

模型部分代码可至华为NAIE平台AI市场下载,AIIA_unicom_kpi
https://www.hwtelcloud.com/market/models/7dbf9218-7413-4cab-9277-2f9a0f3389d2

图片




总结

比赛结束后,对比其他选手,我们总结了一下一些优势以及不足:
1、完整的数据分析,此次涉及的KPI指标较多,我们完整的分析了不同KPI指标发生异常时的变化,从而根据不同KPI指标构建相对应得特征。
2、普适性强,我们对KPI指标分了两类,一类是变化率类型的指标,统一范围为[0,100];一类是数量型的特征,我们全部分组缩放到了[0,1],统一了指标范围,增强了普适性。
3、时效性,时间特征上没有使用任何未来时点特征,并且最大向前取一天的数据,从而可以使模型较快的提前发现故障。

改进和展望
1、引入深度学习
  • DNN、RNN、LSTM等技术

  • 基于LSTM 的AutoEncoder无监督异常检测

2、集成业务规则
我们做数据分析的时候发现该指标“Rf接口开始计费成功率(%)”低于100全是异常。(复赛中6条、决赛1条数据都异常)该指标是否可以作为一个判断异常的充分非必要条件了。

声明:本文首发于华为NAIE《网络人工智能园地》微信公众号,如有转载,请注明出处。

图片

图片

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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