返回列表

Rank 4 approach - thoughtful model choices and effective ensembles

627. Playground Series - Season 4, Episode 10 | playground-series-s4e10

开始: 2024-09-30 结束: 2024-10-31 信贷风控 数据算法赛
第 4 名方案 - 深思熟虑的模型选择与有效的集成

第 4 名方案 - 深思熟虑的模型选择与有效的集成

作者: Ravi Ramakrishnan (Grandmaster)
发布日期: 2024-11-01
竞赛排名: 4

大家好,

感谢 Kaggle 带来了一场精彩的 Playground 系列分类任务 episode!我也想向本月所有参赛者和论坛贡献者致以诚挚的感谢,感谢他们的精彩贡献。我还要感谢社区如此很好地接纳了我的成果文件!请在下方找到我在本次竞赛中的方法及相关撰写报告 -

方法概述

我在本次竞赛中的整体方法比最近几期的 Playground 系列要简单,因为我依赖的特征数量较少,而在本期比赛中更多地依赖于深思熟虑的混合 (blending) 和堆叠 (stacking)。我认为较小的数据量可能会增加过拟合的几率,因此保留了一种简单的方法,使用提升树 (boosted tree) 和神经网络 (NN) 模型选项,不进行盲目混合,并仔细考虑数据泄露和交叉验证 (CV) 方案分析

我在本次挑战中使用了一个简单的分层 10 折交叉验证 (Stratified 10-fold CV) 方案,随机种子 (random state) = 42,并在所有模型中统一保留此方案。

我所选提交方案的整体方法如下图所示 -

方法流程图


我在本次竞赛中的时间管理如下 -

  1. 考虑单个模型 - 比如 Catboost。使用该模型尝试多种特征和参数,直到我对使用该模型进行的信号提取感到满意为止。
  2. 转向下一个模型,比如 LGBM。在各种特征集上重复此过程,直到我对结果有信心/时间用完为止。
  3. 对不同算法(单个模型)重复此过程,直到最后一周。
  4. 考虑基于单个模型的最佳 CV 结果的各种混合和堆叠选项。
  5. 根据 CV 分数做出最终提交选择。

我想特别感谢这个 Kernel - 它在最后冲刺排行榜阶段对我帮助很大。
我的另一个提交完全是我自己的作品,不包括公共 Kernel 的成果文件。我相信我在竞赛中的贡献,希望我的作品能脱颖而出,我很高兴我的信念确实实现了!两个提交的 CV 与排行榜 (LB) 关系如下 -

提交详情 CV
10 折分层 K 折
公共排行榜 私有排行榜
我的独立工作 + 公共工作 - 与 torch NN 堆叠 0.97002 0.97393 0.96902
我的独立工作,不含公共工作 0.969954 0.97353 0.96899


特征集与特征工程

我在特征库中依赖了 5 个特征集,类似于我的 TPS-2024 年 7 月 流程。我设计了一系列特征,包括大量暴力生成的二次特征和不同的模型参数,但没有什么比使用所有字符串值的简单 Catboost 模型更有效。我推测这个数据集的设计方式可能不适合二次特征。我在所有特征集中都使用了原始数据

根据 CV 分数,我最终从 5 个集合中使用了 3 个特征集,并尽可能选择了多样化的模型与神经网络进行堆叠。我丢弃了具有 50+ 特征的特征集,因为 CV 结果一点也不令人鼓舞。在窥探了我单个模型的私有分数后,我很高兴我拒绝了所述特征并依赖于 simplicity。我选择的特征集包含 15-25 个特征,所有特征都是通过对现有特征进行简单操作创建的,没有数据泄露

无效的方法

  1. Autogluon 模型
  2. Xgboost - 我使用了公共作品中提出的 XgBoost,但我的私有 XgBoost 模型在 LB 上总是失败
  3. 线性模型,如逻辑回归 (Logistic Regression)
  4. 随机森林 (Random Forest)
  5. KNN

我的操作方法与关键收获

我想很多初学者会阅读这篇帖子,因此希望单独添加一节关于我在此系列中提交作品的看法 -

  1. 花时间进行第一次真正有意义的提交 - 首先构建一个流水线 (pipeline) 并确保它运行良好。这对于整个月的平滑实验过程非常重要。
  2. 你可以考虑我的 公共成果文件 作为基础模型 - 我高度简化了流程以去除笨拙的元素,并保留和发展了一个模块化结构以方便使用。这有助于我有效且轻松地管理模型。
  3. 始终保存拟合模型、OOF 分数和测试集分数,并使用适当的命名规范。这将在以后混合和融合模型时对你有很大帮助。
  4. CV 方案是成功的公开秘密 - 忽略任何没有适当 CV 支持和理由的内容
  5. 不要依赖公共材料而不测试它们与你流程的兼容性 - 这对于你很好地泛化模型至关重要。我鼓励一个人在你的独立工作中使用公共 Kernel 中分享的想法。
  6. 好好组队,一起学习 - 我们在这里首先是为了学习,然后才是结果。
  7. 一个组织良好的 GitHub 仓库是一个很好的补充 - 请考虑为你的工作创建一个仓库,并将你的代码和成果文件放在那里。这将极大地帮助你在各种竞赛中。
  8. dwell on 你在某一 episode 中的错误,并在继续之前先从中学习 - 这是一个长期的学习过程,可能会在未来的 episode 中改善你
  9. 切勿盲目混合公共 Kernel - 这几乎肯定会失败。

结语

我衷心祝愿大家排灯节 (Diwali) 快乐,希望这个光明和欢乐的节日能为你们在 Kaggle 和其他生活领域带来很多幸福!
在该系列的下一期节目中见到大家,祝一切顺利!

此致,
Ravi Ramakrishnan

同比赛其他方案