简而言之,xgboost 试图修复它,虽然它在摆脱过度拟合方面非常好,但它并不完美。
添加新功能并不总是有益的,因为您增加了搜索空间的维度,从而使问题变得更加困难。在您的特定情况下,增加的复杂性超过了额外功能的附加值。
我知道您已经测试了相当广泛的超参数和足够的组合。如果您通过colsample_bytree和/或colsample_bylevel应用正则化,则可能在某个阶段随机选择的列(特征)的信息量低于原始特征,并且算法被迫使用这些特征进行进一步的拆分。这对你有意义吗?
添加功能的数量可能至关重要,如果相对于原来的 20 个功能太高,新功能就会变得太占优势。例如,如果添加一些具有高基数的名义特征,然后对这些特征进行虚拟编码,则可能会发生这种情况。
为了使用更广泛的数据改进结果,您可能希望使用控制早期停止的参数并更早地停止拟合。
编辑
我最后一个建议的基本原理是:我认为在更广泛的数据集上性能下降是由于过度拟合,即测试数据集上的性能明显低于训练数据上的性能。提前停止应该防止/控制过度拟合,但在你的情况下它似乎没有那么好,因此应该改进。
您可以而且应该测试新功能的不同组合,但值得信赖的质量指标对于模型选择至关重要。如果你显着过拟合,训练数据(甚至交叉验证)的性能将无法帮助你选择在测试数据集上性能良好的模型(或特征组合)。