返回列表

2nd place solution

683. NFL Big Data Bowl 2026 - Prediction | nfl-big-data-bowl-2026-prediction

开始: 2025-09-25 结束: 2025-12-03 运动员表现 数据算法赛
第二名解决方案

第二名解决方案

作者: yuanzhe zhou (Grandmaster)
发布时间: 2026-01-17
竞赛: NFL Big Data Bowl 2026 Prediction

非常感谢竞赛主办方和 Kaggle 组织这次激动人心的挑战。

解决方案概述

关键点

我从这个 Notebook 中学到了一些有用的设置:https://www.kaggle.com/code/ryanadamsai/nfl-big-data-bowl-geometric-gnn-lb-586

  • 使用原始输入作为模型输入

    • 我没有使用特征,公开 Notebook 中的特征对我来说太复杂了。
      • 主要输入是 's', 'a', 'dir', 'o', 'x', 'y' 以及其他静态信息
    • 最终我只使用了该 Notebook 中一小部分简单的特征子集,我发现复杂的特征并没有帮助。
    • 由于特征计算非常慢,我使用原始输入来加速流程。
  • 预测相对于前一帧的差异(delta x, delta y)

    • 这很有趣,但非常有帮助
    • 预测方向和速度会导致更差的结果
  • 损失函数复制自高分公开 Notebook 配合 muon 优化器

    • 因为它有助于提高我的结果,所以我一直保留它直到比赛结束
class TemporalHuber(nn.Module):
    def __init__(self, delta=0.5, time_decay=0.03):
        super().__init__()
        self.delta = delta
        self.time_decay = time_decay
    
    def forward(self, pred, target, mask):
        err = pred - target
        abs_err = torch.abs(err)
        huber = torch.where(abs_err <= self.delta, 0.5 * err * err, 
                           self.delta * (abs_err - 0.5 * self.delta))
        
        if self.time_decay > 0:
            L = pred.size(1)
            t = torch.arange(L, device=pred.device).float()
            weight = torch.exp(-self.time_decay * t).view(1, L, 1)
            huber = huber * weight
            mask = mask.unsqueeze(-1) * weight
        
        return (huber * mask).sum() / (mask.sum() + 1e-8)
  • 水平/垂直翻转增强帮助很大
  • 简单的归一化如 BN/dropout 有帮助
    • 高级方法如 rdrop 没有帮助
  • 模型集成帮助略微,但总是有帮助。所以我在最后几天训练了更多的模型。
    • 每次我添加一个模型,分数都会提高。

训练

  • 使用 2021/2023 数据 added 进行训练
    • 预训练对我来说没有帮助,直接训练即可。
  • EMA 使训练稳定
    • 否则验证分数波动很大。
  • 最后 5 周作为 OOF (袋外验证)
    • 为了更快的迭代,训练时没有使用 K 折交叉验证

模型架构

我的模型设计与 第 5 名解决方案 几乎相同

  • 原始输入
  • 使用 PyTorch 操作进行少量特征工程
  • RNN 编码器
    • Transformer 编码器不起作用
    • 添加 CNN1D 对我来说没有帮助
  • 时空编码器
  • 解码器头预测运动差异,然后累加和作为预测

其他事项

我注意到主办方非常有帮助且活跃。然而,他谈到了改进他们采样私有测试集的方式,这使得最终结果不稳定,因为“分布”会发生变化。这使得测试集质量更好,但更难预测模型的未来性能。

附注:我很晚才发布这篇帖子就去睡觉了。后来应一些 Kagglers 的友好请求,我补充了一些细节。

同比赛其他方案