返回列表

Rank 4 approach - lots of features, lots of simple models and a ridge blend!

649. Playground Series - Season 5, Episode 4 | playground-series-s5e4

开始: 2025-04-01 结束: 2025-04-30 音视频处理 数据算法赛
第 4 名方案 - 大量特征、大量简单模型和 Ridge 融合
作者: Ravi Ramakrishnan (Grandmaster)
排名: 第 4 名
发布日期: 2025-05-01
竞赛: Playground Series S5E4

排名第 4 的方案 - 大量特征、大量简单模型和 Ridge 融合!

大家好,

感谢 Kaggle 提供了一个 CV 与 LB 相关性良好的回归表格类任务!同时也感谢其他参赛者在论坛上的贡献!我很高兴在这里展示我获得第 4 名的解决方案,如下所示-

CV 方案

我使用了简单的 10 折交叉验证方案,如下所示-
Kfold(10, random_state = 42, shuffle = True)

整体模型设计

下图描述了我在这次竞赛中的整体模型工作 -

模型设计图

如上图所示,我选择了一个简单的流程,采用暴力特征工程,并将简单模型与 Ridge 回归进行融合。以下部分详细说明了该过程-

特征工程

  • 我选择了简单的交互特征,包括整个数据集中的二元组、三元组、4-gram、5-gram、6-gram 和 7-gram。我将数值列转换为字符串数据类型并将它们包含在交互中。
  • 我还使用了一些涉及数据中数值列的随机数值列整合。我还创建了一个特征,用于统计行中的空值数量,仅包含起始列。
  • 我丢弃了一些基数极低/准恒定的特征。不过这一步对 CV 没有显著影响。

模型训练

我在一个月内训练了 382 个单一模型,混合并提取了上述数据存储中的特征。我选择了一个简单的融合方案,涉及常见的提升树模型,包括 -

Xgboost

  • 在竞赛初期表现良好,当时特征存储中的特征较少。
  • 随着特征数量的增加,该模型训练时间变长,且 CV 得分不如 LGBM 理想。
  • 增加树深度被证明是对 CV-LB 提升有用的策略。
  • 整个过程中,0.005 - 0.0075 的学习率范围对我的模型效果最好。
  • 550-600 范围的早停轮数平衡了我的硬件限制与合适的模型。
  • 在 A6000 GPU 上训练模型是一次很好的体验。整个过程我使用了 128 GB RAM。

LightGBM

  • 最好的单一模型选择 - 我使用了 gbdt 和 goss 选项,两者单独表现都非常好。我前 10 名的单一模型都是 LGBM gbdt 和 goss 选项。
  • 树深度为 -1 是一个奇怪的选择,但也是一个好的选择。
  • 0.01 及以下的学习率是一个好的选择。
  • 调整更多参数被证明是性价比低的练习,所以我更喜欢手动调整参数并构建模型。
  • 我在 A6000 Ada 128 GB RAM 上训练了这些模型,结果很好。

Catboost

  • 在 CV 方案上表现不是特别好,但为集成提供了必要的多样性。
  • 随着特征集变宽,出现了内存问题,所以我仅在特征数量较少时使用此模型选项(< 350-400)。
  • 0.01 的学习率和 12 的树深度被证明是不错的选择。
  • 我更喜欢 A6000 GPU 和 256 GB RAM 用于这些模型。

Autogluon

  • 我利用单一树模型提取了特征重要性,并在大多数模型选项中反复筛选出 25-100 个重要特征。
  • 我使用这些 主要重要性特征 准备了 8 个特征集,并训练了 Autogluon 模型。
  • 我在 Colab 上使用了 L4 GPU,AutoML 运行时间为 12-18 小时。

集成融合

  • 我选择了一个简单的 Ridge 模型来融合我的单一模型以进行提交。
  • 一个简单的 StandardScaler 确保所有预测在输入 Ridge 模型之前都进行了缩放。

后处理

  • 我选择将所有预测四舍五入到最接近的目标值。
  • 这带来了非常小的 CV 得分 improvement,但在公共 leaderboard 上的得分相同!

CV-LB 细节

如前所述,我在整个过程中享受了近乎完美的 CV-LB 关系,以下是单一模型和集成后的 CV 得分-

单一模型细节

模型算法 CV 得分 公共 Leaderboard 特征数量
XgBoost 11.89035 - 12.76437 11.91435 - 12.79546 717 - 10
LightGBM gbdt 11.80357 - 12.87457 11.83467 - 12.91435 925 - 10
LightGBM goss 11.83367 - 12.84623 11.85891 - 12.87594 817 - 10
Catboost 12.00325 - 12.86532 12.00134 - 12.89734 385 - 10

最终提交细节

模型算法 CV 得分 公共 Leaderboard 私有 Leaderboard 特征数量 / 模型组件
Ridge 11.61414226 11.64459 11.54182 382
Ridge 后处理 11.61414171 11.64460 11.54182 382

关键收获

  • 简单模型拥有强大的力量,应该善用它们以获得好成绩。
  • 参加 CV-LB 关系强烈的竞赛感觉很好,非常 enjoyable!
  • 构建可复用代码非常有价值!我几乎完全复用了来自 Playground S5-E2 的流程,效果最佳!
  • 拥有相关代码的良好 GitHub 仓库堪比黄金!
  • 当人们希望快速有效地迭代特征并构建模型时,数据存储非常有价值。
  • 这次我在流程中没有使用任何公共代码,因为我认为测试自己的本土模型并进行实验会很棒。我认为我的想法成功了!

参考资料

最后感言

衷心感谢 Kaggle 和我的 fellow 参与者们带来了伟大的体验,祝愿未来的旅程成功!
祝一切顺利,快乐学习,致以问候!

Ravi Ramakrishnan

同比赛其他方案