B题是一道评价预测类问题,涉及的特征变量很多,总体数据量适中。
中国移动通信集团北京公司,让客户根据自身在网络覆盖与信号强度、 语音通话清晰度和语音通话稳定性三个方面的体验进行打分,同时还让客户根据语音通话的整体体验进行语音通话整体满意度的打分,并统计整理影响客户语音业务体验的因素,希望以此来分析客户语音业务满意度的主要影响因素,并提升客户语音业务满意度。同时,对于上网数据业务,中国移动北京公司让客户根据自身在网络覆盖与信号强度、手机上网速度、手机上网稳定性三个方面的体验进行打分,同时还让客户根据手机上网的整体体验进行手机上网整体满意度的打分,并统计整理影响客户上网体验1的因素,希望以此可以分析影响客户上网业务体验的主要因素,并提升客户的上网体验基于以上背景,请你们的团队根据附件给出的数据,通过数据分析与建模的方法帮助中国移动北京公司解决以下问题:
问题 1:根据附件 1 和附件 2,分别研究影响客户语音业务和上网业务满意度的主要因素,并给出各因素对客户打分影响程度的量化分析和结果。附件 1、2 中各字段的解释说明见附件 5。
问题 2:结合问题 1 的分析,对于客户语音业务和上网业务分别建立客户打分基于相关影响因素的数学模型,并据此对附件 3、4 中的客户打分进行预测研究,将预测结果分别填写在 result.xlsx 的 Sheet1“语音”Sheet2“上网”两个工作表中,并上传到竞赛平台,说明你们预测的合理性。
问题1需要找出语音业务和上网业务满意度评分的主要影响因子,并且需要对各个影响因子进行深度的量化分析。这需要对给出的数据进行恰当的预处理和转换与编码,因为给出的数据是非常杂的,而且数值也多为离散变量。可以采用一些编码方式(如独热)将原变量转化,或者构造新变量。接着可选用相关性热力图、因子分析、线性回归、逻辑回归、随机森林、卡方检验等方法给各个特征因子对满意度的影响程度打分。
问题2需要基于问题1的结果,语音业务和上网业务的主要思路都是一样的,只是数据类型不同需要的数据处理方法有些区别。在得到各个影响因素及影响权重之后基于用户进行预测只需要建立预测方程即可,可以采用TOPSIS熵权法或者神经网络的方法。
语音业务中给出的数据如图所示,这里提供两个数据转换的思路,(1)将同一类型的各变量编码,如用户场景的居民小区、办公室、高校.......编码为0、1、2.......(最好是独热编码,000001,000010,000100)
import numpy as np
def convert_to_one_hot(Y, C):
Y = np.eye(C)[Y.reshape(-1)].T
return Y
y = np.array([[3,2,1,3,0]])
print(y.shape)
print(y.reshape(-1).shape)
C = 4
print(convert_to_one_hot(y, C))
(2)将同一类型的所有用户数据进行单独计算,比如分别计算出用户场景中居民小区、办公室、高校......等的平均用户满意度,比较其是否存在显著差异性。
问题一:
(1)数据预处理
读取数据:
import pandas as pd
data1=pd.read_excel('附件1语音业务用户满意度数据.xlsx')
print(data1)
观察到数据中有很多缺失值,使用pandas包补全
data1=data1.fillna(0)
注意到数据文件中存在相同的列名(‘’其他,请注明“和”用户描述“均出现两次)
column_names = data1.columns.values
column_names[14] = '用户描述1'
column_names[22] = '用户描述2'
data1.columns = column_names
为了方便后续的处理,我们可以将一些没有用处的列进行人工剔除
data1=data1.drop(labels=['用户描述1','用户描述2','是否关怀用户','是否去过营业厅'], axis=1)
data1=data1.drop(list(data1)[42:45], axis=1)
接下来使用独热编码的方式对数据进行转换以及字符串的转化
#数据转换
data1.replace(-1, 0, inplace=True)
class_mapping = {'4G':0, '5G':1}
data1['4\\5G用户'] = data1['4\\5G用户'].map(class_mapping)
method_mapping = {'VOLTE':0, 'EPSFB ':1,'CSFB':2, 'VONR':3,'GSM':4}
data1['语音方式'] = data1['语音方式'].map(method_mapping)
type_mapping = {'苹果':0, '华为':1,'小米科技':2, '步步高':3,'欧珀':4,'三星':5}
data1['终端品牌'] = data1['终端品牌'].map(type_mapping)
data1['终端品牌'] = data1['终端品牌'].map(lambda x:'6' if isinstance(x,str) else x)
data1.to_csv('语音业务.csv',index=False)
(2)主要影响因子探析
先绘制一个粗略的相关性热力图
热力图
代码如下:
import seaborn as sns
import matplotlib.pyplot as plt
data1=data1.drop(list(data1)[6:21], axis=1)
data1=data1.drop(labels=['用户id'], axis=1)
cor = data1.corr(method='pearson')
print(cor) # 输出相关系数
rc = {'font.sans-serif': 'SimHei',
'axes.unicode_minus': False}
sns.set(font_scale=0.4,rc=rc) # 设置字体大小
sns.heatmap(cor,
annot=True, # 显示相关系数的数据
center=0.5, # 居中
fmt='.2f', # 只显示两位小数
linewidth=0.5, # 设置每个单元格的距离
linecolor='blue', # 设置间距线的颜色
vmin=0, vmax=1, # 设置数值最小值和最大值
xticklabels=True, yticklabels=True, # 显示x轴和y轴
square=True, # 每个方格都是正方形
cbar=True, # 绘制颜色条
cmap='coolwarm_r', # 设置热力图颜色
)
plt.title('相关性热力图')
plt.show()
根据热力图结果可以发现总体满意度与三个打分的指标都具有较强的关系(网络覆盖与信号强度/语音通话清晰度/语音通话稳定性),此外还和是否遇到网络问题具有一定相关关系,和其他因素则关系不大。
接着我们探究满意度和地点、网络问题的关系。
地点
网络问题
考虑到影响因子未必是直接的线性关系,我们再采用随机森林的方法计算各个因子的重要性。
1。总满意度
2。网络覆盖与信号强度
3。语音通话清晰度
4。语音通话稳定性
问题二:
(1)三维度评分预测模型,根据随机森林的特征选择结果可直接沿用随机森林预测方法。
(2)总满意度模型,根据之前的热力图分析可以得知三个维度的评分对于总体满意度有很强的线性相关关系,这里可以直接采用TOPSIS熵权法,也可以用线性回归的方法。
#线性回归
col = ['语音通话整体满意度','网络覆盖与信号强度','语音通话清晰度','语音通话稳定性']
pingfen = pd.DataFrame(data1,columns=col)
#多元回归分析
import statsmodels.formula.api as smf
mod = smf.ols(formula='语音通话整体满意度~网络覆盖与信号强度+语音通话清晰度+语音通话稳定性',data=pingfen)
res = mod.fit()
print(res.summary())
#完整思路代码及参考答案见
#完整版见评论区链接
如失效请私信或评论