济南优化网站排名,宣传广告怎么做吸引人,王也头像超清晰,广西新农村建设工作专题网站一、背景介绍
研究背景#xff1a;在快速发展和高度竞争的电信行业中#xff0c;客户流失已成为运营商面临的主要挑战之一。电信服务的普及和用户选择的多样性使得保持客户忠诚度变得越来越困难。在这种背景下#xff0c;准确预测客户流失并采取相应措施#xff0c;对于运…一、背景介绍
研究背景在快速发展和高度竞争的电信行业中客户流失已成为运营商面临的主要挑战之一。电信服务的普及和用户选择的多样性使得保持客户忠诚度变得越来越困难。在这种背景下准确预测客户流失并采取相应措施对于运营商保持市场竞争力至关重要。。。
二、研究意义
研究意义提高客户留存率通过预测和识别可能流失的客户电信运营商可以采取针对性的措施来提高客户留存率比如提供定制化服务或优惠。优化市场策略深入分析用户行为和特征有助于运营商更好地理解市场需求从而优化其产品和服务提高市场竞争力。。。。
三、研究问题
在当前的市场环境下电信运营商面临的一个主要问题是如何准确预测并有效减少客户流失churn。客户流失不仅直接影响运营商的收入还可能引起品牌价值和市场份额的下降。。。。
四、实证分析
本文数据集的原始图如下
数据和完整代码
报告代码数据 据集具体指标含义如下
使用月数某段时间用户使用服务月数
流失用户观测期内用户是否已经流失。1是0否
套餐金额用户购买的月套餐金额1为96元以下2为96~225 元3为225 元以上
额外通话时长实际通话时长减去套餐内通话时长的月均值单位min这部分需要额外交费
额外流量实际流量减去套餐内流量的月均值单位ME)这部分需要额外交费
改变行为是否曾经更改过套餐金额1是0否
服务合约是否与运营商签订过服务合约1是0否
关联购买用户在移动服务中是否同时办理其他业务主要是固定电话和宽带业务1同时办理一项其他业务2同时办理两项其他业务0没有办理其他业务
集团用户办理的是否是集团业务相比个人业务集体办理的号码在集团内拨打有一定优惠。1是0否。
首先导入基础的包
随后读取数据并展示数据前后5行
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams[font.sans-serif] [KaiTi] #中文
plt.rcParams[axes.unicode_minus] False #负号 查看数据集整体形状 其中包括4975个用户每个用户包括8个特征。
随后查看一下数据类型 接下来进行描述性统计分析使用describe()函数
data.describe() 该函数会将数据集的总计数值、最大最小值、中位数、均值、分位数等等展示计算出来。每列的统计数据描述了该列数据的分布情况。例如“ID”列显示的计数是4975意味着数据集中有4975个观测值。。。。
接下来进行数据集的缺失值的可视化
import missingno as msno
msno.matrix(data) 发现数据集很完整并没有缺失值。
但是为了流程的完整性继续进行处理
#若是有一行全为空值就删除
data.dropna(howall,inplaceTrue)
#缺失到一定比例就删除
miss_ratio0.3
for col in data.columns:if data[col].isnull().sum()data.shape[0]*miss_ratio:print(col)data.drop(col,axis1,inplaceTrue)
。。。
填充缺失值
缺失值有很多填充方式可以用中位数均值众数。
也可以就采用那一行前面一个或者后面一个有效值去填充空的。
data.fillna(data.median(),inplaceTrue) #mode,mean
data.fillna(methodffill,inplaceTrue) #pad,bfill/backfill
接下来进行特征工程首先对训练集取出y。
#剩下的变量独热处理
datapd.get_dummies(data)
我们还要画图查看每个X的分布查看特征变量的箱线图分布。
dis_cols 4 #一行几个
dis_rows len(columns)
plt.figure(figsize(4 * dis_cols, 4 * dis_rows))for i in range(len(columns)):plt.subplot(dis_rows,dis_cols,i1)sns.boxplot(datadata[columns[i]], orientv,width0.5)plt.xlabel(columns[i],fontsize 20)
plt.tight_layout()
#plt.savefig(特征变量箱线图,formatepng,dpi500)
plt.show() 然后还需要查看响应变量y的分布
plt.figure(figsize(6,2),dpi128)
plt.subplot(1,3,1)
y.plot.box(title响应变量箱线图)
plt.subplot(1,3,2)
y.plot.hist(title响应变量直方图)
plt.subplot(1,3,3)
y.plot.kde(title响应变量核密度图)
#sns.kdeplot(y, colorRed, shadeTrue)
#plt.savefig(响应变量.png)
plt.tight_layout()
plt.show() 箱形图左图显示了单个变量的五数概括最小值、第一四分位数、中位数、第三四分位数和最大值以及离群点。在这个箱形图中可以看到一个明显的离群点。直方图中图显示了数据的分布情况这里几乎所有的数据都集中在一个单一的值上
然后对X异常值处理先标准化
scaler StandardScaler()
X_s scaler.fit_transform(data)
相关系数热力图查看 深紫色的格子表示两个变量之间有较强的负相关性。相关系数可能是-0.97、-0.98这样的低值意味着这些变量之间存在强烈的反向关系一个变量的增加往往伴随着另一个变量的减少。。。。。
接下来模型构建与评估
from sklearn.naive_bayes import BernoulliNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import AdaBoostClassifier ##自适应提升Adaboost
for i in range(3):model_Cmodel_list[i]namemodel_name[i]model_C.fit(X_train_s, y_train)smodel_C.score(X_val_s, y_val)print(name方法在验证集的准确率为str(s))
第一个模型的评分为0.914572864321608。
第二个模型的评分为0.9668341708524714。
第三个模型的评分为0.9829145728643216。
分析这些结果我们可以看出
所有模型在验证集上的得分都相当高意味着它们对数据有很好的预测能力。
第三个模型具有最高的评分约0.983这可能表明它在这三个模型中预测验证集的效果最好。从以上结果可以看出三种机器学习方法的最终预测结果都较好准确率均在90%以上其中分类情况最优的是自适应提升方法随后是KNN其次是二项朴素贝叶斯。
五、总结
在这个案例中我们针对某电信运营商的用户手机号码的使用数据进行了分析和研究旨在预测客户是否会在未来一段时间内流失。我们采用了三种机器学习模型包括二项朴素贝叶斯模型、K最近邻KNN模型和自适应提升模型并对它们的预测效果进行了比较。最终我们发现自适应提升模型在预测客户流失方面表现最优。。。。。