尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从MathorCup竞赛到实战:基于树模型与SHAP的移动用户体验建模与归因分析

从MathorCup竞赛到实战:基于树模型与SHAP的移动用户体验建模与归因分析 1. 项目概述从竞赛题目到真实业务洞察的跨越去年带队参加MathorCup大数据竞赛的经历让我对B题“北京移动用户体验影响因素研究”印象尤为深刻。这不仅仅是一道竞赛题它几乎完整复刻了电信运营商在日常运营中面临的核心挑战如何从海量的、看似杂乱无章的用户行为与网络信令数据中精准定位影响用户体验的“病灶”并开出有效的“药方”。问题二作为整个赛题承上启下的关键环节其核心任务是构建用户体验的综合评价模型并在此基础上识别关键影响因素。这听起来像是标准的建模分析流程但实际操作中每一步都充满了业务逻辑与数据科学之间的博弈。今天我就以这道赛题为例深入拆解从数据理解、模型构建到结果解读的全过程分享我们在解决“问题二”时踩过的坑、用过的“奇技淫巧”以及最终如何将竞赛模型思路转化为可落地的业务分析框架。无论你是正在备战类似竞赛的学生还是对用户行为分析、体验量化感兴趣的数据从业者相信这篇从实战中沉淀下来的经验都能给你带来一些直接的启发。2. 问题二的核心任务拆解与解题思路拿到问题二首要任务是跳出“解题”思维用“解决业务问题”的视角来审视它。题目要求通常比较概括基于给定的数据建立用户体验的综合评价模型并分析影响用户体验的关键因素。我们需要将其拆解为一系列可执行、可验证的具体任务。2.1 任务目标的三层解读第一层是显性目标即题目字面要求输出一个用户体验得分综合评价并找出哪些变量对这个得分影响最大。第二层是隐性目标这需要结合移动通信的业务背景来理解。用户体验QoE在移动网络语境下绝非一个单一指标它是网络性能如速率、时延、丢包、用户感知如视频卡顿、网页加载慢和业务类型如刷视频、玩游戏、看网页三者交织的复杂结果。因此我们的模型必须能反映这种多维性。第三层是应用目标即模型结果要能指导网络优化。识别出的关键因素必须能对应到具体的、可干预的网络参数或用户行为上例如“在密集居民区晚高峰时段视频业务的初始缓冲时延是首要瓶颈”这样的结论才有行动价值。2.2 数据理解与特征工程的“业务化”转向竞赛提供的数据通常包括用户级的上网记录、网络测量报告MR、基站信息等。原始字段可能是冰冷的“RSRP”参考信号接收功率、“SINR”信号与干扰加噪声比、“TCP重传次数”。如果直接把这些扔进模型效果往往不佳。特征工程的核心是将这些技术指标转化为与用户感知强相关的衍生特征。例如单纯的“RSRP”值是一个连续变量但用户感知是阶梯式的。我们会根据3GPP标准和实测经验将其离散化为“极好”、“好”、“中”、“差”、“极差”五个等级并计算用户一次会话中处于“差”以下等级的时间占比这个特征叫“弱覆盖占比”它比原始RSRP均值更能刺痛用户的感知神经。再比如针对视频业务我们会结合“初始缓冲时延”和“播放阶段卡顿次数”合成一个“视频流畅度评分”。这个过程需要大量的领域知识输入也是竞赛队伍拉开差距的关键。注意特征工程切忌“闭门造车”。我们当时犯过一个错误花了大量时间构造了一个复杂的“网络波动指数”但最终模型重要性排名很低。后来复盘发现该指数涵盖的短期波动对于以“一次完整业务体验”为单位的建模样本来说并不是主要矛盾。特征的有效性必须放在你选取的建模样本粒度用户、会话、业务和业务场景下进行审视。2.3 模型选型为什么我们放弃了复杂的深度学习面对“综合评价”和“因素分析”的双重任务模型选型需要权衡。常见的思路有主观赋权法如AHP层次分析法人为定义各指标权重加权求和得到总分。优点是透明、可控但主观性强难以应对复杂非线性关系在数据驱动的竞赛中不占优势。无监督学习如PCA主成分分析通过降维得到综合指标。能保留数据主要信息但得到的“主成分”业务含义模糊难以解释哪些原始因素重要。有监督学习将“用户体验”作为一个待预测的目标变量可以是连续值分数也可以是离散等级。这是更主流且强大的思路。我们最终选择了有监督学习中的树模型如LightGBM、XGBoost并辅以SHAP值进行归因分析。理由如下处理能力树模型能自动处理特征间的非线性关系和交互效应非常适合通信数据中复杂的关联。分析友好树模型本身能提供特征重要性排序。更重要的是SHAPSHapley Additive exPlanations值可以提供每个特征对每个样本预测结果的贡献度且具有坚实的博弈论基础能回答“在特定场景下是信号差还是干扰大导致了体验下滑”这样的精细化问题。效率与性能相比深度学习树模型训练更快对特征工程的要求相对宽容在有限时间和计算资源下更稳妥。3. 综合评价模型构建的实战细节确定了“树模型SHAP”的技术路线后真正的挑战在于如何将其落地。整个过程环环相扣一步走错满盘皆输。3.1 目标变量Y的定义体验得分的“锚定”这是所有工作的起点。目标变量定义不准模型建得再好也是南辕北辙。题目没有给出现成的“用户体验得分”我们需要自己构造。这里有两种主流策略策略一基于业务指标的多维度聚合。我们首先定义了影响体验的核心维度每个维度由1-2个关键指标衡量接入维度包含“接入成功率”和“接入时延”。一次失败的接入或漫长的等待体验直接归零。保持维度主要是“掉线率”。通话中断或下载中断是用户最反感的情况之一。速率维度对于数据业务采用“平均下载速率”与“签约速率”的比值速率满足度。交互维度对于网页、游戏等业务采用“TCP平均时延”或“RTT往返时延”。媒体质量维度针对视频、语音采用“卡顿次数”、“MOS平均意见得分估算值”等。然后我们没有简单加权平均而是采用了TOPSIS逼近理想解排序法。这种方法先为每个用户样本在每个维度上打分然后计算每个样本与“正理想解”各维度最优值和“负理想解”各维度最差值的距离最后根据相对贴近度得到一个0-1之间的综合得分。它的好处是避免了人为设定权重完全由数据分布决定各维度的贡献更客观。策略二基于用户行为反馈的间接标定。如果数据中包含能间接反映用户满意度的行为如“是否提前终止流量包”、“客服投诉标签”、“APP内评分如果有”可以将其作为弱监督信号。例如将“有投诉记录”的用户样本的目标变量设为低分将“月度流量消耗持续增长”的用户样本设为高分。这种方法更贴近真实“体验”但对数据要求高且噪声大。我们最终采用了策略一因为它更稳健、可解释且与运营商内部常用的KQI关键质量指标体系吻合。3.2 特征X的构建从原始数据到模型“语言”特征工程是体力活更是脑力活。我们的特征池主要来源于以下几个方面网络侧基础特征覆盖与信号强度RSRP/RSRQ的平均值、中位数、方差、弱覆盖比例。干扰与质量SINR的平均值、低于某阈值如0dB的比例。移动性切换次数、切换成功率、高速移动如速度60km/h标识。小区负荷基于同小区用户数或PRB利用率估算的负荷等级。用户侧行为特征业务画像业务类型比例视频/社交/下载/网页、高频业务时段。流量模式日均流量、流量峰值、闲忙时流量比。终端信息终端品牌、型号、是否支持高阶调制如256QAM等。不同终端的天线性能和算法优化差异巨大。时空场景特征时间特征小时、是否工作日、是否节假日、是否早晚高峰。空间特征基于基站位置的区域类型如商圈、住宅区、高校、交通干线。环境特征室内/室外标识可通过MR数据中的测量特征间接判断。高阶交叉与统计特征“木桶效应”特征例如计算用户在一次会话中同时出现“高负荷”和“低SINR”的时间比例。这种组合往往导致灾难性体验。趋势特征如最近7天内信号强度的下滑趋势。对比特征用户当前小区的RSRP与最强邻小区RSRP的差值反映“潜在切换增益”。# 示例一个简单的特征生成代码片段使用pandas import pandas as pd import numpy as np def create_features(df): # 1. 信号质量离散化 df[rsrp_level] pd.cut(df[rsrp], bins[-140, -120, -110, -100, -90, -60], labels[极差, 差, 中, 好, 极好]) df[weak_coverage_ratio] (df[rsrp_level].isin([极差, 差])).groupby(df[user_id]).transform(mean) # 2. 业务类型聚合 traffic_pivot df.pivot_table(indexuser_id, columnsservice_type, valuestraffic, aggfuncsum, fill_value0) traffic_pivot[video_ratio] traffic_pivot.get(video, 0) / (traffic_pivot.sum(axis1) 1e-5) # 3. 时空特征 df[is_busy_hour] df[hour].between(19, 22) # 晚高峰 df[is_residential_area] df[cell_id].map(residential_cell_dict) # 预设的映射字典 # 合并所有特征 # ... 合并操作 return feature_df3.3 模型训练与调优不仅仅是调参我们使用LightGBM进行建模。除了常规的网格搜索GridSearchCV或贝叶斯优化来调整max_depth、learning_rate、num_leaves等参数外有几点经验至关重要样本权重对于投诉用户、高价值用户高ARPU的样本可以适当增加其权重让模型更关注这些关键群体的体验。这直接在LightGBM的sample_weight参数中设置。分组验证切忌简单随机划分训练集和测试集。通信数据具有强时空自相关性。我们采用“按区域分组”或“按时间片分组”的交叉验证。例如用A、B区域的数据训练在C区域的数据上验证能更好地评估模型的泛化能力防止模型只是记住了某个区域的特定模式。对抗过拟合除了使用early_stopping_rounds我们还会监控特征重要性。如果某个非常具体的特征如“某特定基站ID”重要性异常高很可能发生了数据泄露或过拟合需要回头检查特征工程。4. 关键影响因素分析从全局排名到个体解释模型训练好之后得到预测分数只是第一步。更重要的是理解模型即回答“哪些因素最重要以及它们如何影响体验”。4.1 全局特征重要性分析LightGBM自带feature_importances_属性基于分裂增益或分裂次数可以给出一个全局排名。这是我们看问题的第一视角。在我们的结果中排名靠前的通常是弱覆盖相关特征如weak_coverage_ratio这是影响体验的“基础病”信号都没有一切免谈。业务类型与网络质量的交叉特征如video_ratio * low_sinr_ratio这揭示了“业务敏感性”。视频业务对高干扰低SINR的容忍度远低于网页浏览。小区负荷特征在晚高峰时段负荷成为比覆盖更突出的瓶颈。终端类型某些老旧或低端机型即使在相同网络条件下体验得分也系统性偏低。这个列表能告诉我们优化的优先级先解决覆盖盲点再重点优化高负荷区域同时关注视频业务体验和低端终端用户。4.2 基于SHAP值的深度归因分析全局重要性是一个“平均”情况。SHAP值能让我们看得更细。我们主要从三个层面利用SHAP层面一整体特征影响方向与分布。使用summary_plot可以直观看到每个特征对于模型输出体验得分的影响方向正向/负向以及影响程度。例如weak_coverage_ratio的SHAP值几乎全为负紫色点集中在左侧且绝对值很大这确凿地证明了弱覆盖对体验的普遍负面影响。而sinr_mean则呈现明显的正向关系红色点高值集中在右侧。层面二个体样本解释。对于任何一个预测体验很差的用户样本我们可以用force_plot或waterfall_plot进行“病例诊断”。例如分析一个在晚高峰看视频卡顿的用户SHAP值可能显示weak_coverage_ratio贡献了-0.15分busy_hour_high_load贡献了-0.22分video_service_flag贡献了-0.1分。这就清晰地量化了各因素的“罪责”指导网络优化人员优先解决该区域晚高峰的容量问题。层面三特征交互效应分析。SHAP的交互值可以量化两个特征共同作用时的影响。我们发现sinr_mean和service_typevideo之间存在强烈的负向交互。即当业务是视频时SINR的下降对体验的打击会成倍增加。这直接支撑了“为视频业务配置更高的调度优先级或更保守的调制编码方案MCS”的优化策略。# 示例SHAP分析的核心代码 import shap import lightgbm as lgb # 训练模型 model lgb.LGBMRegressor(**best_params) model.fit(X_train, y_train) # 计算SHAP值 explainer shap.TreeExplainer(model) shap_values explainer.shap_values(X_test) # 1. 整体摘要图 shap.summary_plot(shap_values, X_test, plot_typedot) # 2. 个体样本解释以第10个样本为例 shap.force_plot(explainer.expected_value, shap_values[10,:], X_test.iloc[10,:], matplotlibTrue) # 3. 依赖图看单个特征的影响 shap.dependence_plot(weak_coverage_ratio, shap_values, X_test, interaction_indexsinr_mean)4.3 结果可视化与故事化呈现数据分析的最终目的是为了驱动决策。一份好的结果报告不能只是罗列特征重要性排名和SHAP图。我们需要讲一个“数据故事”。我们当时的报告结构是这样的核心结论先行“影响北京移动用户体验的三大核心矛盾是局部弱覆盖、重点区域晚高峰容量不足、视频业务质量敏感。”分场景深入场景A密集居民区晚高峰主要矛盾是容量高负荷特征是busy_hour_high_load重要性第一。建议扩容或载波聚合。场景B城市边缘交通线主要矛盾是覆盖弱覆盖、频繁切换特征是weak_coverage_ratio和handover_failure_rate高。建议补充站点或优化邻区参数。场景C高校宿舍区主要矛盾是业务类型与干扰大量视频业务中低SINR特征是video_ratio * low_sinr_ratio交互项影响巨大。建议部署专属频段或开启干扰协调特性。提出可落地的优化建议每一项建议都对应模型分析出的关键因素并估算潜在影响如解决某区域弱覆盖预计可提升该区域用户平均体验分0.2。5. 实战中遇到的典型问题与解决方案在实际操作中我们遇到了不少教科书上没写的坑。5.1 数据质量问题与处理问题数据不平衡与样本偏差。绝大多数用户体验是“良好”的体验“差”的样本很少。直接建模模型会倾向于预测“良好”对差样本不敏感。解决方案我们采用了“分层抽样”来构建训练集确保差样本有足够的代表性。同时在评价指标上不仅看整体的RMSE或MAE更关注对“差样本”的召回率Recall。也可以使用代价敏感学习给差样本更高的误分类代价。问题特征共线性。许多网络指标如RSRP和RSRQ之间存在较强的相关性可能影响树模型稳定性并使SHAP值解释复杂化。解决方案树模型对共线性有一定容忍度但为便于解释我们仍会计算特征间的相关系数矩阵。对于相关系数高于0.9的特征对考虑只保留业务含义更明确的一个或通过PCA将它们合并为一个成分但会损失可解释性。5.2 模型解释性的挑战问题SHAP计算耗时。当数据量很大百万级样本时计算所有样本的SHAP值非常慢。解决方案使用shap.TreeExplainer(model, dataX_train[:1000])中的data参数传入一个背景数据集通常是从训练集中抽样的一部分可以显著加速近似计算。或者只对关键用户群体如体验最差的Top 10%用户进行详细SHAP分析。问题因果推断的陷阱。SHAP解释的是特征与模型预测的相关性不等于因果关系。例如模型可能发现“使用某品牌老旧手机”与“低体验分”强相关。但这可能是因果手机性能差导致体验差也可能是混淆该品牌用户多分布在网络较差的区域。解决方案必须结合业务知识进行判断。通过细分分析在同一小区、相同时段对比不同品牌手机的体验差异。如果差异依然显著则手机因素更可能是原因如果差异消失则可能是地域混淆。在报告中我们会谨慎表述为“关联性”并建议进行A/B测试来验证因果。5.3 从竞赛结果到业务应用的鸿沟问题模型“黑箱”不被业务部门信任。网络优化工程师更相信路测数据和告警日志。解决方案我们不做“纯黑箱”交付。而是将模型输出的“体验差用户清单”及其主要归因因素如“用户A预测体验分低主要归因弱覆盖占比70%”与传统的网管系统NMS数据、投诉工单进行关联对比。当模型能精准定位到一批尚未投诉但已处于体验恶化边缘的用户并指出其所在的小区正是近期负荷增长较快的小区时业务方的信任度就大大增加了。模型成为了一个高效的“预警雷达”和“诊断助手”而不是替代传统手段的“神秘武器”。6. 项目复盘与经验延伸回顾整个问题二的解决过程它本质上是一个标准的数据科学闭环业务问题定义 - 数据准备与理解 - 特征工程 - 模型构建与验证 - 结果解释与应用。但这个闭环的每个环节都需要注入深刻的领域知识。对于想从事通信、互联网或其他行业用户数据分析的朋友我的建议是永远从业务目标出发。在动手写第一行代码之前花足够多的时间搞清楚“好体验”和“坏体验”在业务上究竟如何定义。多和一线业务人员交流。特征工程是价值核心。模型可以选现成的调参可以自动化但对数据的理解和创造性的特征构建是算法工程师最核心的竞争力之一。这需要持续积累领域知识。可解释性决定模型天花板。一个无法解释的模型在真实业务中寸步难行。SHAP、LIME等工具是你的必备武器但要理解其局限性结合业务逻辑做综合判断。用故事呈现数据。你的分析结果最终要说服产品经理、网络工程师甚至公司管理层。学会把复杂的模型输出翻译成他们能听懂的业务语言和行动建议。最后这道竞赛题带给我的最大启发是数据科学项目成功的标志不是模型的AUC有多高而是你的分析结论有多少能最终转化为可执行、可验证的优化动作并真正改善了用户的感受。从数据到洞见再从洞见到行动这条路需要我们既懂数据也懂业务更懂得如何沟通。
返回列表