2022 年 MathorCup 高校数学建模挑战赛——大数据竞赛(北京移动用户体验影响因素研究全套代码)

本文研究了北京移动用户体验中的重要因素,通过数据预处理、编码、缺失值处理,以及多元分析方法(熵值法和LightGBM回归),识别出20个对满意度影响显著的变量,如网络质量、关怀服务、用户星级等。这些发现有助于运营商优化服务,提升客户满意度,推动移动网络高质量发展。
摘要由CSDN通过智能技术生成
赛道 B:北京移动用户体验影响因素研究
     移动通信技术飞速发展,给人们带来了极大便利,人们也越来越离不开移动通信技术带来的各种便捷。随着网络不断的建设,网络覆盖越来越完善。各个移动运营商,越来越重视客户的网络使用体验,从而进一步提升网络服务质量。客户满意度是客户对运营商产品服务的满意程度,反映了客户期望与实际感知的产品服务之间的差异。特别是在信息透明、产品同质化的今天,客户满意度的表现成为各大运营商市场运营状况的重要体现。数字经济时代,各大运营商需要运用数字经济的管理理念和技术手段,建立客户体验生态的全方位系统性测评体系,实现客户满意度评测的数字化转型,让客户体验赋能商业决策,让商业决策真正服务客户,共同推动移动网络高质量可持续发展。
下面给出整体思路代码:

       首先对所有指标进行数据处理,进行缺失值和重复值检查。假设附件一和附件二的数据是对用户的真实情况记录,未对异常值进行处理。将object型数据进行编码处理,本文使用3种编码形式,包括lable编码、有序编码等。删除缺失值大于百分之 80的指标。考虑到变量的取值特征,本文将变量分为连续型变量和离散型变量两部分,分别运用相关分析和方差选择的方法,选择了与满意度在相关关系较强的20个连续型和26个离散型因素。对这50多个自变量与满意度建立LightGBM回归模型,并且对自变量的贡献度进行排序,找到前23个显著影响满意度的因素。考虑到这23个自变量之间可能存在多重共线性,为保证变量有较高的解释程度,计算自变量之间的相关系数,剔除自变量之间相关性较高的变量,最终得到对满意度最具显著影响的20个分子描述符变量。最后对选取的变量计算MIC和Spearman值,结果表明,选取的变量之间相关关系较弱,具有很好的独立性。同时,选取的20个变量具有很好的可解释性,说明20个变量的选取是合理的。

针对问题一(全套代码):
1、导入数据:
path1 = r"F:\mathorcup大数据出思路\2022年MathorCup大数据竞赛-赛道B初赛"
yuyin = pd.read_excel(path1+"/附件1语音业务用户满意度数据.xlsx")
inter = pd.read_excel(path1+"/附件2上网业务用户满意度数据.xlsx")

 

2、数据清洗(经过数据分析需要使用多种编码方式,包括lable编码、有序编码、计数编码):

#找到object列
types = pd.DataFrame(yuyin.dtypes).reset_index()
types[types[0]=='object']['index'].to_list()

from tqdm import tqdm
for i in tqdm(['用户描述','用户描述.1','语音方式','客户星级标识']):
    enc=preprocessing.LabelEncoder()
    yuyin[i]=enc.fit_transform(yuyin[i])#训练LabelEncoder,将电脑,手表,手机编码为0,1,2

biner = {'是':1,
          '否':0}
for i in tqdm(['是否关怀用户','是否去过营业厅','是否4G网络客户(本地剔除物联网)','是否5G网络客户','是否实名登记用户']):
    yuyin[i] = yuyin[i].map(biner)
mnso.matrix(yuyin_clear)
plt.show()

    nan_percent = 100*(df.isnull().sum()/len(df))
     # df.isnull().sum()统计每一列的缺失值数量
     # 再除上len()得到每一列的缺失值比例——小数形式
     # *100得到百分数
    nan_percent = nan_percent[nan_percent > 0].sort_values()
     # 得到每列的缺失值的占比,升序排序
     # >0是为了筛掉没有缺失值的列,只返回有缺失值的
    return nan_percent
print(missing_percent(yuyin_clear))

3、初步数据分析(单个变量与满意度分析) 

def get_random_color():
    r1 = lambda: random.randint(0,255)
    return '#%02X%02X%02X' % (r1(),r1(),r1())


def get_histplot_central_tendency(df: dict, fields: list):
    for field in fields:
        f, (ax1) = plt.subplots(1, 1, figsize=(15, 5))
        v_dist_1 = df[field].values
        sns.histplot(v_dist_1, ax=ax1, color=get_random_color(), kde=True)

        mean=df[field].mean()
        median=df[field].median()
        mode=df[field].mode().values[0]

 

def get_scatter(df: dict, fields: list):
    ylim = (0, 12)
    for field in fields:
        df_copy = pd.concat([df['语音通话整体满意度'], df[field]], axis=1)

 

def get_headmap(df: dict):
    corr = df.corr()
    plt.figure(figsize=(20, 20))

 

 4、因素分析

4.1 熵值法

from tqdm import tqdm 
for ye in tqdm([0,1]):
    df1 = df.interpolate()
    df333 = df.drop(['用户id','语音通话整体满意度'],axis=1)
    data = df333
    # 总指标数
    n = list(data.columns)
    # 最优指标,(x-min)/(max-min)
    # 最劣指标 (max-x)/(max-min)
    # 如果指标体系存在最优指标和最劣指标,采用下面的形式
    for i in n:
       # 获取各个指标的最大值和最小值
        Max = np.max(data[i])
        Min = np.min(data[i])
        data[i] = (Max - data[i])/(Max - Min)


    # 建立数据比重矩阵
    for i in n:
        # 计算指标总和
        Sum = np.sum(data[i])
        # 计算各地区某一指标占比
        data[i] = data[i]/Sum
    # 地区总数
    m = len(data)
    E = []
    # 计算信息熵值
    for i in n:
        K = 1/np.log(m)
        e = - K * np.sum(data[i] * np.log(data[i]))
        E.append(e)

    # 转换为数组形式
    E = np.array(E)

4.2 机器学习模型训练 

model_lgb = lgb.LGBMRegressor(objective='regression_l1',
                              metric='mse',
                              learning_rate=0.02,
                              subsample = 0.8,
                              colsample_bytree = 0.8,
                              subsample_freq = 5,
                             )

 4.3 计量模型(最小二乘)

# Coding method 2
import statsmodels.api as sm
# print the ols summary
x = sm.add_constant(train_x.fillna(0))

 

  • 2
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注数据挖掘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值