返回列表

19th Place Solution

633. Child Mind Institute — Problematic Internet Use | child-mind-institute-problematic-internet-use

开始: 2024-09-19 结束: 2024-12-19 健康管理与公共卫生 数据算法赛
第 19 名解决方案 - Vladimir Demidov

第 19 名解决方案

作者: Vladimir Demidov (yekenot)
发布日期: 2024-12-20
竞赛: Child Mind Institute - Problematic Internet Use
排名: 第 19 名 (银牌)

思考

比赛结束后心情很沉重。我的意思是,显然我不够聪明,无法在严肃的比赛中竞争。在干净的数据上解决困难的任务,面对排行榜上大量著名的高手,即使对于强大的专业人士来说也是相当具有挑战性的。对我来说,获得金牌的唯一机会就是像这样波动很大的比赛。我在过去的几次比赛中就意识到了这一点。在我头像背景的紫色中,我象征着,老实说,我没有希望达到 Master 层级。

我很想放弃不再尝试,但这就是成瘾的本质。如果一个人长期无法接近理想结果,他会离开游戏;如果一个人得到了想要的结果并感到满意,他也会退出游戏。但如果环境导致一个人几乎达成目标,这个人就会一次又一次地尝试,陷入这个恶性循环,被成功的预期所安慰。就是这样运作的,我真的很想减少花在 Kaggle 上的时间,但不幸的是,似乎我会变得更加上瘾。

基线 (Baseline)

我加入得晚,但从一开始就关注这个比赛。一方面,我很幸运选择了正确的策略;另一方面,我没有把努力转化为胜利。我在一个讨论中描述了我的解决方案开发计划,你可以在这里找到我的帖子。解决方案的基础是我的公开notebook,版本 60,CV 0.482 | 公共 0.448 | 私有 0.459,在私有排行榜上大约第 60 名,所以仅仅 fork 并提交就是一个高银牌。我没计划什么宏大的,只是试图通过模型的响应来探索数据。

根据计划,我只处理了主要数据,减少了缺失目标,并调整了阈值比例(超过 30% 缺失)以丢弃高 NaN 列。所以丢弃后总共有 21 个特征:6 个分类特征和 15 个数值特征。我尝试用 SimpleImputer(strategy='median')、线性插值和 KNNImputer 填充剩余的数值 NaN,但最好的结果是由 IterativeImputer(max_iter=19) 实现的——这对我来说是新东西。MinMaxScaler() 用于 scaling。分类 NaN 由模型内部选项自动填充 (SimpleImputer(strategy='constant'))。我不会描述模型的所有参数;你可以在 notebook 中探索它。它是调整过的 DeepTables NN,正如你所见,相当简单,带有适度的 dropout 率和 LR scheduler,这里没什么花哨的。但它效果很好,就像在我的其他实验中一样,并且在应用阈值优化过程的全局最大搜索后产生了更好的分数。这可以被认为是一个好的单模型,但我认为不是最好的。

集成 (Ensemble)

对于第 19 名的集成,我只是 fork 了这个 NN 的东西,并添加了几个 GBDT 模型,未调整参数的 CatBoost 和 LightGBM(仅调整了 "reg_alpha": 3.1),早停 100 轮。相同的 folds,所有数据准备与 NN 管道相同。包括阈值的全局最大优化。结果我得到了 3 个具有接近 CV 性能的模型。正如预期的那样,GBDT 的 CV 略高,这可能是更好的选择,将未调整参数的 CatBoost 作为单模型拟合而不是 NN,虽然我还没有检查这一点。对于集成,我将 majority_vote 函数应用于这 3 个模型的 rounded predictions,以获得公共排行榜 0.458 | 私有排行榜 0.469 | 由于波动跳跃了 >2000 名,并在两步之内获得第 19 名糟糕的银牌(距离金牌两步之遥)。这就是我能说的全部。感谢关注。

此致,

永远的专家 (Forever Expert)

同比赛其他方案