428. March Machine Learning Mania 2021 - NCAAW | ncaaw-march-mania-2021
抱歉这篇帖子有点晚了!首先我要感谢 Kaggle 团队。这些年来我真的很享受参加 NCAA 竞赛,今年能获得第三名非常棒——也很幸运!我想把这枚金牌献给我提交作品的名字来源 E. T. Jaynes,他的著作《概率论:科学的逻辑》彻底改变了我的贝叶斯观。
总体方法是训练多个独立的模型并将它们集成在一起。我唯一做的“赌博”是在我预测最接近 50/50 的第一轮比赛中采取标准的 0/1 策略。其他所有比赛在两次提交中都是相同的。唯一使用的数据是 Kaggle 提供的技术统计类型数据,而且大部分仅仅是比赛得分。我也在男子锦标赛中运行了完全相同的策略——只是错过了前 100 名——但参数被优化到了不同的值。
今年我使用了四个不同的模型。前两个是我开发的模型,彼此相似。后两个可能看起来很眼熟。
这是一个基于分差的贝叶斯生成模型。它唯一使用的数据是每场比赛的分差以及谁是主队。最初,该模型假设每支球队都有一个潜变量,该变量具有正态但极宽的先验,对应于它们的实力。给定潜参数,球队 j 和 k 之间的比赛分差 sjk 被建模为正态随机变量:
$$S_{jk} | x_j, x_k \sim N(x_j - x_k - homeadv, \sigma^2)$$
其中主场优势和方差是被优化的超参数。因此,给定一组比赛结果,我们可以计算球队实力的后验分布。由于先验是共轭的,我们可以通过求解 Ax = b 矩阵方程来精确计算后验。这可能至少在精神上等同于某种具有球队层级效应的多层线性模型。粗略地说,该模型预期两支球队之间的比赛分差平均等于它们实力潜变量的差值。
在过去的几年里,我意识到正态分布的二次性质会使模型在球队实力存在差距的情况下(例如 2 号种子对 15 号种子)过于自信。这种情况很大程度上因训练数据中存在极端分差的比赛而变得更糟——比如 UConn 赢了 80 分的比赛。为了尝试解决这个问题,我“预处理”了输入分差数据,以 A) 调整主场优势——而不是像上面那样在模型中进行——以及 B) 缩放比分,使其不能太大。这是我使用的函数:
$$\tilde{s}_{jk} = scoremax * \tanh ( \frac{s_{jk} - homeadv}{scoremax} )$$
——为混乱的 latex 道歉,但这行无法正确渲染——其中 scoremax 是一个超参数。然后,这些“调整后”的分差被输入到与之前类似的生成模型中:
$$\tilde{S}_{jk} |x_j, x_k \sim N(x_j - x_k, \sigma^2)$$
为了获得获胜概率,我们可以利用潜变量的后验分布计算 $$P(\tilde{S}_{jk} > 0 | data)$$。
该模型与前一个几乎相同:进行相同的分差调整和相同的后验计算以获得潜变量——尽管某些超参数可能被设置为不同的值。然而,作为解决两队实力存在差距时过于自信问题的另一种方法,我尝试了一些不同的东西。基本上,我只是假设球队 j 击败 k 的概率是潜变量差值 xj - xk 的逻辑函数。当 xj - xk 远离零时,这往往更宽容一些。
这个模型基本上是 @statsinthewild 和 @statsbymichaellopez 在 这篇论文 中描述模型的翻版。值得注意的是,我没有使用模型的投注赔率部分,只使用了 KenPom 风格的基于控球的统计逻辑回归模型。此外,我选择使用表 2 中的 'g' 参数化而不是他们使用的 'f',因为 'g' 需要拟合的系数更少且具有相似的性能。
另一个不同之处是,我使用技术统计数据自己计算了基于控球的统计数据,而不是直接从 KenPom 网站获取。虽然解释得不是非常透彻,但 这个页面 描述了如何仅通过技术统计表,通过求解 Ax = b 矩阵方程来恢复调整后的进攻和防守效率评级。我认为这可能不是 KenPom 评级的最当前方法,但我用的就是这个。这样做的一个关键优势是,您可以在给定任意一组比赛结果的情况下获得评级,因此更容易尊重时间箭头。
明年比赛开始时,我一定会更详细