返回列表

43rd Place Solution for the Predict Calorie Expenditure Competition

651. Playground Series - Season 5, Episode 5 | playground-series-s5e5

开始: 2025-05-01 结束: 2025-05-31 大众健身 数据算法赛
43rd Place Solution for the Predict Calorie Expenditure Competition

预测卡路里消耗竞赛第 43 名解决方案

作者: Jason!
发布日期: 2025-06-02
竞赛排名: 43

这是我遵循的计划。

  • 分析数据。
  • 在不查看其他方法或使用任何库的情况下制作一个初步模型。
  • 制作一个具有良好 CV 分数的模型并提交两次。

分析数据之后,我确定

"1) 与 Calories 最密切相关的变量是 DurationHeart_RateBody_Temp。2) 虽然 DurationCalories 之间的关系似乎是正线性关系,但 Heart_Rate/Body_TempCalories 之间的关系似乎是 S 形” - 引用自我的 preliminary model 笔记本

然后我使用以下内容制作了一个初步模型

假设: 我们可以将 DurationHeart_RateBody_TempCalories 的影响视为 additive without interaction terms( additive 且无交互项)。

假设背后的原因: 我感觉是这样。

我通过简单的梯度下降训练了这个模型。我使用所有数据点来计算每次更新的梯度。回想起来,我的初步模型表现并不比经过 log1p 变换目标后训练的最小二乘回归线性模型好多少,正如我笔记本中的 CV 结果所示。

接下来,我使用标准库(例如 XGBoosttensorflow 等)训练了一些模型,并阅读了社区讨论。从社区中,我采用了以下见解。

  • 特征工程似乎用处有限,尽管按 Duration 缩放其他变量可能有所帮助。
  • 在创建投票率时,我们可以针对不同的 SexAge 分箱使用不同的权重 ( @harukikakinuma ) - 我最终只针对 Sex 使用了不同的权重,没有考虑年龄。

我的最终集成(加权投票)包括 5 个森林类模型,4 个通过 boosting 算法训练,1 个通过 vanilla 随机森林算法训练,以及 2 个使用梯度下降训练的神经网络模型。以下是训练细节。

  • 森林类算法的学习参数通过网格搜索进行调整。
  • 神经网络的架构和学习参数通过感觉(vibes)进行调整。
  • 投票权重通过 optuna 进行调整。我原本想使用网格搜索,因为我还不了解 optuna 的工作原理,但我的网格太大了。
  • 算法通过 OOF 预测的整体 RMLSE 进行评分,而不是折叠上的平均 RMLSE - 请参阅我的帖子 此处
  • 我的最佳 CV 分数约为 0.5918。未加权平均值的 CV 分数约为 0.5919。我使用了 4 个折叠,主要是出于时间问题。
  • 我裁剪了神经网络模型的预测值以确保在范围内。森林类模型不需要裁剪来解决范围内问题。

我没有发现任何关于特征、模型架构或学习参数的有趣之处,这些 elsewhere 在社区中未讨论过。

我的两次提交在以下方面有所不同。

  • 在提交 1 中,我使用了在训练期间发现的每个森林类模型的最佳 number of trees
  • 在提交 2 中,我将每个森林类模型的 number of trees 增加了 1/3,以考虑到我在 CV 中的训练集大小是整体训练集的 3/4。

它们在私有 LB 上获得了几乎完全相同的分数(分别为 0.05855 和 0.05854)。

主要学到的东西: 我喜欢如何组织我的工作流程。

下次竞赛的目标:

  1. 制作更多自制模型。
  2. 与更多社区成员互动。
同比赛其他方案