#8 私有榜第6名方案:简单集成与探测方法
大家好,
我诚挚地感谢Kaggle团队组织了这场比赛。这确实是一次非常棒的经历,收获满满,学到的知识也可以应用到Kaggle之外的实际工作中。同时,我也想感谢其他参赛者慷慨的贡献,特别提及以下用户:
致谢
- @paddykb - 他的R-GAM笔记本是我本次挑战工作的基础,他的后处理和分数调整技巧对我的得分至关重要
- @ymatioun - 他关于后处理的建议帮助我在几分钟内将公开榜分数从25.8降到6
- @onurkoc83 及其团队 - 他们对比赛的贡献也成为我工作的基础
- @oscarm524 - 我受到他在比赛中多样化模型的启发,使用了relevelled内核
- @siukeitin - 我从他的讨论帖中引入了宏观经济变量组件
使用的特征
- 日期特征 - 我重用了自己日期特征类中的大部分特征。包括相关日期部分的三角函数特征(正弦-余弦特征)和星期几指示器。我在之前的EDA和基线工作中已经提到过这是非常重要的特征
- 针对12月26日至12月31日的二元列,按国家区分
- 如前所述,使用了GDP数据
- 也使用了我的类中提到的假期指示器
- 针对日本5月6日至9日的二元指示器。我相信另一个高分方案也使用了这个特征(虽然我无法在此标记该帖子)。我发现这略微帮助提升了我的CV结果
模型结构
- 我采用了两阶段模型方法,以保持流程多样化,并确保尝试融合不同且互补的模型,从而有效捕捉数据中的信号。基础模型包括:
- LightGBM
- XGBoost
- CatBoost
- GAM
- 我使用Optuna对我的标准ML模型(树模型)进行了调优,就像在我的基线工作中一样。此外,我计算了两个时间段(1-3月和4-12月)的CV分数,以尝试复制公开/私有榜的分割方式。我认为几个公开的笔记本也使用了这个策略
- 我使用了自定义评估指标来遵守组织者的指标要求。我没有使用MAPE指标,而是为自己的评估构建了函数/类,并将其嵌入到树模型中。这帮助我在调优和推理时与比赛要求保持一致。以下链接可以帮助理解如何实现: 我认为开发自定义损失函数也会对我更有帮助
- 我几乎完全依赖R-GAM笔记本(除了最后的"惊喜"部分)。我曾私下构建了此笔记本的Python等效版本,但觉得没有必要使用,因为结果几乎相同。我调整了各国之间的权重来探测LB上的影响。影响很小,有时也对我有效。以下是可编辑的原始工作代码:
pred_probe = round(pred * case_when( country == 'Argentina' ~ 3.372, country == 'Spain' ~ 1.600, country == 'Japan' ~ 1.394, country == 'Estonia' ~ 1.651, country == 'Canada' ~ 0.850)) - 我只进行了一次树模型调优(前一天)来提交最终模型。这次我更依赖特征工程而非调优
模型融合与后处理
- 我如上所述使用Optuna融合树模型。在提交时我也会手动调整权重,利用公开榜分数进行探测和调优。我在此使用了与GAM工作一致的后处理
- 我将Optuna结果与GAM工作融合,形成了最终结构
- 我使用四舍五入方法对预测结果进行后处理
- 我发现将某些提交结果加1可以略微提升公开榜分数。我冒了这个险,并且收到了回报。这也在昨天讨论过
- 我的最终模型提交结果严重偏向GAM,适度偏向树模型融合。我的模型权重和最终融合依赖于公开榜分数
改进空间
- 我应该研究岭回归(Ridge Regression)。我自己曾在上一届挑战赛中发帖介绍过它的有效性,但这次没有使用。我认为这可能会大幅提升我的分数
- 我应该更关注假期特征。我跨国家通用处理假期,而其他高分方法则单独处理每个国家的假期并投入了更多精力
- 如前所述,为树模型设计自定义目标函数可能会改善我的模型表现
我的收获
- 至少在时间序列任务中,简单方法具有很大价值。需要构建好的特征并依赖它们
- 我需要更加关注CV与榜分数的关联。在这次挑战中,公开榜也揭示了最终结果的信息,特别是在relevel之后
- 在模型开发和推理中完整使用组织者指定的指标,比使用提供的标准指标更有益处。我将努力在其他工作领域也应用这一点
- 使用TPS-Sep22的过往经验作为本次挑战的基础很有帮助
学习愉快,此致敬礼!
期待第20期比赛再见,也祝其他参赛者好运!