返回列表

4th Place (Public LB) Efforts

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

开始: 2019-10-09 结束: 2020-01-06 赛事预测 数据算法赛
第4名(Public LB)经验分享

第4名(Public LB)经验分享

作者: akiyama (Team: Deimon Devil Bats)
比赛: NFL Big Data Bowl 2020
排名: 第4名

首先,我想感谢主办方举办了如此激动人心的比赛。老实说,在比赛开始之前,我对NFL和美式橄榄球比赛的规则知之甚少,但现在我真的很享受每周的比赛;)
同时我也感谢所有分享信息和参与讨论的Kaggler,特别是 mrkmakr、kenmatsu4、CPMP 和 charlie_s。他们的Kernel和见解对我们的模型影响很大。

我们的团队由 owruby、David 和我组成。我和 David 主要负责特征工程,owruby 开发神经网络(NN)模型。团队成员在团队合并截止日期前刚刚确定。那时我和 owruby 使用的是 Python,而 David 使用的是 R,所以最后一周的主要工作是将 David 用 R 脚本制作的特征转换为 Python 代码。这是一项非常艰巨的工作,但也产生了多样化的特征。

我将分享我们方法的简要总结和精髓,因为它不像其他排名靠前的解决方案那样简单优雅。

概述

我们制作了许多回合级别和球员级别的特征。我认为我们特征的有趣之处在于 Voronoi 特征的一些变体。
主模型是带有多种注意力机制的 MLP(多层感知机),用于集成的子模型是逻辑回归。

验证方案

我们使用了两种验证方式。第一种是基于 GameId 的普通 Group 5-fold CV(5折交叉验证),第二种是预测 2018 年 12 月比赛的时间分割验证。它们各自与 LB(Leaderboard)的一致性都不太高,但当两者的分数明显提高时,LB 分数也几乎总是会提高。

模型

MLP

MLP 模型主要由 owruby 开发,所以我无法在这里详述细节。它可以分别输入回合级别和球员级别的特征,然后使用多种注意力机制将它们连接起来。该网络由三种损失函数训练,包括 Softmax 层的 CRPS 损失、Linear 层的 MAE 损失和 Gaussian 层的 CRPS 损失,权重比例为 1.0 : 0.01 : 0.1。前两个损失来自 mrkmakr 的 Kernel,后一个灵感来自 kenmatsu4 的 Kernel。Gaussian 层并没有显著提高 LB 分数,但我们认为它有助于训练的鲁棒性。

逻辑回归

逻辑回归模型仅使用回合级别的特征进行训练,并采用年份加权样本(2017 : 2018 : 2019 = 0.1 : 1.0 : 2.0)。LR 模型的分数不是很好(落后 MLP 0.00030),但加权集成模型(MLP : LR = 1.0 : 0.3)稍微提高了 LB 分数(约 0.00005)。

特征

我们制作了各种代表球员绝对和相对位置、速度(S)和加速度(A)的特征。像其他人一样,我们首先标准化球员坐标,以便进攻方向朝右,并计算近期未来的位置和速度(交球后 0.5 秒和 1.0 秒)。然后我们从进攻和防守双方的角度创建了各种特征,如距离、球员之间的角度以及 Voronoi 特征。

Voronoi 特征

我们使用了通过 Voronoi 计算得出的某些特征。最有效的特征是每个时间点持球者和其他人的 Voronoi 区域的 x 和 y 长度。
我们的 Voronoi 特征最初是由 David 用 R 开发的。R 中的 deldir 包很容易计算带边界的 Voronoi 区域,因此区域的面积和边缘坐标总是有限值,将它们用作特征是很自然的想法。
然而,Scipy 中的 Voronoi 函数无法计算有界的 Voronoi 区域,因此面积和 Voronoi 坐标通常被计算为无限值,我曾在转换 Voronoi 特征的计算过程中挣扎不已。但多亏了 CPMP 和 charlie_s 在他的 Kernel 中的讨论,我知道我可以通过在四条边上制作点的镜像来计算虚拟有界 Voronoi 区域,并部署了它。
整个 Voronoi 特征使 CRPS 提高了约 0.00010。

Voronoi Feature Visualization

训练增强与 TTA

我们注意到可以通过翻转坐标来进行训练增强和 TTA(测试时增强),它们可以提高模型性能。但我们只使用了 TTA,因为执行时间有限,而且仅使用 TTA 几乎与两者都使用一样有效。

最终提交与执行时间

我们选择了 4 个种子平均的 MLP 模型

同比赛其他方案