返回列表

1st place solution

453. MLB Player Digital Engagement Forecasting | mlb-player-digital-engagement-forecasting

开始: 2021-06-10 结束: 2021-09-09 体育商业 数据算法赛
第一名解决方案

第一名解决方案

作者:Ph0921 | 赛事:MLB Player Digital Engagement Forecasting | 排名:第 1 名

首先,非常感谢 MLB 和 Kaggle 主办这场精彩的比赛!这是一次非常有趣且充满惊喜的比赛,结局对我来说尤其出乎意料。我在几乎最后时刻才完成了第一个令我满意的解决方案,因此我的第一次提交是在截止日期的前一天。事实上,我曾认真考虑过完全不提交……🙈
我在本文末尾提供了用于最佳提交的最终笔记本链接。遗憾的是,它肯定不像典型的公开笔记本那样整洁和文档化。但我希望下面的文档足以说明解决方案的基本思路。

概述

首先,为那些没有时间或不关注细节的人做一个简短的概述。
我使用了一个由 GRU 和多个处理层组成的神经网络,该网络是在 Kaggle 内核(使用 GPU 运行时)中从头开始训练的(在 6 小时推理时间的前 5 小时内)。主要思想是构建一个模型,按顺序处理与特定时间跨度相关的“原始”输入信息,以收集最终预测所需的相关信息(因此不需要显著的特征工程)。
由于我没有其他模型来进行真正的集成,我至少使用了快照集成来进行提交预测。

建模方法

直观地看,人们会预期球员的过去目标值结合球员表现特征(与“playerBoxScores”信息相关)将是预测未来值的最关键信息。然而,虽然“表现特征”在整个推理时间跨度内都可用,但目标值仅可用到训练数据的最后一天。基本假设之一是,在训练期间对这种时间间隔进行适当且一致的模拟/处理对于构建高性能模型至关重要。
该模型使用与目标日期前 96 天间隔相关的特征作为输入。
首先,过去的目值(使用 log(1+x) 缩放以减少其部分极其“尖峰的性质”)作为输入提供。为了模拟没有目标信息的时间间隔,最后 n 天的目标值(其中 n 随机选择且 n<=32)被简单地设置为 0。此外,添加了一个目标掩码以标记在相应日期是否提供了目标信息:
MLB.png
此外,(像几乎所有方法一样)添加了每日表现特征(例如“playerBoxScores”,如“groundOuts”、“runsScored”和“homeRuns”)以及其他一些特征,如“positionCode”、“teamId”、“statusCode”、“numberOfFollowers”和“month”。非分类特征被缩放到大致相同的数量级,缺失值由 -1 替换(否则特征取非负值)。
MLB-model-2.png
首先,输入特征被送入一个嵌入块,该块由几个带有 leaky relu 激活函数的 Dense 层组成,并由 2 个(线性)残差块处理,以便为每个输入天创建合理的嵌入向量(因此到目前为止,不同天之间没有信息交换)。
然后,具有隐藏大小 128 的 GRU 层按正时间方向处理每日特征信息(其动机是想象一名分析师观察球员在特定时间段内的表现和粉丝参与度,以收集预测未来值的相关信息)。
为了简化每日输入信息的保留,GRU 层的输出与其输入连接。最后,前一步骤的输出由 3 个 Dense 层序列处理并以 relu 激活返回。
为了正则化,添加了 Dropout 层。

模型训练

模型是在 Kaggle 内核(GPU)中从头开始训练的,训练时间为 5 小时,以便剩余的一小时可用于推理过程(未添加竞赛数据以外的数据)。epoch 长度的定义使得训练时间大致对应 30 个 epoch,并使用 2021 年 5 月的数据进行验证。
模型训练使用 Adam 优化器,每个 epoch 后学习率以指数衰减降低,基数选择使得学习率从 2e-3 开始并在 5e-4 结束。批量大小设置为 64,为了正则化添加了 6e-5 的权重衰减。
对于每个训练样本,随机选择一名球员,以及目标预测日与添加到模型输入的最后一天过去目标信息之间的时间跨度的随机时间间隔。根据公布的评估期长度,该时间间隔的最大值设置为大约一个月(32 天)。为了更有效地利用数据,还预测了属于该时间间隔的实际考虑日期之前的期间的目标。预测最大时间跨度(即 32 天)的所有天数可能会更明智。否则,可能会引入对较短时间间隔的模型偏差(其中与过去目标信息的相关性可能更大),因为对于应用的方法,几乎在每次迭代中都预测时间间隔为几天的目标,而那些与 32 天时间间隔相关的目标仅在随机间隔取其最大可能值时才被预测。
此外,假设模型能够可靠地捕获最后一天有目标信息的日子与要预测目标的日子之间的时间跨度,这可能过于乐观。也许添加位置编码(提供有关相应时间间隔长度的信息)在这方面会有所帮助,并可能导致模型的进一步改进。

推理

推理在内核运行

同比赛其他方案