返回列表

11th Place Solution: AutoGluon with Two-Feature-Set Blending

664. Playground Series - Season 5, Episode 8 | playground-series-s5e8

开始: 2025-08-01 结束: 2025-08-31 信贷风控 数据算法赛
第 11 名解决方案:AutoGluon 双特征集融合

第 11 名解决方案:AutoGluon 双特征集融合

作者: jmkim1503
发布时间: 2025-09-01
竞赛排名: 第 11 名

我第一次真正参加 Kaggle 竞赛的实验、错误与学习之旅

这是我第一次认真尝试 Kaggle 竞赛,通过特征工程实验不同的特征集,我学到了很多。
最终,我得到了两个不同的特征工程 pipeline,并使用 AutoGluon 融合了它们的预测结果。

我的解决方案的整体架构如下所示:
解决方案架构图

基于 EDA 的特征工程

我使用简单的 CatBoost 模型和 5 折交叉验证 (CV) 测试了每个特征工程的想法:

  • 分位数变换 (Quantile transformation)
  • qcut (分箱)
  • 来自天/金额列的二值特征 (例如,pdays_exist, balance_exist)
  • 天列分箱:分组为范围,如 >0, >=7, >=30, >=90, >=180, >=365
  • 天/金额列的除与取模 (div & mod):创建循环或周期模式 (例如,除法后的余数)
  • 算术特征生成:比率、差值、总和
  • 数值 → 类别转换
  • 对数变换 (Log-transform)
  • 目标编码 (Target encoding)

数值转类别特征及失误

我最关注的特征是数值转类别转换。许多其他参赛者 simply 将数值特征转换为类别特征,我注意到这个简单的步骤可以大幅提升性能(使用简单的 CatBoost 从 0.965 提升到 0.972)。
所以我尝试逐个对特征进行分类,结果如下:
特征分类结果

两个特征被证明具有最显著的影响。它们的分布都很广泛,所以我假设它们可能受到某些周期模式或特定值的影响。
当我按值对这些特征进行分组并统计目标值时,我发现某些值的样本量比邻近值大得多,在某些情况下,目标值全为 0 或全为 1。

基于此,我创建了一个新特征,根据目标分布分配标签(例如,全 1 目标 → 1,全 0 目标 → 0,混合 → -1),这提高了性能。(它未用于最终特征集,但我仅用于验证目的进行了测试)

起初,我认为这种分类可能只在 CV 或公开排行榜上表现良好,因此作为替代方案,我还尝试使用商和余数变换来捕捉周期性。然而,事实证明,即使在私有排行榜上,类别转换也是有效的。回顾过去,我认为这个错误的假设阻止我运行更多可能进一步改进解决方案的实验。

建模与超参数调优 -> AutoGluon

起初,我使用了三种类型的模型:XGBoost、LightGBM 和 CatBoost。我从它们的默认参数开始,然后使用 Optuna 进行超参数调优。对于初始化,我要么使用 ChatGPT 的参数建议,要么从其他 notebook 借用参数,然后用 Optuna 进行微调。

之后,我通过结合不同的特征集和不同的超参数构建了多个模型,最后使用元模型和爬山法 (hill climbing) 对它们进行集成。

在调整超参数时,我觉得性能并没有像我预期的那样容易提升。那时,我决定尝试 AutoML 并 switched 到 AutoGluon。我对它的预定义超参数设置和分布式训练的简便性印象深刻。

我从 5 折、1 个特征集、1 个堆叠层和中等质量(表示为 5,1,1,medium)的配置开始,后来扩展到 (10,2,2,medium) 和 (8,2,2,best)。

最终提交

对于其中一个提交,我选择了 (8,2,2,best) 设置。为了进一步测试分类的有效性,我创建了一个新的特征集,从原始集中移除了一些特征并添加了目标编码和类别转换,然后再次使用 (8,2,2,best) 配置进行训练。

最后,我融合了特征集 1 和特征集 2。然而,由于 AutoGluon 的推理时间非常长,而且时间紧迫,我无法进行基于 CV 的融合,不得不采用盲融合 (blind blending)。讽刺的是,这种盲融合给了我最好的性能。

结果

方法 CV 分数 公开榜 私有榜
基础特征集 (特征集 1) + CatBoost optuna 0.97441 0.97524 0.97510
基础特征集 (特征集 1) + LGBM optuna 0.97337 0.97422 0.97405
基础特征集 (特征集 1) + 融合 16 个模型 (爬山法) 0.97556 0.97612 0.97600
基础特征集 (特征集 1) + Autogluon(5,1,1,medium) 0.9758 0.97660 0.97646
基础特征集 (特征集 1) + Autogluon(5,1,1,best) 0.97601 0.97667 0.97659
基础特征集 (特征集 1) + Autogluon(10,2,2,medium) 0.97578 0.97636 0.97624
基础特征集 (特征集 1) + Autogluon(8,2,1,best) 0.97640 0.97688 0.97685
* 基础特征集 (特征集 1) + Autogluon(8,2,2,best) 0.97647 0.97693 0.97687
类别特征集 (特征集 2) + Autogluon(8,2,2,best) 0.97689 0.97746 0.97704
* 盲融合 (0.5, 0.5)(特征集 1, 特征集 2) --- 0.97787 0.97766

我的收获

这次竞赛不仅给了我第一次尝试 AutoML 模型的机会,也让我重新审视了 EDA、特征工程、特征选择、超参数调优和集成学习。虽然我犯了一些错误也有一些遗憾,但我很幸运最终取得了一个不错的结果。我的下一步是将这次竞赛中学到的知识应用到我的工作中, aiming for 更好的结果。

同比赛其他方案