核心网KPI异常检测
业务目标
- 核心网在运营商网络中位置高,很少发生故障。但一旦发生故障,对全网稳定性和服务质量影响很大,另外,有时候网络问题只影响小部分用户,此时没有显性告警,只有当用户服务质量受损、投诉时才发现,在核心网网元 upgrade、关键配置修改时,需要快速发现网络异常,及时回退,核心网网元种类多,复杂网元 KPI 达数千个,人工难以全面精确识别故障异常,云核 KPI 数量多, 固定阈值维护复杂,精确度不高,无法支撑故障初期快速识别,这些问题都是由于传统的 KPI 监控无法及时的发现问题而产生的。
- 随着大数据技术的发展,我们可以结合大数据新技术建立 KPI 异常智能监控,及时预测以及发现异常 KPI,有效的高的网络的良好运行。
实验数据
- 通信系统中 ATS: 通用语音业务网元主要上报核心网的语音业务网元 KPI 信息。
- 有“BEGINTIME”、“DURATION”、“USERLABEL”、 “MEASOBJLDN”和“C478156420”列。
- 该场景目标为判断 KPI 的异常值,属于异常点检测问题,但是数据是时间序列数据, 故选择时间序列预测算法。本实验以 ARIMA 为例,该算法实现简单、不需做特征选 择,且有训练速度快等优势。
- 导入的 ATS 原始数据,需要按照时间维度进行分隔,前三十天的数据,用于生成训练集。最后一天的数据,用于生成测试集。分别需要创建用于生成训练集的特征工程和用于生成测试集的特征工程。
01 特征构建算法——生成训练集
- ATS 原始数据中列出了 31 天的数据,需要将前 30 天的数据拆分出来作为训练集。
下述代码就是过滤出前 30 天的数据。
# -*- coding: utf-8 -*-
# Automatically generated code template for feature operation 'time_fiter'
import pandas as pd
from datetime import datetime
# Real custom feature operation
# args:
# data: input pandas dataframe
# return:
# output pandas dataframe
def feature_op(data):
cond_start_time=datetime.strptime("2018/07/31 00:00:00","%Y/%m/%d %H:%M:%S")
data['BEGINTIME']=pd.to_datetime(data['BEGINTIME'],format="%Y/%m/%d %H:%M:%S")
data=data.loc[(data.BEGINTIME<cond_start_time)]
return data
02 特征构建算法——生成测试集
- 数据集界面仅导入了一份 ATS 原始数据,需要拆分出最后一天的数据生成测试集。
下述代码就是过滤出最后一天的数据,即 7 月 31 号的数据。
# -*- coding: utf-8 -*-
# Automatically generated code template for feature operation 'time_fiter'
import pandas as pd
from datetime import datetime
# Real custom feature operation
# args:
# data: input pandas dataframe
# return:
# output pandas dataframe
def feature_op(data):
cond_start_time=datetime.strptime("2018/07/31 00:00:00","%Y/%m/%d %H:%M:%S")
data['BEGINTIME']=pd.to_datetime(data['BEGINTIME'],format="%Y/%m/%d %H:%M:%S")
data=data.loc[(data.BEGINTIME>=cond_start_time)]
return data
03 训练算法 - KPI
# -*- coding: utf-8 -*-
# Automatically generated simple classification code for algorithm kpiprediction
from __future__ import print_function
from naie.datasets import get_data_reference
from naie.context import Context
from naie.metrics import report
from threading import Thread
from time import sleep
from sklearn.metrics import *
from sklearn.neural_network import MLPClassifier
import moxing as mox
import os
import pickle
import string
import pandas as pd
import numpy as np
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.tsa.stattools import arma_order_select_ic
from statsmodels.tsa.holtwinters import ExponentialSmoothing
from statsmodels