683. NFL Big Data Bowl 2026 - Prediction | nfl-big-data-bowl-2026-prediction
首先,非常感谢主办方组织了如此富有洞察力的比赛,也感谢 Kaggle 团队提供了出色的体验。恭喜所有获奖者!
这是我第一次认真参加 Kaggle 比赛,在这个过程中我学到了很多关于数据科学的知识。我的方法 heavily 依赖于关于行人轨迹预测的论文和之前的竞赛 writeups。希望这份总结能像社区帮助我一样,帮助其他入门级的 Kaggle 选手。
我的解决方案包括用于编码的 ST-Transformer 和用于解码的 TXP-CNN。本竞赛的核心挑战是在最小化 RMSE 的同时处理未来轨迹的不确定性和多模态性质。为了解决这个问题,我专注于在损失函数中直接建模不确定性。
我认为这是我最解决方案中最关键的部分。我假设未来轨迹分布遵循高斯分布,并在模型上附加了一个“置信度头 (Confidence Head)"来预测坐标旁边的方差 (σ^2)。模型使用高斯对数负似然 (NLL) 损失进行训练:
$$\mathcal{L} = \sum_i \left( \frac{(\hat{x}_i - x_i)^2}{2\hat{\sigma}_x^2} + \frac{(\hat{y}_i - y_i)^2}{2\hat{\sigma}_y^2} + \log \hat{\sigma}_x + \log \hat{\sigma}_y \right)$$
此方法灵感来自 LEAP 竞赛 的 writeups。
在我的实验中,这种方法优于 RMSE、拉普拉斯 NLL、带时间衰减的 Huber 以及其他多模态预测方法。
我将这一成功归因于模型动态编码不确定性的能力。通过自适应地估计每次预测的难度(为不确定的情况分配更高的 σ),这种机制充当了强大的正则化器,防止模型过拟合高度不确定的数据。
模型接受的输入形状为 (BATCH, NUM_PLAYERS, SEQ_LEN, FEATS_NUM),输出为 (BATCH, HORIZON, 4),其中 4 个输出是 (x, y, σ_x, σ_y)。
本竞赛的一个挑战性方面是,给定 play 中只有部分球员提供了地面真实 post-pass 轨迹,而不是所有人。
为了解决这个问题,我设计模型在每次推理时执行单代理预测。具体来说,我构建输入使得要预测的目标球员始终固定在 NUM_PLAYERS 维度的索引 0 处。模型接收所有周围球员的上下文,但经过训练仅输出第 0 个索引球员的未来轨迹。

我的主编码器是一个时空 Transformer,在空间注意力和时间注意力之间交替。在时间注意力块中,我使用 CNN 而不是简单的线性层来更有效地捕捉局部时间依赖性。空间注意力机制结合了领域偏置,详见下一节。
受用于行人预测的图神经网络 (GNN) 启发,我注入了基于领域知识的注意力偏置。
我添加了以下偏置:
它们大多是为图神经网络提出的,但我将它们用作具有可学习强度的注意力偏置。
这允许模型软性地优先处理这些交互。
对于解码器,我使用了 TXP-CNN (Mohamed et al. CVPR, 2020, pp. 14424-14432)。
这种架构将时间维度视为通道,并在特征维度上执行卷积。虽然有些违反直觉,但我发现对于此特定任务,它的效果明显优于标准的 Transformer 解码器。
为了在推理过程中进一步挤出性能,我应用了以下技术:
测试时训练 (TTT):我仅使用 pre-pass 预测辅助任务(预测传球前的轨迹)在测试数据上更新模型权重。
这在 Public LB 上带来了约 0.001 RMSE 的非常微小的改进。
然而,观察 CV 期间 TTT 的损失曲线(由同一年份组成),优化行为类似于随机游走。我不确定这能多好地泛化到不同年份的数据。
测试时增强 (TTA):我还通过应用球员排列 (Player Permutation) 采用了 TTA。对不同球员输入顺序的预测进行平均有助于稳定结果。