【IT168 方案】想必篮球爱好者们都非常关注今年的NBA季后赛,MVP的奖项投票结果尚未出炉,但估计各家球迷们心中各有定论了。所以我们来用机器学习预测一下今年MVP奖项的结果。
哈登(James Harden)和字母哥(Giannis Antetokounmpo)
收集数据
我找到了1968-69赛季每个赛季的篮球参考数据,但是我只使用了1980-81赛季的数据,这是第一个媒体投票的赛季,在此之前是由球员投票的。下面是2015-16赛季数据的一个例子。
这是第一个也是迄今为止唯一一个被一致投票选为MVP的球员案例(每个投票者都给了他第一名投票)。
除了上表中的数据外,我还搜索了一些不可用的数据的配置文件。例如BPM、PER、TS%在后面的部分中的更多信息。
但我建议您不要再次抓取它,因为数据已经被检索,可以在我的 Basketball_Analytics/mvp_votings.csv at master · danchyy/Basketball_Analytics · GitHub和 NBA MVP votings through history | Kaggle中找到。
定义问题
有了这些数据,需要定义将要解决的问题。由于这是一项排名任务,所以没有任何现成的算法可以解决这个问题。我将试着通过回归问题来简化这个问题。
我们任务的目标值将是上表中的Share列。这个数字总是在0到1之间,代表每个参与者在投票中赢得的点数。
由于数据结构的方式,我们基本上试图模拟媒体如何投票给本赛季的球员。 当然,回归对于解决这样的问题非常有用,但这里的问题在于极不平衡的数据。在奖励份额值的直方图上,您可以看到超过一半的示例介于0.0和0.2之间,这可能会导致模型出现问题。
功能和特征选择
在开始训练和验证模型之前,来解释一下这些简单的功能选择过程。
pts_per_g、ast_per_g、trb_per_g、stl_per_g、blk_per_g是简单的统计数据。每场比赛得分、助攻、篮板、抢断和盖帽。mp_per_g代表每场比赛的分钟数,win_pct代表球队的胜率(一个赛季有82场比赛,所以这个值代表games_won除以games_total)。
Fga、fg3a、fta是投球数,尝试投中三分球和罚球,fg_pct、fg3_pct、ft_pct代表投篮命中率、三分球命中率和罚球命中率。
现在我们来看一些高级统计数据。
PER代表玩家效率等级,基本上是所有正面和负面简单统计数据的计算。
BPM代表Box Plus Minus,是评估球员质量和对球队贡献的高级统计数据。与PER相比,它需要更多基于团队的统计数据。
TS_PCT是True Shooting Percentage,代表投篮命中率。计算方法相当简单(实际上包含在上面的统计数据中)。这是公式:
PTS /(2 *(FGA + 0.44 * FTA))* 100
USG_PCT是使用百分比的缩写,是球员在球场上使用的球队比赛的估计值。以下是计算。
最后,WS和WS_per_48代表贡献率和每48分钟的贡献率。该统计数据试图将团队成功划分给团队成员。
特征选择
目前我们所谈到的统计数据看起来非常相似,,因此我们继续进行几个特征选择过程,以避免出现问题。
第一个是使用互信息找出变量之间的关系,这是通过使用sklearn的特征选择包完成的。
ws:0.2884 per:0.2811 ws_per_48:0.2592 bpm:0.2013 pts_per_g:0.1482 usg_pct:0.1053 win_pct:0.0973 fta :0.0948 ts_pct: 0.0872 fga:0.0871 trb_per_g:0.0695 mp_per_g:0.0668 fg3a:0.0355 ft_pct:0.0311 ast_per_g: 0.0279 stl_per_g:0.0139 fg_pct: 0.0089 blk_per_g:0.0066 fg3_pct:0.0000
然后使用随机森林分类器,对随机森林实例进行拟合,找出模型最重要的特征。
ws:0.3911 win_pct:0.1326 per:0.0938 bpm:0.0537 ws_per_48:0.0428 fga:0.0368 usg_pct:0.0310 ft_pct:0.0263 ast_per_g: 0.0253 mp_per_g: 0.0251 fg_pct:0.0231 fta:0.0213 pts_per_g: 0.0183 fg3_pct:0.0159 ts_pct:0.0155 trb_per_g: 0.0153 blk_per_g: 0.0118 stl_per_g:0.0103 fg3a:0.0101
最后,我们看得到了特征之间的相关性矩阵。这帮助非常大,因为能够可视化那些功能非常相似,从而带来重复的信息。在某些情况下这些信息对模型没有帮助。
在上一个图像,您可以查看数据集中所有要素之间的相关性。之后,删除那些高度相关的或基本上代表同一事物的特征,或者可以通过一些标量乘法来表示。
通过上面描述的几个描述的程序和统计定义,将这些特征减少到以下最终特征:
ts_pct bpm mp_per_g pts_per_g trb_per_g ast_per_g stl_per_g blk_per_g ws win_pct
虽然它们之间仍然存在一些相关性,但我们还是使用这些功能,因为它们可能是最合适的。我试着用所有的特性来运行实验,结果导致速度非常慢,结果也更糟,这意味着特性选择是有意义的。
训练和验证
通过使用所有赛季的数据来实现交叉验证,以这种方式训练每个模型并平均每个赛季的结果。
我们使用的指标是回归的均值误差,以得到媒体投票的准确表述。同时我们也对结果进行了排序并测量了排名的准确性,将其用作辅助指标。
对于回归,我使用了以下模型:
线性回归
岭回归
梯度增加回归量
随机森林回归量
SVR
我用上面描述的方法用正则和多项式特征(多项式2次和3次)进行实验。在训练过程中,我对0和1之间的数据进行了实验,没有缩放数据,结果并没有太大的差异。
通过梯度增强回归器得到了非常好的的结果,该模型保持了前6位(有些模型具有不同的参数或不同程度的多项式)。
完整的结果可以在我的GitHub存储库中看到,它们被放在三个名为reg_results_mse_ordered的文件中。txt, reg_results_sorted_top_1。txt和reg_results_sorted_top_5.txt。
预测2018-2019赛季
最后,这是本赛季的预测。首先展示几个回归模型的结果,这些模型在所有验证分割中具有非常好的的均方误差。
梯度增加回归量
该模型具有50个估计量和0.1个学习率,具有二次多项式特征。
梯度增强回归变量的其他变化也有类似的结果,其中以哈登为首位。此外,markdown pdf转换器非常笨拙,而且会将字母分隔开来(我用markdown创建了一个表,并将其转换为pdf)。
随机森林回归量
该模型具有50个估计量,仅具有交互的第三度多项式特征。
但是对于一些不同的参数,如100个估计量和只有交互作用的多项式特征的二阶,结果会有所不同。
Ridge
Ridge是一个正则化的线性回归。值为10且多项式特征为2次的非常好的结果。
线性回归
现在们也使用了正态线性回归,MSE对这个模型非常有用,结果也却相当有趣。
由于没有正则化,模型可能对一些特征进行了过度拟合,得到了这些结果。这是鲍威尔和乔丹唯一一次进入前五名,所以他们被排除在了下一节的图表之外。
支持向量回归
这是支持向量机的变体,用于回归。 以下是C = 100和γ= 0.001的模型结果。
此外,由于所有模型都是回归模型,它们当然可以超过值,并超过最大值1.0。即使这并不理想,但由于我们最重要知道的是排名,所以就暂且忽略这一点吧。
2018-19赛季预测
在下图中,您可以根据按MSE指标排序的前50个模型查看前10名球员中每个人的平均得分。
哈登和字母哥非常接近,但哈登略占优势。约基奇保持第三的位置。其他人的分数都相对类似,实际上会比这要小得多。
结论
通过本文,我们预测出NBA 2018-2019赛季MVP得主是哈登!但是字母哥也有令人惊艳的表现,媒体很有可能会更偏向于他。