我有一个附带项目,我正在使用 R 进行信用评分(训练数据的样本大小约为 16k,测试数据的样本大小约为 4k,还有另外两个 20k 数据批次用于超时验证),类别不平衡(BAD 的 3.5%)客户类型)。
我正在尝试制作各种模型以拥有足够的模型来制作合奏,但为此,让我们专注于其中一个,尤其是 XGBoost。
我阅读了很多关于如何解决过度拟合的文章,但我还没有找到任何关于如何在实践中一步一步地做到这一点的好资料。至于现在,我的两个最好的模型有:
训练数据的 AUC 为 0.8,保留集的 AUC 约为 0.799,超时批次的 AUC 约为 0.7355 和 0.7195。
训练时为 0.764 AUC,保持测试集上为 0.7785 AUC,两个超时批次上为 0.7285 AUC。
我担心的是超时批次的下降,因为我认为 0.05-0.08 下降是巨大的,这可能表明我所做的模型确实过度拟合并且不能很好地概括。澄清一下,当我调整模型时,我不知道那些过时的分数。
谁能分享一下检测过拟合的最佳实践是什么?这两个模型是否过度拟合,或者我只是恐慌,而这种性能下降是正常的?
我目前的管道一般看起来像这样:
数据清理
使用 xgboost 包从所有 2400 个可用功能中获取最佳 300 个功能的功能重要性。
移除高度相关的特征(0.75 截止值) - 剩下 123 个特征
训练/测试拆分 - 0.8 对 0.2 加上两个超时批次
使用嵌套 CV(外部 5 倍 CV)和内部循环中的超参数调整(内部 5 倍 CV)进行模型选择——所有这些都在 MLR 包中完成。
从我从嵌套 CV 获得的 5 个模型中,我选择了表现最好的一个(在训练和保持测试集中具有最接近的 AUC)
然后当我对模型感到满意时,我对过期模型进行了测试。
我如何以一种可以检测到过度拟合的方式改进我的管道?是否有任何步骤列表可以大致涵盖可以采取哪些措施来减少它?
另外,在高度不平衡的情况下,选择一个好的验证集意味着我只需要注意目标变量的正确分布吗?我也应该照顾其他事情吗?