← 返回题目列表

XGBoost 如何处理缺失值?

中等 第 25 / 25 题 更新于 2026/09/19
集成学习机器学习面试题模型训练

简化版

XGBoost 在每个候选切分中学习缺失值的默认方向:分别尝试缺失样本走左或右,选择增益更高者;预测遇到 NaN 就沿保存方向走。它不是先用均值填补,缺失模式变化时默认方向也可能失效。

详细版

  • 稀疏感知算法只遍历非缺失值并同时评估默认方向。

  • 缺失本身可携带信号,但这不代表因果合理。

  • 数值 0 是否被当缺失取决于数据格式与 missing 配置。

  • 训练和线上缺失表示必须一致,避免 NaN、空串、哨兵值混用。

  • 缺失率和默认路由比例应按特征监控。

完整版教学

一、默认方向也是切分参数的一部分

对阈值切分,非缺失样本按大小分流,缺失样本没有比较结果。

XGBoost 将“缺失全走左”和“缺失全走右”都计入增益搜索。

所选方向是当前节点、当前训练分布下最优,因此同一特征在不同节点可能有不同默认方向。

二、底层机制与公式

gain_left_missing = gain(L + M, R)
gain_right_missing = gain(L, R + M)
default = argmax(gain_left_missing, gain_right_missing)

三、带数字的推演

某节点非缺失切分后左/右各 40 个,另有 20 个缺失。

缺失走左增益 12,走右增益 8,则保存左为默认;线上 NaN 不做均值比较,直接进入左子树。

四、方案对比

方案/对象核心特点代价或边界
原生默认方向无需预填补依赖训练缺失机制
统计插补流水线通用需防泄漏并加指示器
单独缺失分支语义直观结构与实现成本更高

五、执行流程

统一缺失编码 -> 训练节点同时搜索阈值和默认方向
-> 保存方向 -> 验证缺失/非缺失切片 -> 上线监控缺失率和路由

六、边界条件与工程代价

用 -999 表示缺失却未配置为 missing,模型会把它当极小真实值参与阈值,行为与原生 NaN 路由不同。

若线上采集故障使缺失率从 2% 变 40%,模型会把大量请求送入训练时很少使用的路径,必须触发数据质量告警。

记忆钩子:缺失值不参与大小比较,而是让左右两边各试一次,收益高的一边成为本节点默认路。

七、常见误区与追问

  • 误区:XGBoost 自动用均值填补缺失。 它通常学习节点级默认方向。

  • 追问:默认方向怎么选? 比较缺失整体走左或右的切分增益。

  • 误区:0 一定会被当成缺失。 取决于稀疏表示和 missing 参数。

  • 追问:同一特征默认方向固定吗? 不同节点可学习不同方向。

  • 追问:如何上线验收? 分别评估缺失切片并监控缺失率与路由占比。

八、加强记忆

缺失值不参与大小比较,而是让左右两边各试一次,收益高的一边成为本节点默认路。

这个规则依赖训练缺失机制,必须监控漂移。