大数据通信运营商客户流失分析与预测课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《大数据通信运营商客户流失分析与预测课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据通信 运营商 客户 流失 分析 预测 课件
- 资源描述:
-
1、大数据,成就未来大数据,成就未来通信运营商客户流失分析与预测 2大数据挖掘专家1数据准备目录通信运营商客户流失分析需求2特征工程3使用多层感知器算法实现通信运营商客户流失预测4小结5 3大数据挖掘专家 随着业务的快速发展、移动业务市场的竞争愈演愈烈。如何最大程度地挽留在网用户、吸取新客户,是电信企业最关注的问题之一。竞争对手的促销、公司资费软着陆措施的出台和政策法规的不断变化,影响了客户消费心理和消费行为,导致客户的流失特征不断变化。对于电信运营商而言,流失会给电信企业带来市场占有率下降、营销成本增加、利润下降等一系列问题。在发展用户每月增加的同时,如何挽留和争取更多的用户,是一项非常重要的工
2、作。随着机器学习技术的不断发展和应用,移动运营商希望能借助机器学习算法识别哪些用户可能流失,什么时候会发生流失。而通过建立流失预测模型,分析用户的历史数据和当前数据,提取辅助决策的关键性数据,并从中发现隐藏关系和模式,进而预测未来可能发生的行为,就可以帮助移动运营商实现这些要求。通信通信运营商现状与需求运营商现状与需求 4大数据挖掘专家 某运营商提供了不同用户的三个月使用记录共900000条数据,共34个特征,其中存在着重复值,缺失值与异常值,其字段说明如下表所示。通信运营商数通信运营商数据基本状况据基本状况名称字段描述MONTH_ID月份USER_ID用户IDINNET_MONTH在网时长I
3、S_AGREE是否合约有效用户AGREE_EXP_DATE合约计划到期时间CREDIT_LEVEL信用等级VIP_LVLVIP等级ACCT_FEE本月费用(元)5大数据挖掘专家通信运营商数据基本状况通信运营商数据基本状况名称字段描述CALL_DURA通话时长(秒)NO_ROAM_LOCAL_CALL_DURA本地通话时长(秒)NO_ROAM_GN_LONG_CALL_DURA国内长途通话时长(秒)GN_ROAM_CALL_DURA国内漫游通话时长(秒)CDR_NUM通话次数(次)NO_ROAM_CDR_NUM非漫游通话次数(次)NO_ROAM_LOCAL_CDR_NUM本地通话次数(次)NO_
4、ROAM_GN_LONG_CDR_NUM国内长途通话次数(次)GN_ROAM_CDR_NUM国内漫游通话次数(次)P2P_SMS_CNT_UP短信发送数(条)TOTAL_FLUX上网流量(MB)LOCAL_FLUX本地非漫游上网流量(MB)GN_ROAM_FLUX国内漫游上网流量(MB)CALL_DAYS有通话天数 6大数据挖掘专家通信运营商数据基本状况通信运营商数据基本状况名称字段描述CALLING_DAYS有主叫天数CALLED_DAYS有被叫天数CALL_RING语音呼叫圈CALLING_RING主叫呼叫圈CALLED_RING被叫呼叫圈CUST_SEX性别CERT_AGE年龄CONST
5、ELLATION_DESC星座MANU_NAME手机品牌名称MODEL_NAME手机型号名称OS_DESC操作系统描述TERM_TYPE终端硬件类型(0=无法区分,4=4g、3=3g、2=2g)IS_LOST用户在3月是否流失标记(1=是,0=否),1月和2月值为空 7大数据挖掘专家 通信运营商客户流失分析与预测的总体流程如下图所示,具体步骤如下。通信运营商客户流失分析与预测的通信运营商客户流失分析与预测的步骤与流程步骤与流程 8大数据挖掘专家 导入原始数据,查找并删除完全重复的数据。剔除与预测相关性不强的特征,降低维数。对整理后的数据集进行清洗,查找缺失值和异常值,对存在缺失的数据按照一定的
6、规则赋值,删除异常数据。合并用户的基本信息特征,将3个月的记录合并为一条。简化手机品牌和操作系统特征,并进行独热编码便于构建模型。将合并后的数据集划分为训练集和测试集,并对数据进行标准化处理。基于训练集构建客户流失预测模型。在测试集上应用客户流失预测模型,并对预测结果进行评价餐饮企业数据分析的步骤与流程餐饮企业数据分析的步骤与流程 9大数据挖掘专家1数据准备目录通信运营商客户流失分析需求2特征工程3使用多层感知器算法实现通信运营商客户流失预测4小结5 10大数据挖掘专家 原始数据中存在一部分重复记录,删除这部分重复记录,并查找原始数据中是否存在重复的特征,如下代码所示。数据数据去重与降维去重与
7、降维In1:import osimport pandas as pd#读取数据文件data=pd.read_csv(./data/USER_INFO_M.csv,index_col=0,encoding=gbk)print(原始数据形状为:,data.shape)Out1:原始数据形状为:(900000,34)In2:#去除重复记录data_drop=pd.DataFrame.drop_duplicates(data,subset=None,keep=first,inplace=False)print(删除重复记录后的数据形状为:,data_drop.shape)Out2:删除重复记录后的数据
8、形状为:(899904,34)11大数据挖掘专家数据去重与降维数据去重与降维In3:#查找是否有重复特征查找是否有重复特征#定义求取特征是否完全相同的矩阵的函数定义求取特征是否完全相同的矩阵的函数def FeatureEquals(df):dfEquals=pd.DataFrame(,columns=df.columns,index=df.columns)for i in df.columns:for j in df.columns:dfEquals.loci,j=df.loc:,i.equals(df.loc:,j)return dfEqualsdetEquals=FeatureEquals
9、(data_drop)#应用应用FeatureEquals函数函数#遍历所有数据遍历所有数据lenDet=detEquals.shape0dupCol=for k in range(lenDet):for l in range(k+1,lenDet):if detEquals.ilock,l&(detEquals.columnsl not in dupCol):dupCol.append(detEquals.columnsl)#删除重复列删除重复列data_drop.drop(dupCol,axis=1,inplace=True)print(删除重复列后的数据形状:删除重复列后的数据形状:,d
10、ata_drop.shape)Out3:删除重复列后的数据形状:(899904,34)12大数据挖掘专家 原始数据中的用户性别、年龄和星座等信息与用户流失预测相关性很小。因此,可以对原数据集进行降维处理,如下代码所示。数据数据去重与降维去重与降维In4:#数据降维del data_dropMODEL_NAME#手机型号del data_dropAGREE_EXP_DATE#删除合约是否到期del data_dropCUST_SEX#性别del data_dropCONSTELLATION_DESC#星座del data_dropCERT_AGE#年龄print(降维后的数据形状为:,data_
11、drop.shape)Out4:降维后的数据形状为:(899904,29)13大数据挖掘专家 检测数据中是否存在的缺失值,如下代码所示。数据清洗1.缺失值处理In5:#统计各个特征的缺失率naRate=(data_drop.isnull().sum()/data_drop.shape0*100).astype(str)+%print(data每个特征缺失的率为:n,naRate)Out5:data每个特征缺失的率为:USER_ID 0.0%INNET_MONTH 0.0%IS_AGREE 0.0%CREDIT_LEVEL 0.0%OS_DESC 4.243230389019273%TERM_T
12、YPE 0.0%IS_LOST 66.63633009743262%dtype:object)14大数据挖掘专家 由上代码可知,其中IS_LOST为客户是否流失的标签字段不需要进行插补,而VIP等级(VIP_LVL)和操作系统(OS_DESC)的缺失值较多,需要进行插补,如下代码所示。数据清洗1.缺失值处理In6:#VIP等级为nan的补0data_dropVIP_LVL=data_dropVIP_LVL.fillna(0)#操作系统缺失的 填补ANDROIDdata_dropOS_DESC=data_dropOS_DESC.fillna(ANDROID)print(处理缺失值后数据集的形状为
13、:,data_drop.shape)Out6:处理缺失值后数据集的形状为:(899904,29)15大数据挖掘专家 对数据集中的每一列进行统计分析,查看是否存在异常值,如下代码所示。数据清洗2.异常值处理In6:#对列统计分析data_drop.describe()Out6:INNET_MONTH IS_AGREE CREDIT_LEVEL VIP_LVL ACCT_FEE count899904.000000899904.000000899904.000000899904.000000899904.000000mean34.5079150.510393 66.01682652.3889831
14、18.595064 std34.2320390.499892 0.958607 48.936066167.792836 min-251.0000000.000000 0.000000 0.000000 0.010000 25%10.0000000.000000 65.0000000.000000 54.850000 50%24.0000001.000000 66.00000099.00000086.000000 75%49.0000001.000000 67.00000099.000000143.580000 max249.0000001.000000 67.00000099.00000065
15、007.210000 16大数据挖掘专家 由上代码可知,在网时长(INNET_MONTH)出现小于0的异常值,本月费用(ACCT_FEE)出现大于40000的异常值,需要对这部分异常数据进行删除处理,如下代码所示。数据清洗2.异常值处理In8:#删除异常数据data_drop=data_dropdata_dropINNET_MONTH=0data_drop=data_dropdata_dropACCT_FEE 400000print(处理异常值后数据集的形状为:,data_drop.shape)data_drop.to_csv(./tmp/data_drop.csv,encoding=utf8
16、)Out8:处理异常值后数据集的形状为:(899901,29)17大数据挖掘专家 将数据按照用户ID分组,求出每个用户的费用、通话时长等基本特征三个月内的中位数和方差,如下代码所示。数据合并1.分组计算用户基本特征的中位数和方差In1:import osimport pandas as pdimport numpy as npdata_drop=pd.read_csv(./tmp/data_drop.csv,encoding=utf8)data_group=data_drop.groupby(USER_ID).agg(ACCT_FEE:np.median,np.var,CALL_DURA:np
17、.median,np.var,CDR_NUM:np.median,np.var,NO_ROAM_LOCAL_CALL_DURA:np.median,np.var,NO_ROAM_LOCAL_CDR_NUM:np.median,np.var,NO_ROAM_GN_LONG_CALL_DURA:np.median,np.var,NO_ROAM_GN_LONG_CDR_NUM:np.median,np.var,GN_ROAM_CALL_DURA:np.median,np.var,GN_ROAM_CDR_NUM:np.median,np.var,NO_ROAM_CDR_NUM:np.median,np
18、.var,18大数据挖掘专家数据合并1.分组计算用户基本特征的中位数和方差In1:P2P_SMS_CNT_UP:np.median,np.var,TOTAL_FLUX:np.median,np.var,LOCAL_FLUX:np.median,np.var,GN_ROAM_FLUX:np.median,np.var,CALL_DAYS:np.median,np.var,CALLING_DAYS:np.median,np.var,CALLED_DAYS:np.median,np.var,CALL_RING:np.median,np.var,CALLING_RING:np.median,np.va
19、r,CALLED_RING:np.median,np.var,INNET_MONTH:np.median,np.var,)print(data_group的形状为:,data_group.shape)data_group.to_csv(./tmp/data_group.csv,encoding=utf8)Out1:data_group的形状为:(299967,42)19大数据挖掘专家数据合并2.合并合约有效情况In2:#将每个用户三个月的合约是否有效,合并为一条记录#定义合并合约有效记录函数def fun1(data):if data.shape0!=3:return 0 elif sum(d
20、ata.iloc:,1=1)=3:return 1.5 else:return data.iloc-1,1-data.iloc:2,1.mean()data_agree=data_dropUSER_ID,IS_AGREE.groupby(USER_ID).apply(lambda x:fun1(x)print(data_agree的形状为:,data_agree.shape)print(data_agree.head()data_agree.to_csv(./tmp/data_agree.csv,encoding=utf8)将三个月的合约有效情况合并为一条记录。当三个月的合约有效情况取值不全为
21、1时,用第三个月的值减去前两个月的均值;当三个月的取值都是1时,取1.5。最后得到的所有合约有效情况的取值将为-1、-0.5、0、0.5、1、1.5,如下代码所示。20大数据挖掘专家数据合并2.合并合约有效情况Out2:data_agree的形状为:(299967,)USER_IDU3114031824148707 0.0U3114031824148874 1.5U3114031824148975 1.5U3114031824149138 0.0U3114031824149150 0.0dtype:float64 21大数据挖掘专家数据合并3.合并VIP等级In3:#将每个用户三个月的VIP等
22、级合并为一条记录def fun2(data):if data.shape0!=3:return 0 elif(data.iloc0,1=data.iloc1,1)&(data.iloc0,1=data.iloc2,1):return data.iloc2,1 else:return data.iloc2,1-data.iloc:2,1.mean()data_vip=data_dropUSER_ID,VIP_LVL.groupby(USER_ID).apply(lambda x:fun2(x)print(data_vip的形状为:,data_vip.shape)print(data_vip.he
23、ad()data_vip.to_csv(./tmp/data_vip.csv,encoding=utf8)按用户ID分组,对于同一个用户ID,三个月VIP等级的值相等,则取第三个月的值;三个月VIP等级的值都不相等,则使用第三个月的值减去前两个月的均值。这样处理就可以突出用户在三个月内的VIP等级的变化情况,如下代码所示。22大数据挖掘专家数据合并3.合并VIP等级Out3:data_vip的形状为:(299967,)USER_IDU3114031824148707 99.0U3114031824148874 99.0U3114031824148975 99.0U311403182414913
24、8 99.0U3114031824149150 99.0dtype:float64 23大数据挖掘专家数据合并4.合并信用等级In4:#取每个用户三个月信用等级的平均数作为一行记录data_credit=data_drop.groupby(USER_ID).agg(CREDIT_LEVEL:np.mean,)data_credit.iloc:10print(data_credit的形状为:,data_credit.shape)print(data_credit.head()data_credit.to_csv(./tmp/data_credit.csv,encoding=utf8)Out4:d
25、ata_credit的形状为:(299967,1)USER_ID CREDIT_LEVELU311403182414870767.0U311403182414887465.0U311403182414897565.0U311403182414913865.0U311403182414915065.0 按用户ID分组,将每个用户3个月的信用等级求平均值,合并为一条记录,如下代码所示。24大数据挖掘专家数据合并4.合并信用等级In5:#简化手机品牌string=苹果,小米,华为,三星,诺基亚,联想,LGdef Replace(x=None,string=string):if x not in st
展开阅读全文