2. XGBoost 算法原理回顾:决策树与集成学习、目标函数与正则化、分裂增益计算、与GBDT的异同

在构建实时风控模型时,XGBoost 凭借其高精度与工程优化成为业界首选。本章从算法原理出发,回顾其核心组件:决策树集成、带正则化的目标函数、分裂增益计算,以及与 GBDT 的关键差异。

2.1 决策树与集成学习

XGBoost 基于 决策树 的 集成学习 思想,通过组合多个弱学习器(CART 回归树)来提升预测能力。其核心是 Boosting 策略:逐轮训练新树,拟合前一轮的残差。

集成学习核心公式:
ŷᵢ = Σₖ₌₁ᴷ fₖ(xᵢ),其中 fₖ 是第 k 棵树的输出,K 为树的总数。

每棵树将样本划分到不同叶子节点,每个叶子节点赋予一个连续的权重分数(而非分类标签),最终将所有树的分数累加得到预测值。

Boosting 集成学习流程 训练数据 树 1 拟合残差 树 2 拟合残差 树 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 的一阶方法更精确。

分裂增益公式:
Gain = (1/2) [ Gₗ²/(Hₗ + λ) + Gᵣ²/(Hᵣ + λ) - (Gₗ + Gᵣ)²/(Hₗ + Hᵣ + λ) ] - γ
其中 G 为一阶梯度之和,H 为二阶梯度之和。

分裂过程:

  1. 对每个特征,按特征值排序。
  2. 从左到右扫描,计算左右子节点的 G 和 H。
  3. 代入公式计算 Gain,选择 Gain 最大的分裂点。
  4. 若 Gain ≤ 0,则停止分裂(γ 起到预剪枝作用)。
分裂增益计算示意 父节点 G = 10, H = 20 左子节点 Gₗ = 4, Hₗ = 8 右子节点 Gᵣ = 6, Hᵣ = 12 Gain = 0.5 × [ 4²/(8+1) + 6²/(12+1) - 10²/(20+1) ] - 0.1 = 0.5 × [ 1.78 + 2.77 - 4.76 ] - 0.1 = 0.5 × (-0.21) - 0.1 = -0.205 → 不分裂

2.4 XGBoost 与 GBDT 的异同

XGBoost 在 GBDT 基础上做了大量工程与算法优化,下表总结了核心差异:

对比维度 GBDT XGBoost
损失函数近似 一阶泰勒展开(梯度) 二阶泰勒展开(梯度 + 海森矩阵)
正则化 无显式正则化 L1/L2 正则化 + 叶子节点数惩罚 γ
分裂增益 基于一阶梯度 基于一阶 + 二阶梯度,更精确
缺失值处理 需手动填充 自动学习缺失值分裂方向
列抽样 不支持 支持,类似 Random Forest
并行化 树间串行,树内可并行 树间串行,树内并行(特征排序 + 分块)
缓存感知 无 缓存块结构,提升内存访问效率
风控实战要点: XGBoost 的二阶近似和正则化使其在风控场景中泛化能力更强,尤其适合处理高维稀疏特征和缺失值较多的用户行为数据。列抽样进一步降低了过拟合风险。

2.5 小结

XGBoost 通过集成决策树、二阶泰勒展开、正则化目标函数和高效分裂增益计算,在精度与速度上超越了传统 GBDT。这些原理是后续在线 Serving 和实时风控特征工程的基础。