返回列表

Private 21st - 1st Competition

356. NFL Big Data Bowl | nfl-big-data-bowl-2020

开始: 2019-10-09 结束: 2020-01-06 赛事预测 数据算法赛
Private 21st - 第一次参赛

Private 21st - 第一次参赛

作者: Zac Warren | 排名: 21st

在阅读和关注 Kaggle 比赛几年后,我终于决定放手一搏。我是新英格兰爱国者队的超级粉丝,也热爱深度学习,所以这对我来说是完美的比赛。我玩得很开心,学到了很多东西。我非常庆幸自己这么做了。致任何正在阅读这篇文章但尚未参加过比赛的人——尽管去试一试!社区非常棒,我保证你会乐在其中。

经验教训

  1. 数据分析 - 我曾天真地以为 Public notebooks 里的数据分析已经足够了。我对公开分享的信息量感到惊讶,但你仍然需要详细梳理所有内容。下次我一定会确保在开始时花大量时间做这件事。我错过了 2017 年数据中关于 S 和 A 的问题。
  2. CV/PLB/尽早提交 - 我没有充分意识到这有多重要。如果没有准确的指标,很容易采用那些没有帮助的东西,而扔掉那些有帮助的东西。直到截止日期前 3 天我才提交到 LB(排行榜)。那是一个巨大的错误。我的 CV(交叉验证)分数低得多,我也没有时间去弄清楚原因。
  3. 尝试每一个简单的想法 - 我说服自己未来的时间步长不会有帮助(太非线性/随机/球员互相穿过),并且从未尝试过。其实本来可以很容易地通过一些线性的后续步骤来尝试一下的。
  4. 不要纠结参数 - 我浪费了很多时间摆弄神经网络参数。我想我花了几周时间在调整。
  5. 不要指望模型能搞定一切 - 不过我很惊讶 Transformer 的表现如此之好。我想我本应该多尝试辅助它一下,特别是在有 4 小时 CPU 时间限制的情况下。
  6. 代码竞赛 - 预留时间 - 我时间不够用了,对我最后两次提交并不满意。不过这确实很棘手,因为直到提交后才拿到 2019 年的数据。

解决方案

我基本上采用了一堆权重共享的 Transformer Encoder Layers。大部分时间都花在调整其配置和输入/输出上。我错过了 2017 年数据的问题,事后看来,这导致我在让它正确运行时遇到了很多困难。正因为如此,我也从未弄清楚 CV 的问题。我最好的提交获得了 0.01190 的 5 折随机 CV 分数和 0.01295 的 PLB 分数

我最好的发现绝对是将原始跑者输入连接到每个球员身上。看起来这让模型能够找出其他参赛者发现的重要特征。

oX 和 oY 分别是 cos(Orientation) 和 sin(Orientation)。Position(位置)和 Season(赛季)是嵌入。(# 值, # 维度)Positions = ['RB', 'OL', 'QB', 'TE', 'WR', 'CB', 'DL', 'LB', 'SS']。根据阅读更好的模型,看起来我本应该致力于移除这个特征。我祈祷通过嵌入赛季,模型能弄清楚 2017 年数据的问题。🙈

我在 transformer 层的参数共享方面做了很多尝试。我发现交错使用 2 组权重效果最好:

for _ in range(self.n_layer // 2):
    players = self.encoder_layer(players)
    players = self.encoder_layer2(players)

虽然与 ALBERT(https://arxiv.org/pdf/1909.11942.pdf)中展示的那样将所有权重共享相比,收益微乎其微。

我仍然不知道为什么在最后添加全连接层没有帮助。猜测这可能 S 和 A 在 2017 年数据中的问题以及对此的过拟合有关。不过看到一个 10K 参数的网络(16 维)在预测方面表现不错还是很酷的。

另外,107 个输出对应 -7 到 99 码的范围。有趣的是,我发现 -5 到 21 码得出的分数是一样的。我在“长距离跑动”预测器上浪费了很多时间。我永远无法让它接近预测长距离跑动。

感谢主办方和所有参赛者!祝大家好运!

同比赛其他方案