返回列表

25th Public LB, A great learning experience

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

开始: 2019-10-09 结束: 2020-01-06 赛事预测 数据算法赛
25th Public LB, A great learning experience

公共榜第25名,一次绝佳的学习经历

作者:Arturo Garcia
发布时间:2019-11-28

首先,祝大家在第二阶段好运,也感谢所有通过话题、内核以及现在的解决方案分享经验的人,是你们让这场比赛成为了一个可以学到很多东西的精彩竞赛。

就个人而言,我非常开心,不是因为排名(我觉得我在私有榜上的排名会变差,或者提交可能会崩溃),而是因为正如标题所说,对我来说,这是一次绝佳的学习经历。我开始比赛时对神经网络(NN)或 Python 几乎一无所知,但最终我提交了一个 Python NN 模型,并取得了不错的名次。我还有很多东西要学,但我认为这是一个很好的开始。特别是因为这是我真正想做的事情,但我一直推迟着,因为我对 R 和 GBM 模型感到很顺手。这次比赛成了一个很好的推动力。这出于 necessity(必要性),正如 @dmitriyguller 在关于使用 R 的帖子中所说:

不幸的是,我的经验是,在这场比赛中使用 R 就像嘴里含着吸管跑马拉松一样艰难。

有时我想,如果主办方将比赛限制为 Python 内核是否会更好,但那样我可能就不会开始了,所以我也不确定。

从 R 到 Python 的转变

使用 R 和一个 199 多分类 LGB 模型,我在排行榜(LB)上达到了 0.01305 的分数,在当时这是一个金牌位置,但我无法再提高了,所以我开始学习 NN 和 Keras。几乎从一开始,使用相同的变量,我就发现你可以获得更好的结果。问题是 Keras 在 R 内核上无法工作,所以我必须学习 Python。

最终方案

我的最终方案与已经解释过的一些方案没有太大不同:大多数变量是不同时间点的位置和到跑卫的距离,使用了 S 和 Dir,然后是它们的一些最大值、最小值、平均值和标准差。我还翻转了 Y 坐标,并进行了后处理,将不可能的码数覆盖为 0 或 1。我还设计了一些特征,试图捕捉非跑卫进攻球员对防守球员可能的阻挡。我将所有这些变量输入到一个简单的序列 NN(512,256,128)+ dropouts(0.5) 中,使用 elu 激活函数和 adam 优化器,以及 softmax 最终层。在此之前,我运行了一个 CatBoost 回归器来预测码数,并将预测结果作为 NN 的一个特征。

尝试与挑战

我花了相当多的时间试图让一个更复杂的 NN 工作。我第一次尝试很有希望,将球员的位置放入网格并输入到 CNN 中,就像处理图像一样;然后使用不同时间点的位置并将它们输入到 CNN + LSTM NN 中,就像处理视频一样;最后尝试不同的组合将球员变量输入到 CNN 中。我感觉能够混合这些是获得真正好结果的魔法。我认为 Zoo 方案证明我的直觉是对的,但我远没有成功实现它。正如我所说,我还有太多东西要学。

总结与感谢

正因为如此,我在比赛的最后 15 天几乎无法提交,我在截止日期前两天才得到了第一个可工作的 Python 解决方案。从 R 到 Python 的过渡和最后的冲刺最糟糕的是,我失去了我在使用 R 和 LGBM 时 CV 分数与 LB 之间的相关性,所以我不太相信我的最终提交在可能的洗牌中会表现良好。此外,使用 Python Keras 的 CV 比我本地 R Keras CV 差 0.00007。我不知道是因为折数的随机性还是 NN,或者是因为我没有将某些变量从 R 很好地转换到 Python。我可能犯了一些错误,如果我的提交在新数据下不工作也不足为奇。这不会让我很难过,因为我对学到的东西感到非常高兴。

这就是为什么我想再次感谢所有分享见解和智慧的人,让这里成为一个伟大的社区。奖牌、排行榜位置和比赛总体上是推动你更加努力的好东西,但归根结底,重要的是你获得的知识。

同比赛其他方案