真实面经题目 · 原创解析

如何用 XGBoost 处理不平衡分类问题?

用 XGBoost 处理不平衡分类,要同时调整训练目标、样本权重、采样策略、评估指标和阈值。面试回答不能只说调 `scale_pos_weight`,还要说明为什么 accuracy 不可靠,以及如何用 PR-AUC、Recall、F1 和业务成本验证。

出现于:滴滴 · 算法

60 秒回答模板

我会先确认不平衡程度和误判成本,然后从五个方面处理:第一,设置 `scale_pos_weight` 或样本权重,让少数类错误在损失里更重要;第二,做过采样、欠采样或分层采样,但要防止过拟合和信息泄漏;第三,选择更合适的指标,比如 PR-AUC、Recall、F1、混淆矩阵和业务收益;第四,训练后调整分类阈值,而不是固定 0.5;第五,做分桶和交叉验证,检查模型是否只在多数类上表现好。

考点 先看业务代价
难度 算法岗真实面经题
回答目标 讲清方法、取舍和追问

深入解析

01

先判断目标和成本

不平衡分类的处理方式取决于正负样本比例和业务代价。欺诈、风控、召回等场景中漏判和误判成本不同,指标选择和阈值策略不能只按整体准确率来定。

02

调整损失权重

XGBoost 可以用 `scale_pos_weight` 或样本权重提高少数类的重要性,让模型在分裂和叶子权重计算时更关注少数类错误。常见初始值是负样本数除以正样本数,再通过验证集调优。

03

采样和数据处理

可以对少数类过采样、对多数类欠采样,或使用分层采样保持验证集分布稳定。采样只能在训练集内部做,不能把验证集或未来数据的信息带入训练过程。

04

指标和阈值

不平衡场景下 accuracy 容易虚高。更应关注 PR-AUC、Recall、Precision、F1、ROC-AUC、混淆矩阵和业务成本曲线。模型输出概率后,还需要按业务目标选择阈值。

05

验证泛化能力

少数类样本通常更少、更噪,需要交叉验证、时间切分和分桶分析。还要观察特征漂移、概率校准和不同人群下的召回,避免模型只记住少数类训练样本。

易错点

  • 不要只说 `scale_pos_weight`,还要讲指标、阈值和验证方式。
  • 不要在全量数据上采样后再切验证集,这会引入信息泄漏。
  • 不要用 accuracy 判断效果,少数类可能完全没有被识别。
  • 不要固定 0.5 阈值,业务成本不同,最优阈值通常不同。

面试官追问

`scale_pos_weight` 一般怎么设置?

可以用负样本数除以正样本数作为初始值,再在验证集上结合 PR-AUC、Recall、Precision 和业务成本调优。

为什么不平衡数据下 accuracy 不可靠?

如果负样本占 99%,模型全预测负类也有 99% accuracy,但对少数类完全没有识别能力,所以要看少数类相关指标。

过采样有什么风险?

简单复制少数类样本可能让模型记忆噪声,导致过拟合。需要配合交叉验证、数据增强或更稳的采样策略。