[第 7 名解决方案] 树模型 + 神经网络集成
[第 7 名解决方案] 树模型 + 神经网络集成
作者: gezi (GRANDMASTER)
发布时间: 2024-12-03
竞赛排名: 7
-
交叉验证 (CV)
嗯,因为对我来说,有时使用 Game 进行 GKF 交叉验证与 LB 更一致,有时使用 GamerulesetName 更好。我有点困惑,在最后几天我坚持使用 GKF + Game + 标签分层 (stratify with label),因为我认为测试集中新游戏占主导 (new Game dominate),但这可能是一个错误的决定,因为 PB 显示我使用此 CV 的最终集成权重完全不起作用。
-
数据增强 (Data aug)
像其他团队一样,我最初也使用了翻转增强 (flip aug)(交换 agent1 agent2, advantageP1, label),结果显示 LB 提高了约 0.01。
我还通过使用组合翻转数据进行了测试时增强 (TTA)。
-
树模型 (Tree models)
对我来说,树模型比神经网络效果更好,且树模型结果在 LB 上稳定得多。
树模型表现良好的关键在于使用:
-
数值特征的手动交叉特征 (manual cross feats of numerical feats),如前 20 个数值特征的 * / 运算。
这极大地改善了 CV 和 LB,使用前 5、10、15 直到 20 个特征持续改善,但更多的交叉如前 25 * 25 会损害 LB。
- 目标编码 (Target encode) 帮助 LB 提高 0.001
- 让树更深,对于 LGB 我用了 16,对于 CBT 我用了 10。
- 为避免过拟合,将 reg lambda 设高,如 10,将 CBT 的 random strength 设高,如 10。
- LGB 的 Dart 模式改善了 CV 但损害了 LB,我的 CV GKF + Game 在这里可能不正确。嗯,相信 LB...
-
树模型结果:
LGB 单模型 10 折 LB 419 PB 425
CBT 单模型 5 折 LB 422 PB 428。上周我付出了很多努力改进 CBT 模型,但它对最终 PB 没有贡献。
嗯,简单的 LGB + CBT 集成仅将 LB 提高了不到 0.001,但未改善 PB。
-
神经网络模型 (NN models)
参考了这个伟大的 notebook:https://www.kaggle.com/code/yekenot/mcts-deeptables-nn
我使用 PyTorch 实现了 NN 模型,将顶部数值特征转为分箱 (bins),并添加了 LGB 树叶子特征 (depth 5, 200 trees)。
还在 pooling 层使用了 CIN + FM,并对 NN 模型使用了标签增强 (label aug, multinomal)。
然而 NN 模型在 LB 上不稳定,且在 CV (GKF + Game) 上表现更差。
幸运地是我有一个 5 折 NN 模型,LB 419 PB 427。注意由于随机性,NN 模型通常 LB 约为 423,但由于 LB 和 PB 一致,你只需使用最好的 LB NN 模型。
-
后处理 (Post deal)
优化 OOF a * x + b 以最小化整体 RMSE
-
集成 (Ensemble)
我最好的 LB 416 PB 423 模型是 LGB(10 折) + NN (5 折) 的简单混合 (blend),权重为 1, 0.75。
如果有更多时间,我会尝试切换回使用 GKF + Gamerulesetname 的 CV,测试 CV + LB,并尝试使用 OOF 方法进行 stacking。