543. March Machine Learning Mania 2023 | march-machine-learning-mania-2023
更新: 笔记本现已可用。每个笔记本都植入了公共数据,从前序笔记本构建,允许任何人运行任何笔记本。这可将内存需求控制在非付费账户的30GB限制内。
我最初的解决方案结合了R语言的前处理和后处理步骤,并通过API调用DataRobot的AutoML平台来利用特征工程和AutoML功能。我正好在DataRobot工作,能够使用他们最新的软件,但我知道很多人没有这个条件。因此,我尝试在R中复制整个过程,最终得到的输出结果与原始提交的相关性超过0.993,并且排行榜分数非常接近。我已经上传了上述一系列笔记本。
我拥有数学学士学位和统计学硕士学位,作为大学教授、精算师和数据科学家拥有10多年的专业经验。我必须指出,由于只有126个评分观察值,我很有可能是幸运的。但我对其中一些想法在未来几年持续有效持乐观态度。以下是基本流程:
R: 预处理 → R: 会议效应偏移 → DataRobot时间感知特征工程 → DataRobot AutoML → R: 平滑概率预测并输出为Kaggle格式。
我希望找到一种方法来利用整个赛季的信息,同时让模型能够关注球队在锦标赛前的表现,以及更像锦标赛的比赛。我利用AutoML来节省时间,因为我的5岁和7岁的孩子才是我真正的老板,他们的要求很高 ;-) 为此,以下是我的方法中最独特的几点:
1) 推导每个赛季的会议效应
我从常规赛非会议赛程中推导出每个赛季的会议效应,即在锦标赛开始时可用的信息。这是在迭代2或3中出现的,当时我看到南达科他州立大学女子队是我整体排名第2的球队。当然,她们在会议中取得了18胜0负的成绩,但她们也参加 Summit 会议,这个会议并不算强。显然,在此之前我的模型没有很好地捕捉到会议效应。
为此,我使用R的glmnet仅对非会议常规赛进行建模,并利用四个主要特征:
真正的魔法可能在于模型矩阵的创建,我没有为主客场重复会议特征,而是为每个会议创建了一列。主队会议标记为+1,客队会议标记为-1。这使我能够将整个会议的信息隔离到一列中,而不是将其拆分到home[conf]和away[conf]中。我使用了两个目标:主队比赛的得分差和主队获胜指标。然后我提取了主队分差模型和主队获胜模型(log-odds)的赛季-会议系数,并将它们分别附加到训练数据集的每场比赛的主队和客队上。我取了主队会议效应和客队会议效应之间的差值,这些差值成为我主模型中的偏移量,以帮助控制那些在相对较少的锦标赛比赛中难以捕捉的会议效应。
2) 中立场地比赛的处理
与上述相关,我必须处理中立场地比赛,因为整个NCAA锦标赛都在中立场地进行(对于男子比赛,以及部分女子比赛)。因此,从Kaggle提供的数据中,我复制了所有中立场地行,翻转“主队”和“客队”,并在比赛在中立场地时使用“主场”指标=0。这使得所有中立场地比赛对“主队”和“客队”特征的影响相似,同时使大多数NCAA锦标赛比赛在模型训练中的权重翻倍。当我去预测锦标赛比赛时,我预测每场比赛的两行数据,然后平均结果。
3) 建立四个模型
在主要训练部分,我建立了四个模型:男子和女子的得分差模型和主队获胜模型。男子锦标赛提供了更多信息,我认为最好将性别分开。我也相信你可以从分差中提取更多信息——因为20分的胜利与1分的胜利并不相同——所以我想确保通过分差来调整获胜概率。为此,使用上面描述的四个模型的输出,我用R的mgcv包构建了一个gam()模型,该模型将预测的主队获胜概率的log-odds对预测的主队得分差进行回归,以“平滑”概率并利用这些得分差。可以说,这帮助了爱荷华女子队的预测,因为她们的预测得分差相对高于原始的预测获胜概率。
4) 时间感知特征工程
我注意到我想识别那些可能变得相对更好或更差的球队,这是如何使用DataRobot的特征发现工具实现的:
5) AutoML表现
AutoML显示弹性网络回归器在这个数据上表现非常好。我认为这在体育领域有一定道理,因为通常效应是相当单调线性的。你不可能在某件事上“太好”,以至于你需要xgboost或类似算法来检测非单调性或非线性的东西。