← 返回 Day 109 正文

Day 109 · 图解

Day 109 — 图解:决策树与随机森林

1. 决策树分裂过程

                    📊 原始数据集
                    (1000 个样本)
                    违约率: 25%
                    基尼系数: 0.375
                          │
          ┌───────────────┼───────────────┐
          │  选择最优分裂特征              │
          │  "credit_score"               │
          │  阈值: 600                    │
          └───────────────┼───────────────┘
                          │
            ┌─────────────┴─────────────┐
            │                           │
    ┌───────▼────────┐         ┌────────▼───────┐
    │ credit_score   │         │ credit_score   │
    │    ≤ 600       │         │    > 600       │
    │  (400 样本)    │         │  (600 样本)    │
    │  违约率: 45%   │         │  违约率: 12%   │
    │  基尼: 0.495   │         │  基尼: 0.211   │
    └───────┬────────┘         └────────┬───────┘
            │                           │
    ┌───────▼────────┐         ┌────────▼───────┐
    │  选择下一个     │         │  选择下一个     │
    │  分裂特征:     │         │  分裂特征:     │
    │  "debt_ratio"  │         │  "income"      │
    └───────┬────────┘         └────────┬───────┘
            │                           │
     ┌──────┴──────┐             ┌──────┴──────┐
     │             │             │             │
  ┌──▼───┐    ┌───▼──┐      ┌──▼───┐    ┌───▼──┐
  │ 叶   │    │ 叶   │      │ 叶   │    │ 叶   │
  │ 违约 │    │ 正常 │      │ 违约 │    │ 正常 │
  │ 75%  │    │ 85%  │      │ 30%  │      │ 95%  │
  └──────┘    └──────┘      └──────┘    └──────┘

2. 随机森林工作原理

原始训练数据 (N 个样本)
    │
    │  ┌──────────┬──────────┬──────────┬──────────┐
    │  │ Bootstrap│ Bootstrap│ Bootstrap│ Bootstrap│
    │  │  样本1   │  样本2   │  样本3   │  样本4   │
    │  │ 63.2%   │ 63.2%   │ 63.2%   │ 63.2%   │
    │  │ 原始数据 │ 原始数据 │ 原始数据 │ 原始数据 │
    │  └────┬─────┘ └────┬────┘ └────┬────┘ └────┬────┘
    │       │            │           │            │
    │  ┌────▼────┐  ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
    │  │随机选3  │  │随机选3  │ │随机选3  │ │随机选3  │
    │  │个特征   │  │个特征   │ │个特征   │ │个特征   │
    │  │做候选   │  │做候选   │ │做候选   │ │做候选   │
    │  └────┬────┘  └────┬────┘ └────┬────┘ └────┬────┘
    │       │            │           │            │
    │  ┌────▼────┐  ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
    │  │ 决策树  │  │ 决策树  │ │ 决策树  │ │ 决策树  │
    │  │  #1     │  │  #2     │ │  #3     │ │  #4     │
    │  │ 预测: A │  │ 预测: B │ │ 预测: A │ │ 预测: A │
    │  └────┬────┘  └────┬────┘ └────┬────┘ └────┬────┘
    │       │            │           │            │
    │       └─────┬──────┴─────┬─────┘            │
    │             │            │                  │
    │     ┌───────▼────────────▼───────┐          │
    │     │     多数投票 / 平均预测     │          │
    │     │   A: 3票  vs  B: 1票      │          │
    │     │   最终预测: A ✅           │          │
    │     └────────────────────────────┘          │

3. Bagging 采样概率

单个样本在 N 次 Bootstrap 中被选中的概率:

不被选中的概率 = (1 - 1/N)^N

当 N → ∞:
  (1 - 1/N)^N → 1/e ≈ 0.368

所以:
  约 63.2% 的样本会被选中 (in-bag)
  约 36.8% 的样本不会被选中 (out-of-bag, OOB)

┌─────────────────────────────────────────┐
│  N=10   → 不被选中: 34.9%               │
│  N=100  → 不被选中: 36.6%               │
│  N=1000 → 不被选中: 36.8%               │
│  N=∞    → 不被选中: 36.8% (= 1/e)       │
└─────────────────────────────────────────┘

4. 信息增益 vs 基尼系数图解

二分类问题: p = 正类比例

信息熵 H(p):           基尼系数 G(p):
    1.0 ┤                 0.5 ┤
        │╲                    │╲
    0.8 ┤  ╲              0.4 ┤  ╲
        │    ╲                │    ╲
    0.6 ┤     ╲           0.3 ┤     ╲
        │      ╲              │      ╲
    0.4 ┤       ╲         0.2 ┤       ╲
        │        ╲            │        ╲
    0.2 ┤         ╲       0.1 ┤         ╲
        │          ╲          │          ╲
    0.0 ┼───────────╲───  0.0 ┼───────────╲───
        0    0.5    1         0    0.5    1
           p (正类比例)          p (正类比例)

H(p) = -p·log₂(p) - (1-p)·log₂(1-p)
G(p) = 1 - p² - (1-p)² = 2p(1-p)

两者形状相似,差异不大:
  - p=0.5 时: H=1.0, G=0.5 (最大混乱度)
  - p=0 或 1 时: H=0, G=0 (完全纯净)

5. 特征重要性评估方法

┌──────────────────────────────────────────────────┐
│           MDI (不纯度减少) vs Permutation         │
├──────────────────────────────────────────────────┤
│                                                  │
│  MDI:                                            │
│  ┌──────────────────────────┐                    │
│  │ 每次分裂时计算:          │                    │
│  │ 不纯度减少 = P(左)×H(左) │                    │
│  │           + P(右)×H(右)  │                    │
│  │           - H(父)        │                    │
│  │                          │                    │
│  │ 累加所有用该特征的分裂   │                    │
│  └──────────────────────────┘                    │
│                                                  │
│  Permutation:                                    │
│  ┌──────────────────────────┐                    │
│  │ 1. 用测试集评估基线性能  │                    │
│  │ 2. 随机打乱特征 X 的值   │                    │
│  │ 3. 重新评估性能          │                    │
│  │ 4. 重要性 = 性能下降幅度 │                    │
│  │                          │                    │
│  │ 重复 N 次取平均          │                    │
│  └──────────────────────────┘                    │
│                                                  │
│  ⚠️ MDI 偏向高基数特征                           │
│  ✅ Permutation 更客观但更慢                      │
└──────────────────────────────────────────────────┘

6. 模型选择决策流程

                    你的问题是什么?
                         │
                    ┌────▼────┐
                    │需要可解  │
                    │释性?    │
                    └────┬────┘
                   是 ↙     ↘ 否
            ┌──────────┐   ┌──────────────┐
            │决策树     │   │需要最高精度? │
            │可解释性强 │   └──────┬───────┘
            └──────────┘     是 ↙     ↘ 否
                    ┌──────────────┐   ┌──────────────┐
                    │随机森林      │   │计算资源有限? │
                    │稳定+高效     │   └──────┬───────┘
                    └──────────────┘     是 ↙     ↘ 否
                                ┌──────┐   ┌──────────┐
                                │随机  │   │XGBoost/  │
                                │森林  │   │LightGBM  │
                                └──────┘   └──────────┘

数据量参考:
  < 1000 样本:  决策树 或 简单随机森林
  1K-100K 样本: 随机森林 (n_estimators=100-300)
  > 100K 样本:  LightGBM / XGBoost (更快)