DECISION TREE · RANDOM FOREST · COURSE 04
先分析历史客户,再判断谁会流失
下面是一组课程教学客户数据。每条记录包含使用月数、周均使用次数、投诉次数、优惠依赖情况,以及客户最终是否流失。
你可以先下载历史数据,寻找流失客户与留存客户之间可能存在的判断规律,再分析右侧的新客户。
结合历史数据,作出你的初步判断
尝试寻找与这个客户条件相近的历史记录,观察它们最终是流失还是留存。
建立树形直觉
决策树,就是连续提出几个问题
寻找更好的问题
什么样的条件,适合放在树的上方?
蓝色方形表示留存,橙色圆形表示流失。颜色和形状同时区分类别。树会比较候选条件,选择能更有效降低混杂程度的分裂。
树越深,不一定越好
深树可以继续切分更多细节,但也更容易记住训练数据中的偶然噪声。
先从深度1逐步拖到6,重点观察深度超过3后:训练集继续提升时,测试集发生了什么变化?
深度超过3后,示意中的训练表现继续上升,但测试表现开始下降,这就是过拟合的典型信号。数值用于教学演示,不代表真实业务精度。
一棵树容易摇摆,多棵树一起判断更稳定
每棵树看到的数据样本略有不同。
不同树尝试不同判断视角。
树与树之间形成必要差异。
多数意见成为最终分类。
但对数据细微变化较敏感,深树容易过拟合。
代价是模型更大,无法像单棵树那样完整展示全部规则。
逐棵加入树,观察投票结果
周均使用 ≤ 2.0 → 流失
使用月数 ≤ 10 且依赖优惠 → 流失
投诉 ≥ 2 → 流失
测试集才是检查新客户表现的考场
学习特征、阈值与树结构。
训练时没有看过,用来比较准确率、召回率和错误类型。
不能只看准确率:如果漏掉一个真正会流失的高价值客户,业务成本可能远高于一次误报。
用代码训练决策树和随机森林
import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_scoredata = pd.read_csv("customer_churn.csv")features = ["months", "weekly", "complaints", "discount"]X, y = data[features], data["churn"]X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y)tree = DecisionTreeClassifier(max_depth=3, random_state=42)tree.fit(X_train, y_train)forest = RandomForestClassifier(n_estimators=100, max_depth=4, random_state=42)forest.fit(X_train, y_train)prediction = forest.predict(X_test)print(accuracy_score(y_test, prediction))new_customer = pd.DataFrame([[8, 1.4, 2, 1]], columns=features)print(forest.predict(new_customer)[0])导入 pandas 读取客户表格。
导入训练集与测试集拆分工具。
导入决策树分类器。
导入随机森林分类器。
导入分类准确率指标。
读取带有历史流失标签的数据。
指定四个客户特征。
X 保存特征,y 保存是否流失标签。
开始拆分训练数据与测试数据。
固定种子并保持流失比例一致。
完成数据拆分。
建立限制深度为3的决策树,降低过拟合风险。
让决策树学习分裂特征与阈值。
建立由100棵树组成的随机森林。
让不同树基于不同样本和特征完成训练。
让森林对未见过的测试客户投票预测。
输出测试准确率,检查新数据表现。
输入课程开场的新客户特征。
输出随机森林最终投票类别。
适合什么问题,又要警惕什么?
分类与数值预测、非线性关系、特征交互、需要规则解释
过拟合、类别不平衡、数据偏差、森林解释成本、外推能力弱
客户流失、风险判断、质量分类、故障预测、营销响应
特征重要性说明模型经常使用哪些信息,但不能直接证明现实因果,也需要检查偏差与公平性。
检查你是否理解了“树”和“森林”
当前答对 0 / 5 题。
决策树如何完成一次预测?
树为什么不能无限长深?
随机森林中的树为什么要有所不同?
分类随机森林如何得到最终结果?
特征重要性可以直接说明因果吗?
COURSE 04 · SUMMARY
决策树学习规则,随机森林汇总不同规则的意见
- 节点提出判断条件,分支连接下一步。
- 分裂目标是让子节点中的类别更纯。
- 限制树深可以缓解过拟合。
- 随机森林通过样本与特征随机性制造不同的树。
- 分类森林用投票得到最终结果。
开场新客户:你的判断是 尚未提交,单棵树和7棵树森林都预测为流失。