返回列表

5th Place Solution - (XGB+LGBM+TabM)*5SEEDs+AG

678. Playground Series - Season 5, Episode 11 | playground-series-s5e11

开始: 2025-11-01 结束: 2025-11-30 信贷风控 数据算法赛
第 5 名解决方案 - (XGB+LGBM+TabM)*5SEEDs+AG

第 5 名解决方案 - (XGB+LGBM+TabM)*5SEEDs+AG

副标题:3 模型 + AG 的岭回归集成

作者: Masaya Kawamata
发布时间: 2025-12-01
竞赛排名: 第 5 名

首先,热烈祝贺 @mahoganybuttstrings 获得第 1 名!
同时,感谢大家在整个月份中提供的富有洞察力的讨论和 Notebook。通过与你们所有人的互动,我学到了很多。

在这次比赛中,我觉得特征工程扮演的角色比其他任何因素都更重要。我的解决方案包含一个有效的特征集,用于训练 XGBoost、LightGBM 和 TabM(各 5 个种子),并使用岭回归将 AutoGluon 的 OOF/测试预测进行混合。

分数概览

模型 CV 公共榜 私有榜
LGBM 0.92798 0.92795 0.92908
XGB 0.92790 0.92799 0.92908
TabM 0.92785 0.92779 0.92888
岭回归堆叠 0.92803 0.92800 0.92911
+AG (最终) 0.92805 0.92800 0.92912

特征工程

我的大部分特征工程想法基于 @cdeotte 过去的解决方案。谢谢!

  1. 数字特征 (DIGIT Features): 创建了新特征,从数值列的所有位置提取数字。
  2. 舍入/分箱特征 (ROUND/BIN Features): 通过舍入或分箱数值列创建特征。
  3. 交互特征 (Interaction Features): 在我的公开 Notebook 中,我只创建了原始特征 (BASE) 的交互项。然而,对于最终解决方案,我在 DIGIT_CATS 内部以及源自同一数值特征的数字之间添加了 2 路、3 路和 4 路交互。
  4. 原始特征 (ORIG Features): 引入均值编码 (Mean Encoding) 和计数编码 (Count Encoding) 以捕捉原始数据中的信号。

特征选择

由于生成的特征可能包含噪声,我进行了轻量级的特征选择。

  • 方法: 我将特征一个一个地添加到 BASE 特征中。如果准确率优于基线,我就选择它;否则 discard 它。
  • 验证: 由于计算成本,我使用了 train_test_split (test_size=0.2) 而不是 K-Fold 来进行此选择过程。

虽然这种方法可能仍然保留了一些冗余特征,但由于时间和计算资源的限制,我没有进行进一步的选择。我假设 GBDT 模型足够稳健,可以处理一定量的噪声。
(我也尝试使用 Optuna 优化 top-n 特征重要性,但没能使其有效工作。)

使用 Optuna 进行超参数调优

我使用 Optuna 对 XGB、LGBM 和 TabM 进行了参数调优。

  • XGB & LGBM: 5 折交叉验证 (5-fold CV)
  • TabM: train_test_split (test_size=0.2)

种子平均与岭回归堆叠

我对 XGB、LGBM 和 TabM 进行了5 种子平均
主要原因是为了稳定预测和验证分数。由于仅仅改变种子验证分数就会轻微波动,我决定不依赖单种子验证。

我使用 OOF 和测试预测通过岭回归 (Ridge Regression) 计算最终预测。

  • 为什么选择岭回归? 我没有花足够多的时间创建多样化的 OOF 以受益于非线性堆叠器(如 MLP 或 XGBoost)。我的时间集中在构建一个强大的特征集上。在这种情况下,使用 XGB 或 MLP 进行堆叠往往会导致过拟合。因此,我选择了像岭回归这样的线性模型,以优先考虑稳定性而不是激进的准确率增益。

数据生成器 Notebook

遵循 @greysky 在 Podcast 竞赛中的方法,我创建了一个数据生成器 Notebook。
在我的实现中,由于我想使用 5 折平均来计算 test_pred,我需要为每一折创建数据集(特别是对于目标编码 Target Encoding)。
随着 TE 特征数量的增加,每折 TE 所需的时间也增加了。通过预生成并简单加载数据,我显著提高了 Optuna 调优和多种子训练的效率。

  • 关于全量数据: 我没有在全量数据 (FULL DATA) 上训练,因为在我早期的实验中,公共分数始终低于折平均分数。由于本次比赛中 CV 与 LB 的相关性非常好,我决定相信我的 CV,并避免了全量数据训练。

被弃用的模型: 我还使用相同的特征集实现了 CatBoost、xRFM 和 RealMLP。然而,它们的准确率不如 LGBM/XGB/TabM,对集成贡献不大,因此被排除在外。(尽管如果更彻底地调优,xRFM 和 RealMLP 可能具有潜力)。

感谢阅读。快乐 Kaggle,相信你的 CV!

同比赛其他方案