返回列表

1st Place Solution - Brief Overview

428. March Machine Learning Mania 2021 - NCAAW | ncaaw-march-mania-2021

开始: 2021-02-25 结束: 2021-04-05 赛事预测 数据算法赛
第一名解决方案 - 简要概述

第一名解决方案 - 简要概述

作者:Bojan Tunguz (Grandmaster)
发布时间:2021-04-08

再次感谢所有在比赛结束后对我表示支持的人。你们的话语对我来说意义重大。如果你想了解更多关于我在这次比赛中的经历以及我的整个 Kaggle 之旅,你可以阅读这里

也感谢大家耐心等待这篇文章的发布。我还在努力处理积压的一大堆工作。我将在这里提供我解决方案的基本大纲,并希望以后在时间允许的情况下,再补充更多细节。如果你了解我的机器学习建模方法,你不会对我工作的“无处不在”感到惊讶,无论是在字面上还是物理上。我使用一个 Kaggle notebook,两种语言(R 和 Python),三台我自己的机器,以及至少几十个名为 Untitled7.ipynb 的 Python notebook。你懂的。所以我可能需要一段时间来尝试简化我的建模流程。

  1. 我的基本建模方法与过去几年许多顶级解决方案中使用的方法非常相似:只使用进入锦标赛的球队的赛季数据,主要集中在预测分差,然后尝试将这些预测转换为概率。

  2. 在特征方面,我参考了 @imooreR notebook。我已经有一段时间没用 R 了,我不想花太多时间把他的工作转换成 Python,所以我决定直接在一个 Kaggle notebook 中导出特征数据集,然后下载到本地机器上用 Python 进行后续工作。

  3. 我想看看我是否能制作一些其他对预测球队排名有用的特征。很久以前在研究生院时,我想到了一个巧妙的想法,根据赛季表现计算 NCAA 球队的 Page Rank。如果我没记错的话,我当时用 Perl 编写了代码,它与其他流行的球队排名(教练投票等)具有相当不错的整体一致性。这次我决定使用 Rapids cuGraph 库,你可以在这里找到基本设置。用这种方法得出的整体排名似乎没有我记得的以前的工作那么好,但这个特征似乎为我的模型增加了一些信号,所以我保留了它。

  4. 然后我添加了 538 特征。非常感谢 @raddar 提供这些数据。

  5. 由于我们只有过去四个赛季的 538 特征,我需要想出一种方法来最大化它们在我模型中的使用。我想出了一个两阶段建模过程:首先,我会使用堆叠和所有赛季的数据创建几个元特征,但不包含 538 特征。然后,我会将这些元特征与 538 特征结合,仅使用过去四个赛季的数据。

  6. 最后,我会对过去四个赛季进行大量的集成,使用所有常见的模型:XGBoost、LightGBM、HistGradientBoosting 等。用不同的特征子集来做这件事。所有的第一级元特征用于预测分差,而所有的第二级元特征用于预测获胜概率。我一直担心过拟合,但看起来最终我的集成效果还不错。😄

  7. 后处理。众所周知,这次比赛创造了一个赌博的机会。原则上,测试集足够小,可以“手动挑选”所有比赛的获胜者,但实际上这是非常危险的,不可能正确完成。由于我们被允许提交两次,一个完全理性的零风险方法是在每次提交中从决赛的两个可能选项中选择一个获胜者。(这就是所谓的“1-0”技巧。)然而,我选择在第一轮押注所有排名第一和第二的球队,然后在第二轮押注斯坦福大学和康涅狄格大学。幸运的是,所有这些赌注都奏效了,但我得到的提升并不是那么显著,即使没有它我也会赢。做“1-0”技巧实际上会更大幅度地提升我的分数。

同比赛其他方案