使用 xgboost 处理极度不平衡

问题描述

我的训练数据具有 100 个特征的极不平衡的 {0:872525,1:3335}。我使用 xgboost 构建带有贝叶斯优化的分类模型,以在 {learning rate:(0.001,0.1),min_split_loss:(0.10),max_depth:(3,70),min_child_weight:(1:20),max_delta_step 范围内对模型进行超调: (1,20),subsample:(0:1),colsample_bytree:(0.5,1),lambda:(0,10),alpha:(0,scale_pos_weight:(1,262),n_estimator:(1,20 )}。 我还使用 binary:logistics 作为目标模型,使用 roc_auc 作为带有 booster gbtree 的指标。 交叉验证得分为 82.5%。 但是,当我将模型实施到测试数据时,我只得到了分数 Roc_auc:75.2%,pr_auc:15%,log_loss:0.046,混淆矩阵:[[19300 7],[103 14]]。 我需要帮助找到将真阳性提高到 60% 左右的最佳方法,同时容忍假阳性直到实际阳性的 3 倍。

解决方法

您提到您的数据集非常不平衡。

我建议您查看 imblearn,它是“一个 Python 包,提供了许多重采样技术,这些技术常用于数据集中,显示出严重的类间不平衡。”例如,这些技术包括过采样和欠采样。

库的完整文档和示例是 here

如果您在公司中处理此数据集 - 您还可以调查获取更多数据或使用规则/启发式修剪数据集。