
第3章 决策树算法 PBL项目手册3.1 实验项目概述3.1.1 业务背景某电信运营商客户运营部门发现近半年用户流失率持续上升传统运营策略缺乏针对性挽留成本高、效果差。部门希望借助机器学习技术基于用户的消费、行为、套餐等数据构建客户流失预测模型。与普通分类模型不同业务方不仅要求预测准确率更要求输出可解释的流失规则用于指导一线运营人员制定针对性挽留方案。决策树因强可解释性成为本次项目的首选算法。3.1.2 项目目标本次项目采用阶梯式任务设计各小组需在完成基础任务的前提下继续完成进阶与挑战任务。任务层级任务内容能力目标基础任务完成数据预处理构建基础决策树分类模型输出准确率、精确率、召回率等核心评价指标掌握决策树全流程实现熟悉scikit-learn API进阶任务完成模型剪枝优化预剪枝后剪枝设计对比实验验证剪枝效果从模型中提取Top 5客户流失规则输出业务建议掌握决策树调优方法建立“模型→规则→业务”的转化思维挑战任务处理数据集样本不平衡问题对比决策树与KNN算法在该场景下的优劣势尝试基于业务理解进行特征工程培养问题分析能力、算法选型思维与工程实践能力3.1.3 分组与角色分工每组1-3人设4类核心角色可根据人数调整兼任数据工程师负责数据清洗、缺失值处理、特征编码与数据集划分模型工程师负责模型构建、参数调优、剪枝优化与对比实验业务分析师负责提取模型规则、解读特征重要性、输出业务落地建议汇报人统筹项目进度整理实验结果完成最终成果汇报3.1.4 交付物要求可运行的完整Python代码含注释项目实验报告5分钟课堂成果展示PPT3.1.5 评价标准评分维度权重优秀标准合格标准代码实现30%完整实现所有基础进阶任务代码规范、注释清晰有异常处理完成基础任务代码可正确运行实验设计25%设计多组对照实验变量控制严谨结论有数据支撑完成核心对比实验有完整结果记录业务解读25%能准确提取可落地的业务规则给出针对性运营建议逻辑清晰能正确解读评价指标与特征重要性协作与展示20%分工明确汇报逻辑清晰能准确回答拓展问题全员参与能完整陈述项目成果3.2 核心理论速览3.2.1 决策树核心逻辑决策树是一种树状监督学习模型通过“特征判断→分支→结论”的递归流程完成预测。内部节点对应特征判断分支对应判断结果叶节点对应最终预测值。核心优势可解释性强无需特征标准化支持分类与回归任务核心风险无约束的决策树极易过拟合需通过剪枝控制模型复杂度3.2.2 特征选择准则对比特征选择的本质是挑选能最大程度提升数据集纯度的特征。三种常用准则的实践差异如下准则核心逻辑对应算法实践特点选型建议信息增益划分前后信息熵的减少量ID3偏向取值多的特征计算量中等理论基准实际项目慎用信息增益比信息增益除以特征固有值修正取值偏好C4.5对取值数差异大的特征更公平特征取值差异悬殊时优先选基尼指数衡量随机抽取两个样本类别不一致的概率CART无需对数运算计算速度最快工业界最常用大数据集优先关键提醒类似“用户ID”“手机号”这类取值极多的特征信息增益会非常高但完全没有泛化价值建模前必须剔除。3.2.3 剪枝策略与适用场景剪枝是解决决策树过拟合的核心手段分为两类策略实现方式优点缺点预剪枝构建树的过程中提前停止划分限制深度、最小样本数等计算开销小实现简单可能出现欠拟合需要凭经验调参后剪枝先生成完整决策树再自底向上合并冗余节点泛化能力更强效果更稳定计算开销大需完整生成树工业界常用方案以预剪枝参数为主控配合成本复杂度后剪枝CCP做精细优化。3.2.4 5分钟热身鸢尾花快速入门使用经典鸢尾花数据集快速熟悉决策树API验证环境配置。# 热身练习快速跑通基础决策树fromsklearn.datasetsimportload_irisfromsklearn.treeimportDecisionTreeClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score# 加载数据irisload_iris()X_train,X_test,y_train,y_testtrain_test_split(iris.data,iris.target,test_size0.3,random_state42)# 小组补全选择特征选择准则设置初始树深度 clfDecisionTreeClassifier(criterion____,max_depth____,random_state42)# clf.fit(X_train,y_train)y_predclf.predict(X_test)print(f准确率{accuracy_score(y_test,y_pred):.4f})思考更换criterion和max_depth参数观察准确率与树结构的变化。3.3 项目实施方案引导3.3.1 问题拆解从业务需求到技术方案业务问题预测客户是否流失并找出流失原因技术转化二分类任务流失/留存要求模型可解释评价选择不能仅看准确率。客户流失场景中漏判流失客户FN的代价远高于误判FP需重点关注召回率与F1分数。3.3.2 技术路线规划建议按以下流程推进项目小组可自主调整数据加载与探索查看样本分布、缺失值、特征类型数据预处理缺失值填充、类别特征编码、数据集划分基准模型构建训练无剪枝的完整决策树建立性能基准模型调优通过预剪枝参数后剪枝优化模型缓解过拟合结果解读分析特征重要性提取核心流失规则总结输出整理实验结论与业务建议3.3.3 关键决策点小组讨论后确定方案本项目特征选择准则选基尼指数还是信息熵请说明理由。预剪枝参数中你认为哪一个对过拟合的控制效果最显著客户流失场景下为什么召回率比准确率更重要3.4 核心代码支架与实践指引说明以下为项目核心代码框架标注【补全】的部分需小组讨论后填写完整。数据集使用公开经典数据集Telco Customer Churn电信客户流失数据集可通过Kaggle或sklearn获取。3.4.1 环境依赖importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_splitfromsklearn.treeimportDecisionTreeClassifier,plot_treefromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_scorefromsklearn.preprocessingimportLabelEncoder3.4.2 模块1数据加载与探索性分析# 加载数据集datapd.read_csv(telco_churn.csv)# 【补全】查看数据集基本信息样本量、特征数、数据类型、缺失值情况# 【补全】查看标签分布流失客户占比判断是否存在样本不平衡# 【补全】剔除无意义特征如用户ID区分数值特征与类别特征3.4.3 模块2数据预处理# 缺失值处理# 【补全】对数值特征和类别特征分别采用合适的缺失值填充策略# 类别特征编码leLabelEncoder()forcolin类别特征列表:data[col]le.fit_transform(data[col])# 划分特征与标签Xdata.drop(Churn,axis1)# Churn为流失标签1流失0留存ydata[Churn]# 划分训练集与测试集# 【补全】按7:3划分设置随机种子考虑是否需要分层抽样X_train,X_test,y_train,y_test____3.4.4 模块3基准模型构建# 构建无约束的基准决策树用于观察过拟合现象base_treeDecisionTreeClassifier(random_state42)base_tree.fit(X_train,y_train)# 【补全】分别计算训练集和测试集的准确率、召回率、F1分数# 观察训练集与测试集的性能差距判断过拟合程度# 查看基准树的复杂度print(f基准树叶节点数{base_tree.get_n_leaves()})print(f基准树最大深度{base_tree.get_depth()})3.4.5 模块4剪枝优化方式一预剪枝调参# 【补全】设置预剪枝参数组合训练优化后的模型pruned_treeDecisionTreeClassifier(criterion____,max_depth____,min_samples_split____,min_samples_leaf____,random_state42)pruned_tree.fit(X_train,y_train)# 对比基准模型记录训练集与测试集的性能变化方式二成本复杂度后剪枝CCP# 获取完整剪枝路径pathbase_tree.cost_complexity_pruning_path(X_train,y_train)ccp_alphaspath.ccp_alphas# 【补全】遍历不同alpha值训练多个剪枝后的模型# 分别记录训练集与测试集的性能绘制alpha与准确率/召回率的关系曲线# 【补全】选择最优alpha值训练最终剪枝模型best_alpha____ final_treeDecisionTreeClassifier(ccp_alphabest_alpha,random_state42)final_tree.fit(X_train,y_train)3.4.6 模块5规则提取与可视化# 特征重要性分析importancesfinal_tree.feature_importances_# 【补全】按重要性排序输出Top 5重要特征及其重要性得分# 决策树可视化plt.figure(figsize(16,10))plot_tree(final_tree,feature_namesX.columns,class_names[留存,流失],filledTrue,roundedTrue,fontsize10)plt.title(优化后客户流失决策树)plt.show()# 【补全】从树结构中提取Top 3核心流失规则转化为业务语言# 示例当 月费用 50 且 签约时长 6个月 时客户流失率为 XX%3.4.7 常见踩坑指南类别特征未编码决策树无法直接处理字符串类型特征必须先做数值编码。忽略样本不平衡流失客户通常占比低全猜留存也能得高准确率需重点关注召回率。过拟合误判训练集准确率接近100%不是模型好大概率是过拟合必须看测试集性能。剪枝过度alpha设置过大可能导致模型退化为单节点出现欠拟合。3.5 实验设计与结果分析3.5.1 必做对比实验各小组需完成以下4组对照实验记录结果并分析结论。实验编号实验内容记录指标实验1对比基尼指数与信息熵的模型效果相同深度下训练/测试准确率、召回率、训练时间、叶节点数实验2对比不同max_depth2/5/10/无限制对过拟合的影响训练集与测试集的准确率差值实验3对比预剪枝与后剪枝的最优模型性能准确率、召回率、F1、模型复杂度实验4特征重要性分析Top 5特征名称、重要性得分、业务含义3.5.2 实验结果记录表实验模型配置训练集准确率测试集准确率测试集召回率叶节点数基准模型无约束预剪枝后剪枝α注以上记录表作为参考具体实验结果请自行记录用于实验报告编写。3.5.3 结果分析思考题随着树深度增加训练集和测试集的性能分别如何变化为什么剪枝之后训练集准确率下降但测试集准确率可能上升请解释该现象。你提取出的最核心流失规则是什么对应可以提出哪些运营挽留措施3.6 拓展任务与项目反思3.6.1 进阶拓展任务样本不平衡优化尝试使用SMOTE过采样或class_weight参数优化少数类流失客户的召回率。算法横向对比使用同一数据集训练KNN模型对比决策树与KNN的性能、可解释性、计算效率的差异。特征工程尝试基于业务理解构造新特征如“单位时长消费”“套餐使用率”观察模型性能是否提升。3.6.2 项目复盘与反思本次项目中你们组遇到的最大问题是什么如何解决的决策树在业务落地中相比“黑盒”模型最大的优势是什么有哪些局限性如果要将这个模型部署到真实业务中还需要做哪些工作