大数据-通信运营商客户流失分析与预测
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
count 899904.000000 899904.000000 899904.000000 899904.000000
899904.000000
mean 34.507915
0.510393 66.016826
52.388983
118.595064 …
std
34.232039
0.499892 0.958607 48.936066
print('data每个特征缺失的率为:\n',naRate)
Out[5]: data每个特征缺失的率为:
USER_ID
0.0%
INNET_MONTH
0.0%
IS_AGREE
0.0%
CREDIT_LEVEL
0.0%
……
OS_DESC
4.243230389019273%
TERM_TYPE
0.0%
IS_LOST
➢ 通信运营商客户流失分析与预测的总体流程如下图所示,具体步骤如下。
业务系统
数据准备
特征工程
模型训练与评价
需求分析 数据收集
数据去重 数据降维 数据清洗 数据合并
训 练 集
哑变量处理
测 试 集
模型训练
模型评价
模型重构 与寻优
结果分析
性能度量 模型应用
大数据挖掘专家
7
餐饮企业数据分析的步骤与流程
➢ 导入原始数据,查找并删除完全重复的数据。 ➢ 剔除与预测相关性不强的特征,降低维数。 ➢ 对整理后的数据集进行清洗,查找缺失值和异常值,对存在缺失的数据按照一定的规则赋值,删除异
处理异常值后数据集的形状为: (899901, 29)
大数据挖掘专家
16
数据合并
1. 分组计算用户基本特征的中位数和方差
➢ 将数据按照用户ID分组,求出每个用户的费用、通话时长等基本特征三个月内的中位数和方差,如下代码
所示。
In[1]:
import os import pandas as pd import numpy as np data_drop = pd.read_csv('../tmp/data_drop.csv', encoding='utf8') data_group = data_drop.groupby("USER_ID").agg({'ACCT_FEE':[np.median,np.var],\
In[8]: Out[8]:
# 删除异常数据 data_drop = data_drop[data_drop['INNET_MONTH'] >= 0] data_drop = data_drop[data_drop['ACCT_FEE'] < 400000] print('处理异常值后数据集的形状为:',data_drop.shape) data_drop.to_csv('../tmp/data_drop.csv', encoding='utf8')
国内漫游通话次数(次)
P2P_SMS_CNT_UP
短信发送数(条)
TOTAL_FLUX
上网流量(MB)
LOCAL_FLUX
本地非漫游上网流量(MB)
GN_ROAM_FLUX
国内漫游上网流量(MB)
CALL_DAYS
有通话天数
大数据挖掘专家
5
通信运营商数据基本状况
名称 CALLING_DAYS CALLED_DAYS CALL_RING CALLING_RING CALLED_RING CUST_SEX CERT_AGE CONSTELLATION_DESC MANU_NAME MODEL_NAME OS_DESC TERM_TYPE IS_LOST
8
目录
1
通信运营商客户流失分析需求
2
数据准备
3
特征工程
4
使用多层感知器算法实现通信运营商 客户流失预测
5
小结
大数据挖掘专家
9
数据去重与降维
➢ 原始数据中存在一部分重复记录,删除这部分重复记录,并查找原始数据中是否存在重复的特征,如
下代码所示。
In[1]:
Out[1]: In[2]: Out[2]:
处理缺失值后数据集的形状为: (899904, 29)
大数据挖掘专家
14
数据清洗
2. 异常值处理
➢ 对数据集中的每一列进行统计分析,查看是否存在异常值,如下代码所示。
In[6]: Out[6]:
# 对列统计分析 data_drop.describe()
INNET_MONTH IS_AGREE CREDIT_LEVEL VIP_LVL ACCT_FEE …
国内长途通话时长(秒)
GN_ROAM_CALL_DURA
国内漫游通话时长(秒)
CDR_NUM
通话次数(次)
NO_ROAM_CDR_NUM
非漫游通话次数(次)
NO_ROAM_LOCAL_CDR_NUM 本地通话次数(次)
NO_ROAM_GN_LONG_CDR_NU M
国内长途通话次数(次)
GN_ROAM_CDR_NUM
常数据。 ➢ 合并用户的基本信息特征,将3个月的记录合并为一条。 ➢ 简化手机品牌和操作系统特征,并进行独热编码便于构建模型。 ➢ 将合并后的数据集划分为训练集和测试集,并对数据进行标准化处理。 ➢ 基于训练集构建客户流失预测模型。 ➢ 在测试集上应用客户流失预测模型,并对预测结果进行评价
大数据挖掘专家
降维后的数据形状为: (899904, 29)
大数据挖掘专家
12
数据清洗
1. 缺失值处理
➢ 检测数据中是否存在的缺失值,如下代码所示。
In[5]:
# 统计各个特征的缺失率
naRate
=
(data_drop.isnull().sum()/data_drop.shape[0]*100).astype('str')+'%'
3
通信运营商数据基本状况
➢ 某运营商提供了不同用户的三个月使用记录共900000条数据,共34个特征,其中存在着重复值,缺失 值与异常值,其字段说明如下表所示。
名称
字段描述
MONTH_ID
月份
USER_ID
用户ID
INNET_MONTH
在网时长
IS_AGREE
是否合约有效用户
AGREE_EXP_DATE
➢ 随着机器学习技术的不断发展和应用,移动运营商希望能借助机器学习算法识别哪些用户可能流失 ,什么时候会发生流失。而通过建立流失预测模型,分析用户的历史数据和当前数据,提取辅助决 策的关键性数据,并从中发现隐藏关系和模式,进而预测未来可能发生的行为,就可以帮助移动运 营商实现这些要求。
大数据挖掘专家
删除重复列后的数据形状: (899904, 34)
大数据挖掘专家
11
数据去重与降维
➢ 原始数据中的用户性别、年龄和星座等信息与用户流失预测相关性很小。因此,可以对原数据集进行
降维处理,如下代码所示。
In[4]: Out[4]:
# 数据降维 del data_drop['MODEL_NAME'] # 手机型号 del data_drop['AGREE_EXP_DATE'] # 删除合约是否到期 del data_drop['CUST_SEX'] # 性别 del data_drop['CONSTELLATION_DESC'] # 星座 del data_drop['CERT_AGE'] # 年龄 print('降维后的数据形状为:', data_drop.shape)
# VIP等级为nan的补0 data_drop['VIP_LVL'] = data_drop['VIP_LVL'].fillna(0) # 操作系统缺失的 填补ANDROID data_drop['OS_DESC'] = data_drop['OS_DESC'].fillna('ANDROID') print('处理缺失值后数据集的形状为:',data_drop.shape)
for l in range(k+1,lenDet): if detEquals.iloc[k,l] & (detEquals.columns[l] not in dupCol): dupCol.append(detEquals.columns[l])
# 删除重复列 data_drop.drop(dupCol,axis=1,inplace=True) print('删除重复列后的数据形状:',data_drop.shape)
合约计划到期时间
CREDIT_LEVEL
信用等级
VIP_LVL
VIP等级
ACCT_FEE
本月费用(元)
大数据挖掘专家
4
通信运营商数据基本状况
名称
字段描述
CALL_DURA
通话时长(秒)
NO_ROAM_LOCAL_CALL_DURA 本地通话时长(秒)
NO_ROAM_GN_LONG_CALL_DU RA
for j in df.columns: dfEquals.loc[i,j]=df.loc[:,i].equals(df.loc[:,j])
return dfEquals detEquals=FeatureEquals(data_drop) # 应用FeatureEquals函数 # 遍历所有数据 lenDet = detEquals.shape[0] dupCol = [] for k in range(lenDet):
大数据挖掘专家
字段描述 有主叫天数 有被叫天数 语音呼叫圈 主叫呼叫圈 被叫呼叫圈 性别 年龄 星座 手机品牌名称 手机型号名称 操作系统描述 终端硬件类型(0=无法区分,4=4g、3=3g、2=2g) 用户在3月是否流失标记(1=是,0=否),1月和2月值为空
6
通信运营商客户流失分析与预测的步骤与流程
import os import pandas as pd # 读取数据文件 data = pd.read_csv('../data/USER_INFO_M.csv', index_col=0,encoding = 'gbk') print('原始数据形状为:',data.shape)
原始数据形状为: (900000, 34)
大数据挖掘专家
10
数据去重与降维
In[3]: Out[3]:
# 查找是否有重复特征 # 定义求取特征是否完全相同的矩阵的函数 def FeatureEquals(df):
dfEquals=pd.DataFrame([],columns=df.columns,index=df.columns) for i in df.columns:
大数据,成就未来
通信运营商客户流失分析与预 测
目录
1
通信运营商客户流失分析需求
2
数据准备
3
特征工程
4
使用多层感知器算法实现通信运营商 客户流失预测
5
小结
大数据挖掘专家
2
通信运营商现状与需求
➢ 随着业务的快速发展、移动业务市场的竞争愈演愈烈。如何最大程度地挽留在网用户、吸取新客户 ,是电信企业最关注的问题之一。竞争对手的促销、公司资费软着陆措施的出台和政策法规的不断 变化,影响了客户消费心理和消费行为,导致客户的流失特征不断变化。对于电信运营商而言,流 失会给电信企业带来市场占有率下降、营销成本增加、利润下降等一系列问题。在发展用户每月增 加的同时,如何挽留和争取更多的用户,是一项非常重要的工作。
# 去除重复记录 data_drop = pd.DataFrame.drop_duplicates(data,subset=None,keep='first',inplace =False) print('删除重复记录后的数据形状为:',data_drop.shape)
删除重复记录后的数据形状为: (899904, 34)
66.63633009743262%
dtype: object)
大数据挖掘专家
13
数据清洗
ቤተ መጻሕፍቲ ባይዱ
1. 缺失值处理
➢ 由上代码可知,其中IS_LOST为客户是否流失的标签字段不需要进行插补,而VIP等级(VIP_LVL)和操作
系统(OS_DESC)的缺失值较多,需要进行插补,如下代码所示。
In[6]: Out[6]:
167.792836 …
min
-251.000000
0.000000 0.000000 0.000000 0.010000 …
25%
10.000000
0.000000 65.000000
0.000000 54.850000 …
50%
24.000000
1.000000 66.000000
99.000000
86.000000 …
75%
49.000000
1.000000 67.000000
99.000000
143.580000 …
max
249.000000
1.000000 67.000000
99.000000
65007.210000 …
大数据挖掘专家
15
数据清洗
2. 异常值处理
➢ 由上代码可知,在网时长(INNET_MONTH)出现小于0的异常值,本月费用(ACCT_FEE)出现大于 40000的异常值,需要对这部分异常数据进行删除处理,如下代码所示。