初识机器学习算法 - 决策树

253 阅读14分钟

引言

还记得小时候玩的"二十问"游戏吗?通过一系列"是"或"否"的问题,最终猜出对方心里想的是什么。决策树就像这个游戏的升级版,它通过一系列"如果...那么..."的判断,最终得出一个预测结果。

有看过志明与春娇2吗?我最爱的爱情电影之一(没动作喔)。 他俩遇到分歧的时候,就会在厅里用那个决策树板来确定来给出决定。

决策树.jpg

在上一期我分享了一下逻辑回归 初识机器学习算法 - 逻辑回归,根据里面的那个小案例,那我们直接用决策树来分析一下。

决策树就像一个经验丰富的银行经理,它能够根据客户的各种特征(收入、年龄、投资习惯等),通过一系列逻辑判断,最终给出一个明确的预测结果。而且最重要的是,它能够清楚地告诉我们:"我是怎么得出这个结论的!"

本文将带你深入了解决策树的原理,并结合实际项目案例,展示它在客户资产预测中的强大应用,最后还会探讨它在其他行业的精彩表现。

准备好了吗?让我们一起走进决策树的奇妙世界!🌳

一、决策树基础理论

1.1 什么是决策树?

决策树(Decision Tree)是一种基本的分类与回归方法,它呈现树形结构,其中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一个分类结果。

核心思想:通过一系列"是/否"问题,将数据逐步分割,最终得到预测结果。

1.2 决策树的工作原理

想象一下,你是一个银行经理,要判断一个客户是否会提升资产到100万以上:

问题1:月收入是否超过3万元?
├─ 是 → 问题2:产品数量是否超过3个?
│   ├─ 是 → 问题3:投资次数是否超过5次?
│   │   ├─ 是 → 预测:会提升
│   │   └─ 否 → 预测:可能提升
│   └─ 否 → 预测:不太可能提升
└─ 否 → 预测:不太可能提升

这就是决策树的基本逻辑!

1.3 决策树的优势

  1. 可解释性强:每个决策路径都清晰可见
  2. 无需数据预处理:不需要标准化、归一化
  3. 处理非线性关系:能够捕捉复杂的特征交互
  4. 自动特征选择:通过信息增益选择重要特征
  5. 可视化友好:树形结构直观易懂

1.4 决策树的关键概念

信息增益(Information Gain)

衡量某个特征对分类结果的重要程度,信息增益越大,特征越重要。

基尼指数(Gini Index)

衡量数据集的纯度,基尼指数越小,数据集越纯。

剪枝(Pruning)

防止过拟合的技术,通过删除不必要的分支来简化模型。

二、项目实战:客户资产提升预测

2.1 业务背景

在金融行业,精准识别具有资产提升潜力的客户对于产品推荐、营销策略制定具有重要意义。本项目基于10,000条客户数据,使用决策树模型(深度=4)预测客户未来3个月资产提升至100万+的概率。

2.2 数据特征工程

项目使用了24个特征变量,涵盖客户的多维度信息:

# 客户基本信息
- age: 年龄
- gender: 性别
- monthly_income: 月收入

# 资产状况
- total_assets: 总资产
- deposit_balance: 存款余额
- financial_balance: 理财余额
- fund_balance: 基金余额
- insurance_balance: 保险余额

# 产品持有情况
- deposit_flag: 存款产品持有标志
- financial_flag: 理财产品持有标志
- fund_flag: 基金产品持有标志
- insurance_flag: 保险产品持有标志
- product_count: 产品数量

# 行为特征
- investment_monthly_count: 月度投资次数
- app_login_count: APP登录次数
- app_financial_view_time: APP理财查看时长
- app_product_compare_count: APP产品对比次数
- financial_repurchase_count: 理财复购次数
- credit_card_monthly_expense: 信用卡月消费

# 衍生特征
- asset_income_ratio: 资产收入比
- investment_activity: 投资活跃度
- product_diversity: 产品多样性

2.3 模型实现

from sklearn.tree import DecisionTreeClassifier, plot_tree, export_text
from sklearn.model_selection import train_test_split

class CustomerAssetDecisionTree:
    def __init__(self, max_depth=4):
        """初始化决策树预测器"""
        self.model = DecisionTreeClassifier(
            max_depth=max_depth, 
            random_state=42,
            criterion='gini'
        )
        
    def train_model(self, X, y):
        # 分割训练集和测试集
        X_train, X_test, y_train, y_test = train_test_split(
            X, y, test_size=0.2, random_state=42, stratify=y
        )
        
        # 训练模型
        self.model.fit(X_train, y_train)
        
        # 预测
        y_pred = self.model.predict(X_test)
        y_pred_proba = self.model.predict_proba(X_test)[:, 1]
        
        return X_train, X_test, y_train, y_test

2.4 模型性能

  • 准确率: 63.05%
  • ROC AUC: 0.6140
  • 数据规模: 10,000条客户记录
  • 目标变量分布: 37.83%的客户预测会提升至100万+

2.5 特征重要性分析

通过决策树特征重要性分析,我们发现了影响客户资产提升的关键因素:

主要特征重要性排序

  1. 月收入 (重要性: 0.4232) ⭐⭐⭐⭐⭐

    • 最强影响特征,是决策树的第一分割特征
    • 收入水平直接决定客户资产提升潜力
    • 决策建议:重点关注高收入客户群体
  2. 产品数量 (重要性: 0.3013) ⭐⭐⭐⭐⭐

    • 第二强影响特征,是第二重要的分割特征
    • 产品多样化配置有助于资产增长
    • 决策建议:鼓励客户进行产品组合配置
  3. 月度投资次数 (重要性: 0.0874) ⭐⭐⭐

    • 中等影响特征
    • 投资活跃度影响资产提升概率
    • 决策建议:培养客户定期投资习惯
  4. 理财余额 (重要性: 0.0688) ⭐⭐

    • 弱影响特征
    • 理财配置体现客户投资偏好
    • 决策建议:关注客户理财产品配置
  5. 投资活跃度 (重要性: 0.0678) ⭐⭐

    • 弱影响特征
    • 数字化投资活跃度反映客户参与度
    • 决策建议:提升数字化投资体验

2.6 决策树结构分析

决策树生成了一个深度为4的树形结构,主要决策路径如下:

路径1: 低收入客户 (月收入 ≤ 31,009元)

月收入 ≤ 31,009元
├─ 产品数量 ≤ 2个
│   ├─ 月度投资次数 ≤ 2次 → 不提升 (1301:379)
│   └─ 月度投资次数 > 2次 → 不提升 (633:417)
└─ 产品数量 > 2个
    ├─ 投资活跃度 ≤ 44.5 → 不提升 (904:597)
    └─ 投资活跃度 > 44.5 → 提升 (198:226)

路径2: 中等收入客户 (31,009 < 月收入 ≤ 47,854元)

31,009 < 月收入 ≤ 47,854元
├─ 产品数量 ≤ 3个
│   ├─ 投资活跃度 ≤ 31 → 不提升 (487:291)
│   └─ 投资活跃度 > 31 → 不提升 (268:256)
└─ 产品数量 > 3个
    ├─ 保险余额 ≤ 349元 → 提升 (38:45)
    └─ 保险余额 > 349元 → 提升 (39:108)

路径3: 高收入客户 (月收入 > 47,854元)

月收入 > 47,854元
├─ 存款余额 ≤ 11,915元
│   ├─ 理财余额 ≤ 2,930元 → 提升 (72:105)
│   └─ 理财余额 > 2,930元 → 提升 (42:133)
└─ 存款余额 > 11,915元
    ├─ 理财余额 ≤ 3,058元 → 提升 (22:44)
    └─ 理财余额 > 3,058元 → 不提升 (42:26)

2.7 客户画像分析

基于决策树结果,我们构建了详细的客户画像:

高潜力客户画像

  1. 高收入群体

    • 月收入 > 47,854元
    • 存款余额 ≤ 11,915元(资金流动性好)
    • 理财余额适中(2,930-3,058元)
  2. 中等收入活跃客户

    • 月收入 31,009-47,854元
    • 产品数量 > 3个
    • 保险余额 > 349元
  3. 低收入活跃客户

    • 月收入 ≤ 31,009元
    • 产品数量 > 2个
    • 投资活跃度 > 44.5
    • 年龄 > 23.89岁

低潜力客户画像

  1. 低收入低活跃客户

    • 月收入 ≤ 31,009元
    • 产品数量 ≤ 2个
    • 月度投资次数 ≤ 2次
  2. 中等收入低活跃客户

    • 月收入 31,009-47,854元
    • 产品数量 ≤ 3个
    • 投资活跃度 ≤ 31
  3. 高收入高存款客户

    • 月收入 > 47,854元
    • 存款余额 > 11,915元
    • 理财余额 > 3,058元

2.8 业务决策建议

客户分层策略

  1. 高价值客户(提升概率 > 70%)

    • 特征:高收入、低存款、适中理财
    • 策略:重点维护,提供VIP服务
    • 产品:推荐高收益理财产品、基金组合
    • 服务:专属理财顾问,定期资产检视
  2. 中价值客户(提升概率 30%-70%)

    • 特征:中等收入、多产品、高活跃度
    • 策略:积极培养,提升产品配置
    • 产品:推荐多样化产品组合
    • 服务:定期投资教育,产品推荐
  3. 低价值客户(提升概率 < 30%)

    • 特征:低收入、少产品、低活跃度
    • 策略:基础维护,逐步培养
    • 产品:从低风险产品开始
    • 服务:投资知识普及,风险教育

产品推荐策略

针对高潜力客户

  1. 基金产品:推荐股票型、混合型基金
  2. 理财产品:推荐中高风险理财产品
  3. 保险产品:推荐投资连结保险
  4. 组合配置:提供资产配置建议

针对低潜力客户

  1. 存款产品:推荐结构性存款
  2. 理财产品:推荐低风险理财产品
  3. 基金产品:推荐货币基金、债券基金
  4. 教育服务:提供投资知识培训

三、决策树在其他行业的应用

3.1 电商行业

应用场景

  1. 用户流失预测

    • 特征:用户活跃度、购买频率、客单价、浏览行为
    • 决策树路径:活跃度 → 购买频率 → 客单价 → 流失风险
    • 价值:提前干预,提升用户留存率
  2. 购买转化预测

    • 特征:商品浏览时长、加购次数、搜索关键词、用户画像
    • 决策树路径:浏览时长 → 加购次数 → 转化概率
    • 价值:优化推荐算法,提升转化率
  3. 复购预测

    • 特征:历史购买记录、产品满意度、用户生命周期
    • 决策树路径:购买次数 → 满意度 → 复购概率
    • 价值:精准营销,提升客户价值

实现示例

# 电商用户流失预测决策树
from sklearn.tree import DecisionTreeClassifier

# 特征定义
features = [
    'days_since_last_purchase',  # 距离上次购买天数
    'total_purchases',           # 总购买次数
    'avg_order_value',          # 平均订单金额
    'browse_frequency',         # 浏览频率
    'cart_abandonment_rate',    # 购物车放弃率
    'customer_service_contacts' # 客服联系次数
]

# 决策树模型
model = DecisionTreeClassifier(max_depth=5, random_state=42)
model.fit(X_train, y_train)

# 特征重要性
importance = model.feature_importances_
for feature, imp in zip(features, importance):
    print(f"{feature}: {imp:.4f}")

3.2 医疗行业

应用场景

  1. 疾病风险预测

    • 特征:年龄、性别、BMI、血压、血糖、家族病史
    • 决策树路径:年龄 → BMI → 血压 → 疾病风险
    • 价值:早期干预,预防疾病
  2. 患者再入院预测

    • 特征:住院时长、并发症、用药情况、出院后随访
    • 决策树路径:住院时长 → 并发症 → 再入院风险
    • 价值:优化医疗资源配置
  3. 药物反应预测

    • 特征:基因型、年龄、体重、肝肾功能
    • 决策树路径:基因型 → 年龄 → 药物反应
    • 价值:个性化用药,提高治疗效果

3.3 教育行业

应用场景

  1. 学生辍学预测

    • 特征:出勤率、成绩、家庭背景、学习行为
    • 决策树路径:出勤率 → 成绩 → 辍学风险
    • 价值:早期干预,降低辍学率
  2. 学习效果预测

    • 特征:学习时长、练习次数、错题率、学习方式
    • 决策树路径:学习时长 → 练习次数 → 学习效果
    • 价值:个性化教学,提升学习效率
  3. 就业成功率预测

    • 特征:专业、成绩、实习经历、技能证书
    • 决策树路径:专业 → 成绩 → 就业成功率
    • 价值:指导专业设置,提升就业率

3.4 保险行业

应用场景

  1. 理赔风险预测

    • 特征:年龄、职业、健康状况、历史理赔记录
    • 决策树路径:年龄 → 职业 → 理赔风险
    • 价值:精准定价,风险控制
  2. 客户续保预测

    • 特征:保单时长、理赔次数、客户满意度、竞品对比
    • 决策树路径:保单时长 → 理赔次数 → 续保概率
    • 价值:客户维护,提升续保率
  3. 欺诈检测

    • 特征:理赔金额、理赔频率、理赔时间、客户行为
    • 决策树路径:理赔金额 → 理赔频率 → 欺诈风险
    • 价值:风险控制,降低成本

四、决策树的优势与局限性

4.1 优势

  1. 可解释性强

    • 每个决策路径都清晰可见
    • 业务人员容易理解和接受
    • 便于向客户解释决策原因
  2. 无需数据预处理

    • 不需要标准化、归一化
    • 能够处理混合类型数据
    • 对缺失值相对鲁棒
  3. 处理非线性关系

    • 能够捕捉复杂的特征交互
    • 自动发现数据中的模式
    • 适应性强
  4. 自动特征选择

    • 通过信息增益选择重要特征
    • 减少特征工程工作量
    • 提高模型效率
  5. 可视化友好

    • 树形结构直观易懂
    • 便于业务人员理解
    • 支持决策规则提取

4.2 局限性

  1. 过拟合风险

    • 容易生成过于复杂的树
    • 需要剪枝技术控制
    • 对噪声数据敏感
  2. 不稳定性

    • 数据微小变化可能导致树结构大幅改变
    • 需要集成方法提高稳定性
    • 对数据质量要求较高
  3. 表达能力有限

    • 只能进行轴平行分割
    • 无法处理某些复杂关系
    • 需要其他算法补充
  4. 计算复杂度

    • 训练时间随数据量增长
    • 预测时需要遍历树结构
    • 内存占用较大

4.3 改进方向

  1. 集成方法

    • 随机森林:多个决策树投票
    • 梯度提升:逐步优化决策树
    • 堆叠集成:结合多种算法
  2. 特征工程

    • 特征选择:去除无关特征
    • 特征变换:创建新特征
    • 特征编码:处理分类变量
  3. 参数调优

    • 网格搜索:寻找最优参数
    • 贝叶斯优化:智能参数搜索
    • 交叉验证:评估模型性能

五、最佳实践建议

5.1 数据预处理

  1. 数据清洗

    • 处理缺失值:删除、填充、插值
    • 异常值检测:箱线图、Z-score方法
    • 数据一致性:统一格式、单位
  2. 特征工程

    • 特征选择:相关性分析、特征重要性
    • 特征变换:对数变换、多项式特征
    • 特征创建:业务理解、领域知识

5.2 模型训练

  1. 参数设置

    • max_depth:控制树的深度
    • min_samples_split:最小分割样本数
    • min_samples_leaf:最小叶子节点样本数
    • criterion:分割标准(gini/entropy)
  2. 剪枝技术

    • 预剪枝:训练时控制树的生长
    • 后剪枝:训练后简化树结构
    • 代价复杂度剪枝:平衡复杂度与性能

5.3 模型评估

  1. 评估指标

    • 分类指标:准确率、精确率、召回率、F1分数
    • 排序指标:ROC AUC、PR AUC
    • 业务指标:成本效益、ROI
  2. 交叉验证

    • K折交叉验证
    • 分层交叉验证
    • 时间序列交叉验证

5.4 模型解释

  1. 决策路径分析

    • 提取重要决策规则
    • 分析决策逻辑
    • 验证业务合理性
  2. 特征重要性

    • 计算特征重要性
    • 分析特征影响
    • 指导特征工程
  3. 业务解释

    • 业务含义:决策规则对应的业务逻辑
    • 决策建议:基于结果的行动方案
    • 风险提示:模型局限性说明

六、总结

决策树作为经典的机器学习算法,在金融客户资产预测中展现出了强大的应用价值。通过本项目实践,我们不仅验证了决策树在客户画像构建、风险预测方面的有效性,更重要的是展示了如何将机器学习结果转化为具体的业务决策。

决策树的最大优势在于其可解释性,它就像一个透明的"黑盒",能够清楚地告诉我们每个决策背后的逻辑。这种特性使得决策树特别适合在金融、医疗、教育等对可解释性要求较高的领域应用。

在数据驱动的时代,决策树的可视化特性使其成为业务决策的重要工具。无论是金融、电商、医疗还是教育行业,决策树都能为业务决策提供科学依据。然而,我们也需要认识到其局限性,在实际应用中结合业务场景选择合适的算法和优化策略。

你觉得决策树还有啥的应用场景呀?欢迎在评论区分享你的想法!  🎈