本章小结
练习题
常见陷阱与错误
在金融科技革命的浪潮中,机器学习技术正在深刻改变信贷风控的格局。从传统的专家规则和线性模型,到如今的深度学习和图神经网络,风控技术经历了翻天覆地的变化。本章将深入探讨现代机器学习方法在信贷风控中的应用,重点介绍集成学习、深度学习和图网络三大技术流派,以及它们如何解决传统方法难以处理的复杂非线性关系和高维特征交互问题。
完成本章学习后,您将能够:
传统统计模型 (1950s-1990s)
↓
决策树与规则引擎 (1990s-2000s)
↓
集成学习方法 (2000s-2010s)
↓
深度学习革命 (2010s-现在)
↓
图网络与因果推断 (2015s-现在)
集成学习通过组合多个弱学习器来构建强学习器,在信贷风控领域取得了巨大成功。XGBoost和LightGBM作为梯度提升树的杰出代表,已成为业界标准工具。这两个框架在处理大规模金融数据时展现出的高效性和准确性,使其在全球各大金融机构的风控系统中得到广泛应用。
梯度提升(Gradient Boosting)是一种前向分步算法,通过迭代地添加新的弱学习器来最小化损失函数。其核心思想源于函数空间的梯度下降,将弱学习器的组合视为对目标函数的逐步逼近。
基本思想:给定训练数据集 ${(x_i, y_i)}_{i=1}^n$,梯度提升通过加法模型进行预测:
\[F(x) = \sum_{m=1}^M \gamma_m h_m(x)\]其中 $h_m(x)$ 是第 $m$ 个基学习器,$\gamma_m$ 是其权重。
前向分步算法框架:
初始化:$F_0(x) = \arg\min_c \sum_{i=1}^n L(y_i, c)$
对于 $m = 1, 2, …, M$:
计算负梯度(伪残差): \(r_{im} = -\left[\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}\right]_{F=F_{m-1}}\)
拟合基学习器 $h_m$ 到伪残差: \(h_m = \arg\min_h \sum_{i=1}^n (r_{im} - h(x_i))^2\)
计算最优步长: \(\gamma_m = \arg\min_\gamma \sum_{i=1}^n L(y_i, F_{m-1}(x_i) + \gamma h_m(x_i))\)
更新模型: \(F_m(x) = F_{m-1}(x) + \gamma_m h_m(x)\)
优化目标:在第 $m$ 轮迭代中,我们需要找到最优的 $h_m$ 和 $\gamma_m$ 使得:
\[(\gamma_m, h_m) = \arg\min_{\gamma, h} \sum_{i=1}^n L(y_i, F_{m-1}(x_i) + \gamma h(x_i))\]其中 $L$ 是损失函数,$F_{m-1}$ 是前 $m-1$ 个学习器的累积预测。
梯度下降视角:使用泰勒展开近似损失函数:
\[L(y_i, F_{m-1}(x_i) + \gamma h(x_i)) \approx L(y_i, F_{m-1}(x_i)) + g_i \gamma h(x_i) + \frac{1}{2} h_i \gamma^2 h^2(x_i)\]其中:
信贷风控中的损失函数选择:
对数损失(Logistic Loss):用于违约概率预测 \(L(y, F) = \log(1 + \exp(-2yF)), \quad y \in \{-1, +1\}\)
一阶梯度:$g = \frac{-2y}{1 + \exp(2yF)}$
二阶梯度:$h = \frac{4\exp(2yF)}{(1 + \exp(2yF))^2}$
Huber损失:对异常值鲁棒的回归损失 \(L_\delta(y, F) = \begin{cases} \frac{1}{2}(y - F)^2, & |y - F| \leq \delta \\ \delta|y - F| - \frac{1}{2}\delta^2, & |y - F| > \delta \end{cases}\)
分位数损失:用于风险价值(VaR)估计 \(L_\tau(y, F) = (y - F)(\tau - \mathbb{1}_{y < F})\)
XGBoost(eXtreme Gradient Boosting)在传统梯度提升基础上引入了正则化项和系统优化,这使得它在防止过拟合和提升训练效率方面都有显著改进。陈天奇博士在2016年发表的论文中详细阐述了XGBoost的创新之处。
目标函数:XGBoost的目标函数包含损失项和正则化项:
\[\mathcal{L}^{(t)} = \sum_{i=1}^n l(y_i, \hat{y}_i^{(t-1)} + f_t(x_i)) + \Omega(f_t)\]其中正则化项定义为:
\[\Omega(f) = \gamma T + \frac{1}{2}\lambda \sum_{j=1}^T w_j^2\]二阶泰勒展开优化:
将目标函数在 $\hat{y}_i^{(t-1)}$ 处进行二阶泰勒展开:
\[\mathcal{L}^{(t)} \approx \sum_{i=1}^n [l(y_i, \hat{y}_i^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i)] + \Omega(f_t)\]去掉常数项后,简化为:
\[\tilde{\mathcal{L}}^{(t)} = \sum_{i=1}^n [g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i)] + \gamma T + \frac{1}{2}\lambda \sum_{j=1}^T w_j^2\]叶子节点权重的闭式解:
| 对于固定的树结构,定义 $I_j = {i | q(x_i) = j}$ 为落入叶子 $j$ 的样本集合,目标函数可以重写为: |
对 $w_j$ 求导并令其为零,得到最优权重:
\[w_j^* = -\frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda} = -\frac{G_j}{H_j + \lambda}\]代入后得到最优目标函数值:
\[\tilde{\mathcal{L}}^{(t)*} = -\frac{1}{2} \sum_{j=1}^T \frac{G_j^2}{H_j + \lambda} + \gamma T\]分裂增益计算:对于树的每个潜在分裂点,XGBoost计算分裂增益:
\[Gain = \frac{1}{2} \left[ \frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{(G_L + G_R)^2}{H_L + H_R + \lambda} \right] - \gamma\]其中:
这个公式可以理解为:(左子树得分 + 右子树得分) - 不分裂时的得分 - 复杂度成本
近似分裂算法:
对于大规模数据,XGBoost采用分位数sketch算法:
分位数选择准则:使得每个桶中的样本权重(二阶梯度)大致相等:
\[\text{rank}_h(z) = \frac{1}{\sum_{(x,h) \in \mathcal{D}} h} \sum_{(x,h) \in \mathcal{D}, x < z} h\]稀疏感知分裂:
XGBoost原生支持稀疏数据,包括缺失值和零值:
对于每个特征:
枚举默认方向 ∈ {左, 右}
计算将缺失值分配到该方向的增益
选择增益最大的方向作为默认方向
特征重要性:XGBoost提供三种特征重要性度量:
其中 $T_f$ 是使用特征 $f$ 进行分裂的所有节点集合。
LightGBM(Light Gradient Boosting Machine)由微软在2017年推出,通过创新的算法设计,在保持精度的同时大幅提升训练速度。在处理大规模金融数据时,LightGBM的效率优势尤为明显,使其成为实时风控系统的首选。
直方图算法:将连续特征离散化为k个bins,构建直方图:
原始特征值: [0.1, 0.15, 0.2, 0.25, 0.3, ...]
离散化bins: [bin1, bin1, bin2, bin2, bin3, ...]
直方图统计: {bin1: (G1, H1), bin2: (G2, H2), ...}
直方图构建过程:
for sample in node_samples:
bin_id = feature_to_bin[feature_value]
histogram[bin_id].G += gradient[sample]
histogram[bin_id].H += hessian[sample]
直方图差优化: 利用父节点直方图 = 左子节点直方图 + 右子节点直方图的性质: \(hist_{sibling} = hist_{parent} - hist_{node}\)
这将构建成本从 $O(2 \times #data)$ 降至 $O(#data)$
优势分析:
Leaf-wise生长策略:
Level-wise (XGBoost默认):
Root
/ \
L1 R1 <- 同时生长所有叶子
/ \ / \
L2 R2 L3 R3 <- 同时生长所有叶子
Leaf-wise (LightGBM):
Root
/ \
L1 R1
/ \ <- 选择增益最大的叶子分裂
L2 R2
/ \ <- 继续选择增益最大的叶子
L3 R3
Leaf-wise的优势与控制:
max_depth:限制最大深度min_data_in_leaf:叶子最小样本数min_sum_hessian_in_leaf:叶子最小Hessian和Gradient-based One-Side Sampling (GOSS):
GOSS的核心思想是:梯度大的样本对信息增益贡献更大,应该被保留;梯度小的样本已经被很好地训练,可以进行采样。
算法流程:
| 计算所有样本的梯度绝对值:$ | g_i | $ |
| 根据 $ | g_i | $ 降序排序样本 |
信息增益估计: \(\tilde{V}_j(d) = \frac{1}{n} \left( \frac{(\sum_{x_i \in A_l} g_i + \frac{1-a}{b} \sum_{x_i \in B_l} g_i)^2}{n_l^j(d)} + \frac{(\sum_{x_i \in A_r} g_i + \frac{1-a}{b} \sum_{x_i \in B_r} g_i)^2}{n_r^j(d)} \right)\)
Exclusive Feature Bundling (EFB):
EFB利用高维数据的稀疏性,将互斥特征捆绑以减少特征数量。
互斥特征识别(图着色问题):
Bundle合并算法:
特征A范围: [0, 10]
特征B范围: [0, 5]
合并策略: Bundle(A, B) = A + B * offset
其中 offset = max(A) + 1 = 11
示例:
特征A: [0, 1, 0, 2, 0, 3]
特征B: [1, 0, 2, 0, 0, 0]
捆绑后: [11, 1, 22, 2, 0, 3]
类别特征的最优分裂:
LightGBM对类别特征采用基于直方图的最优分裂算法:
这将类别特征的分裂复杂度从 $O(2^k)$ 降至 $O(k \log k)$。
在实际的信贷风控场景中,XGBoost和LightGBM的应用需要考虑业务特点、数据特征和监管要求。以下是基于大量实践总结的最佳实践。
特征工程优化:
在信贷场景中,XGBoost和LightGBM能自动处理多种数据挑战:
is_missing_feature_x频率编码: category_count / total_count
目标编码: mean(target | category) with smoothing
时序特征构造:
信贷数据具有强时序性,需要构造动态特征:
基础统计特征:
- 最近N天的交易金额均值/标准差/最大值
- 交易频率的变化趋势(环比、同比)
- 时间衰减加权统计:weight = exp(-λ * days_ago)
行为模式特征:
- 交易时间分布(工作日vs周末,白天vs夜晚)
- 商户类别分布的熵值(消费多样性)
- 异常交易检测(基于个人历史基线)
风险累积特征:
- 逾期次数的指数平滑
- 最近一次逾期距今天数
- 授信使用率的移动平均
样本权重与类别不平衡:
信贷违约率通常在1-5%,严重的类别不平衡需要特殊处理:
样本权重设置: \(w_i = \begin{cases} \frac{N_{total}}{2 \times N_{positive}}, & y_i = 1 \\ \frac{N_{total}}{2 \times N_{negative}}, & y_i = 0 \end{cases}\)
scale_pos_weight = sum(negative) / sum(positive)
is_unbalance = True # 自动平衡
# 或手动设置
class_weight = {0: 1.0, 1: 20.0}
模型融合策略:
三层Stacking架构:
Layer 1 (Base Models):
- XGBoost (保守参数,防过拟合)
- LightGBM (激进参数,捕捉复杂模式)
- CatBoost (处理类别特征)
- RandomForest (增加多样性)
Layer 2 (Meta Features):
- 各模型预测概率
- 模型间预测差异度
- 预测置信度(基于叶子节点样本数)
Layer 3 (Meta Learner):
- Logistic Regression with L2
- 或简单平均(线上稳定性好)
最终集成:
weighted_average with bayesian optimization
超参数调优框架:
分阶段调优策略:
# XGBoost
params_stage1 = {
'max_depth': [3, 5, 7, 9],
'min_child_weight': [1, 3, 5],
'gamma': [0, 0.1, 0.2]
}
# LightGBM
params_stage1 = {
'num_leaves': [31, 63, 127],
'min_data_in_leaf': [20, 50, 100],
'min_sum_hessian_in_leaf': [0.001, 0.01, 0.1]
}
params_stage2 = {
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0],
'colsample_bylevel': [0.6, 0.8, 1.0] # XGBoost
}
params_stage3 = {
'reg_alpha': [0, 0.01, 0.1, 1], # L1
'reg_lambda': [0, 0.01, 0.1, 1] # L2
}
# 使用早停策略
learning_rate = 0.01
n_estimators = 10000
early_stopping_rounds = 100
监控指标选择:
金融风控需要平衡多个业务指标:
生产部署考虑:
predict_leaf_index预计算,查表获取结果深度学习在信贷风控中的应用正在快速增长,特别是在处理高维稀疏特征和复杂模式识别方面展现出独特优势。
基础架构设计:
输入层 (原始特征)
↓
嵌入层 (类别特征编码)
↓
特征交互层 (Cross Network)
↓
深度网络 (DNN)
↓
输出层 (违约概率)
损失函数设计:
对于类别不平衡的信贷数据,使用加权交叉熵:
\[L = -\frac{1}{N} \sum_{i=1}^N [w_1 y_i \log(\hat{y}_i) + w_0 (1-y_i) \log(1-\hat{y}_i)]\]其中 $w_1 = \frac{N}{2N_1}$, $w_0 = \frac{N}{2N_0}$ 自动平衡正负样本。
Focal Loss改进:
针对困难样本的学习:
\[FL(p_t) = -\alpha_t (1-p_t)^\gamma \log(p_t)\]其中:
Entity Embedding原理:
将高基数类别特征映射到低维连续空间:
\[e_i = W_{embed} \cdot onehot(c_i) + b_{embed}\]| 其中 $W_{embed} \in \mathbb{R}^{d \times | C | }$,$d$ 是嵌入维度,$ | C | $ 是类别数。 |
嵌入维度选择:
| 经验公式:$d = \min(50, \lceil | C | ^{0.25} \times 1.6 \rceil)$ |
示例映射:
商户类别ID: 10234 → [0.23, -0.45, 0.67, ..., 0.12] (d=16)
地区编码: "310000" → [0.89, 0.34, -0.21, ..., 0.56] (d=8)
多值类别特征处理:
对于用户的历史商户类别序列:
\[e_{multi} = \frac{1}{|S|} \sum_{c \in S} W_{embed}[c]\]或使用注意力加权:
\[e_{multi} = \sum_{c \in S} \alpha_c \cdot W_{embed}[c]\]其中 $\alpha_c = \frac{\exp(f_{att}(W_{embed}[c]))}{\sum_{c’ \in S} \exp(f_{att}(W_{embed}[c’]))}$
Self-Attention用于交易序列建模:
给定用户的交易序列 $X = [x_1, x_2, …, x_T]$,计算注意力权重:
\[Attention(Q,K,V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]其中:
多头注意力机制:
\[MultiHead(Q,K,V) = Concat(head_1, ..., head_h)W_O\] \[head_i = Attention(QW_Q^i, KW_K^i, VW_V^i)\]应用场景:
架构设计:
Wide Component (线性模型):
- 记忆历史模式
- 处理稀疏特征交叉
Deep Component (DNN):
- 泛化到未见模式
- 学习特征表示
联合训练:
P(Y=1|x) = σ(w_{wide}^T[x, φ(x)] + w_{deep}^T a^{(l_f)} + b)
特征交叉设计:
二阶特征交叉: \(\phi_k(x) = \prod_{i=1}^d x_i^{c_{ki}}\)
其中 $c_{ki} \in {0,1}$ 表示第 $i$ 个特征是否参与第 $k$ 个交叉。
训练策略:
金融风险具有强烈的网络传导特性,图神经网络(GNN)为识别担保圈、资金链等关联风险提供了强大工具。
图构建方法:
金融实体关系图 $G = (V, E, X, E_{feat})$:
| $X \in \mathbb{R}^{ | V | \times d}$:节点特征矩阵 |
邻接矩阵构建:
担保关系矩阵 A_guarantee:
A[i,j] = 担保金额(i→j) / 总资产(i)
资金流动矩阵 A_transfer:
A[i,j] = Σ转账金额(i→j,t) × exp(-λ(T-t))
综合关系矩阵:
A = α·A_guarantee + β·A_transfer + γ·A_equity
Graph Convolutional Network (GCN):
节点表示更新: \(H^{(l+1)} = \sigma(\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}H^{(l)}W^{(l)})\)
其中:
GraphSAGE聚合器:
AGGREGATE函数选择:
1. Mean: h_v^{(k)} = σ(W·MEAN({h_v^{(k-1)}} ∪ {h_u^{(k-1)}, ∀u ∈ N(v)}))
2. LSTM: 按随机顺序处理邻居
3. Pooling: element-wise max/mean pooling
担保圈检测算法: