2. XGBoost 算法原理回顾:决策树与集成学习、目标函数与正则化、分裂增益计算、与GBDT的异同
在构建实时风控模型时,XGBoost 凭借其高精度与工程优化成为业界首选。本章从算法原理出发,回顾其核心组件:决策树集成、带正则化的目标函数、分裂增益计算,以及与 GBDT 的关键差异。
2.1 决策树与集成学习
XGBoost 基于 决策树 的 集成学习 思想,通过组合多个弱学习器(CART 回归树)来提升预测能力。其核心是 Boosting 策略:逐轮训练新树,拟合前一轮的残差。
集成学习核心公式:
ŷᵢ = Σₖ₌₁ᴷ fₖ(xᵢ),其中 fₖ 是第 k 棵树的输出,K 为树的总数。
每棵树将样本划分到不同叶子节点,每个叶子节点赋予一个连续的权重分数(而非分类标签),最终将所有树的分数累加得到预测值。
2.2 XGBoost 的目标函数与正则化
XGBoost 的优化目标不仅关注损失函数,还引入了 正则化项 控制模型复杂度,防止过拟合。
目标函数:
其中
Obj = Σᵢ₌₁ⁿ L(yᵢ, ŷᵢ) + Σₖ₌₁ᴷ Ω(fₖ)其中
L 为损失函数(如平方损失、LogLoss),Ω 为正则化项。
正则化项 Ω(f) 定义如下:
Ω(f) = γT + (1/2)λ Σⱼ₌₁ᵀ wⱼ² + α Σⱼ₌₁ᵀ |wⱼ|
| 参数 | 含义 | 作用 |
|---|---|---|
γ (gamma) |
叶子节点数 T 的惩罚系数 | 控制树的生长,γ 越大树越简单 |
λ (lambda) |
L2 正则化系数 | 平滑叶子权重,防止过拟合 |
α (alpha) |
L1 正则化系数 | 产生稀疏解,特征选择 |
通过二阶泰勒展开近似损失函数,XGBoost 能高效求解最优叶子权重和分裂增益。
2.3 分裂增益计算
XGBoost 使用 精确贪心算法 寻找最佳分裂点。分裂增益公式基于二阶导数信息,比 GBDT 的一阶方法更精确。
分裂增益公式:
其中 G 为一阶梯度之和,H 为二阶梯度之和。
Gain = (1/2) [ Gₗ²/(Hₗ + λ) + Gᵣ²/(Hᵣ + λ) - (Gₗ + Gᵣ)²/(Hₗ + Hᵣ + λ) ] - γ其中 G 为一阶梯度之和,H 为二阶梯度之和。
分裂过程:
- 对每个特征,按特征值排序。
- 从左到右扫描,计算左右子节点的 G 和 H。
- 代入公式计算 Gain,选择 Gain 最大的分裂点。
- 若 Gain ≤ 0,则停止分裂(γ 起到预剪枝作用)。
2.4 XGBoost 与 GBDT 的异同
XGBoost 在 GBDT 基础上做了大量工程与算法优化,下表总结了核心差异:
| 对比维度 | GBDT | XGBoost |
|---|---|---|
| 损失函数近似 | 一阶泰勒展开(梯度) | 二阶泰勒展开(梯度 + 海森矩阵) |
| 正则化 | 无显式正则化 | L1/L2 正则化 + 叶子节点数惩罚 γ |
| 分裂增益 | 基于一阶梯度 | 基于一阶 + 二阶梯度,更精确 |
| 缺失值处理 | 需手动填充 | 自动学习缺失值分裂方向 |
| 列抽样 | 不支持 | 支持,类似 Random Forest |
| 并行化 | 树间串行,树内可并行 | 树间串行,树内并行(特征排序 + 分块) |
| 缓存感知 | 无 | 缓存块结构,提升内存访问效率 |
风控实战要点: XGBoost 的二阶近似和正则化使其在风控场景中泛化能力更强,尤其适合处理高维稀疏特征和缺失值较多的用户行为数据。列抽样进一步降低了过拟合风险。
2.5 小结
XGBoost 通过集成决策树、二阶泰勒展开、正则化目标函数和高效分裂增益计算,在精度与速度上超越了传统 GBDT。这些原理是后续在线 Serving 和实时风控特征工程的基础。