真实面经题目 · 原创解析
如何用 XGBoost 处理不平衡分类问题?
用 XGBoost 处理不平衡分类,要同时调整训练目标、样本权重、采样策略、评估指标和阈值。面试回答不能只说调 `scale_pos_weight`,还要说明为什么 accuracy 不可靠,以及如何用 PR-AUC、Recall、F1 和业务成本验证。
真实面经题目 · 原创解析
用 XGBoost 处理不平衡分类,要同时调整训练目标、样本权重、采样策略、评估指标和阈值。面试回答不能只说调 `scale_pos_weight`,还要说明为什么 accuracy 不可靠,以及如何用 PR-AUC、Recall、F1 和业务成本验证。
我会先确认不平衡程度和误判成本,然后从五个方面处理:第一,设置 `scale_pos_weight` 或样本权重,让少数类错误在损失里更重要;第二,做过采样、欠采样或分层采样,但要防止过拟合和信息泄漏;第三,选择更合适的指标,比如 PR-AUC、Recall、F1、混淆矩阵和业务收益;第四,训练后调整分类阈值,而不是固定 0.5;第五,做分桶和交叉验证,检查模型是否只在多数类上表现好。
不平衡分类的处理方式取决于正负样本比例和业务代价。欺诈、风控、召回等场景中漏判和误判成本不同,指标选择和阈值策略不能只按整体准确率来定。
XGBoost 可以用 `scale_pos_weight` 或样本权重提高少数类的重要性,让模型在分裂和叶子权重计算时更关注少数类错误。常见初始值是负样本数除以正样本数,再通过验证集调优。
可以对少数类过采样、对多数类欠采样,或使用分层采样保持验证集分布稳定。采样只能在训练集内部做,不能把验证集或未来数据的信息带入训练过程。
不平衡场景下 accuracy 容易虚高。更应关注 PR-AUC、Recall、Precision、F1、ROC-AUC、混淆矩阵和业务成本曲线。模型输出概率后,还需要按业务目标选择阈值。
少数类样本通常更少、更噪,需要交叉验证、时间切分和分桶分析。还要观察特征漂移、概率校准和不同人群下的召回,避免模型只记住少数类训练样本。
可以用负样本数除以正样本数作为初始值,再在验证集上结合 PR-AUC、Recall、Precision 和业务成本调优。
如果负样本占 99%,模型全预测负类也有 99% accuracy,但对少数类完全没有识别能力,所以要看少数类相关指标。
简单复制少数类样本可能让模型记忆噪声,导致过拟合。需要配合交叉验证、数据增强或更稳的采样策略。