一是通过对数据进行统计以及基于统计的数据对球员进行对比,除了最基础的boxscore,我们还会结合对比赛的理解和分析设计更复杂的数据来更准确地解释和比较球员的某些方面的表现,例如之前我们所做“修正队友真实命中率影响”,能从数据层面清楚的揭示“库有引力”这种现象的客观存在。
另一种,是寻找数据之间的相关性,探寻数据之间的联系,在经过更深入的工作之后,发现一些影响比赛的因素。例如,我们之前发现,大学球员相比较他们NCAA时期的三分命中率,罚球命中率和他们在NBA的三分水平有着更强的相关性。
MVP的预测就属于第二种,我们通过寻找过去的数据和已知的MVP得主之间的关系,来预测未知的MVP得主的可能。具体如何预测可以分成三大部分:
1.通过对数据的分析来选择能描述数据的模型
2.通过过去的数据来学习得到具体的数学关系
3.通过我们得到的模型,和已有的数据来预测结果
最简单的情况我们可以假设已知的输入为X,而我们想要预测的结果为Y。
图上的这些蓝点就是过去已知的一系列数据和结果,这看起来可以用一个简单的线性模型来解释:
Y=a*X+b
根据这些数据,我们可以求出一个具体的a和b来,就是图上的红线,也就是我们所说的具体的数学关系,一个预测模型。这个时候只要知道X,就可以得到Y,而Y很大可能是接近于真实的结果的。下面我们就尽量通俗的来给大家解释这几步在预测MVP上具体是如何操作的。
选择模型
以前面举过的简单的单输入线性模型为例,X是我们的输入,它可以是球员当赛季的场均得分(实际当然不仅仅通过场均得分),Y是我们的输出,也就是我们想要获得的MVP预测结果,这里可以是我们为了结果更贴近现实设计的某个“MVP指数”。那么从直观感觉上来说,场均得分和MVP指数不太可能是这样简单的线性关系,X从场均5分涨到场均10分带来y的变化与x从场均30分涨到场均35分带来y的变化是不一样的,因为如果一个球员场均得分很低,那他的场均得分对最后是否获得MVP几乎不会有什么影响,这样X和Y的关系有可能如下图绿线或者蓝线的非线性形式所示。
当然,我们不可能仅仅用一个场均得分就预测MVP,用其他“某一个”数据也是不可能的,这显然应当是一个多输入单输出模型。我们的输入将选择,常用的所有BOXSCORE,也就是常说的基础数据(具体处理的时候场均得分和单位时间得分均会被考虑),也会考虑例如真实命中率,篮板率,助攻率等常见的高阶数据,出勤率,球队胜率自然也会被考虑进去。这里就有一个疑问了:这些数据就能反应球员的价值么?这里我们需要声明一点,我们预测MVP是“记者投票选出的MVP”,而不是我们分析认为“应该夺得MVP”的人,这两者并不相同,我们选取这些数据,而不是采用进行更深入分析的数据,是因为目前而言,绝大部分记者,评论员对数据的理解程度仅止于此,只有少数评论员了解更全面的数据分析方法。
在输出端,我们需要的结果是球员在某一年是否获得MVP,但这样有个问题:每年几百名球员里面只有一个MVP,而且在没有获得MVP的球员里面也会含有MVP的强力竞争者,这样一刀切的划分方法不是特别适合。因此我们定义了一个MVP指数作为问题的输出:
MVP指数=m * 是否获得MVP选票 + MVP得分/当年可能获得的得分
这里面我们通过验证集上的结果选择m=1 。以2015-2016库里全票MVP赛季为例,库里获得了1310分,当年可能的最高得分就是1310分,因此库里当年的MVP评分就是1*1 + 1310/1310 = 2;威少获得了486分,因此威少的MVP评分是1*1 + 486/1310 = 1.371;威金斯没有获得MVP选票,MVP评分就是0。
前面我们已经讨论过,这个预测模型不是一个线性模型,而我们并不清楚具体的非线性的形式,因此我们采用通用性更强的模型——神经网络,这类模型是一种自适应系统,具备学习功能,可以从数据中自动拟合出数据之间关系的具体形式。神经网络的基本结构如下:输入的变量先是通过计算激活中间隐层的神经元,再通过隐层的神经元计算得到最后要预测的输出。实际中使用我们可以调整神经网络的层数和神经元个数。神经网络的表达能力非常强,理论上的分析表明:只要神经元的个数足够多,单隐层的神经网络可以拟合任意形式的函数。
训练模型
在确定了模型的具体形式后,我们就可以从已知的数据中去训练模型。如果我们同时知道输入(球员当赛季的数据)和输出(当赛季的MVP投票结果),那我们可以通过调整模型来使得模型在训练集上的预测效果最好。
但这样的过程可能会出现问题,以下图为例:横轴x和纵轴y的关系是线性的(黑线),实际数据有其他随机因素的影响,所以得到的数据如黑点分布所示,这样的话如果我们用很复杂的模型去拟合黑点,总能得到一个模型能完美符合(如蓝线所示),但得到的模型与实际的模型相去甚远,因为模型过分去凑已知的数据点了,这也叫过学习/过拟合。因此我们在实际做的过程中还会通过对模型添加约束等方法来避免。
在这里,我们采用2008年到2018年这十个赛季的数据和MVP投票结果作为已知的训练数据(训练集)来训练模型。
评价模型
在我们完成了训练之后,需要一个办法来判断模型是否合理,而在我们建模时是不知道2019年MVP结果的。我们可以用过去赛季的结果来判断预测的效果,但由于过学习的存在,我们不能直接用训练集上的效果来衡量不同模型之间的好坏,例如上图中蓝线对应的非线性模型在训练数据上的表现就比真实的模型要好。更合适的评判方法是把训练数据中划出来一部分作为测试数据,在测试数据上比较各种模型的优劣。
在这里,我们采用的是十折交叉验证的方法:分别保留某一年的数据作为测试集,用其他九年数据来训练,在测试数据上测试结果。比如,我们用2008年到2016年的数据来对模型进行训练,然后用得到的模型来预测2017年的MVP结果,最后和实际的2017年的评选结果来进行对照,验证模型的有效性。应当注意的是,对于神经网络这类比较复杂的模型,另一种常用的方法是把数据切成训练集、验证集和测试集,在训练集上训练,在验证集上决定训练什么时候停止和选择最优的模型结构和大小,在测试集上测试最后结果。而在这次任务中因为选择的结构不算复杂,也为了方便与线性模型比较,我们采用的是上述的十折交叉验证的方法。
我们分别采用了线性模型和非线性的神经网络模型,得到以下结果,表中深蓝色部分代表当年的MVP,浅蓝色代表MVP得票前五,旁边的是预测的MVP评分。要注意因为模型不可能完美符合现实的情况,所以我们一般不会直接按照上面的规则来把分数换算成得票率,而是通过相对的排序来分析得到的结果。
我们可以看出,神经网络的预测结果要明显好于线性模型的预测结果,且神经网络的预测结果和现实的贴近程度很高,除了2011年的MVP在模型看来应当是詹姆斯以外(这一年的评选可能是过去十年争议最大的),其他全部命中,前五的预测也大体正确。
我们对比预测结果的具体排名和现实投票的结果还能进一步进行分析,来评估我们模型所存在的缺陷,例如:
1.我们还不能处理当两名高产出球星在同一支球队时,对他们的MVP得票产生的影响,也就是所谓的“分票”现象。比如2017年的库里和杜兰特,在预测结果中得票率高于现实。事实上,这也是一个几乎难以真正解决的问题,因为在过去,几乎很难看到同一支球队有两名MVP级的球员正处于运动生涯的巅峰时期,因此我们很难用过去的数据来训练模型懂得如何面对如今这种情况。
2.我们选用的数据对防守的描述较少,尽管MVP投票中防守端的表现几乎会被忽略,过去几年的MVP像哈登,威少也从来不是优秀的防守球员。但在个别年份,会有一些球员的防守作用在舆论中被特别强调,从而影响投票结果。比如,2014年的诺阿,2016年的伦纳德都因此在现实中获得了比预测结果更多的投票。
3.我们无法处理“故事性”所带来的影响(包括球场外的影响),比如2011年,两连MVP后的詹姆斯因为决定1.0而在记者投票中受到了负面影响,前面第一点中的两名MVP竞争者同处于一队时会严重影响得票的现象也是基于这方面的原因,比起那些孤胆英雄,记者们往往不太愿意认可队友非常优秀的球员所达到的赛场成就。
不过,我们的模型也会与时俱进,在之后不断训练修正,尽可能的接近真实结果。