高阶数据介绍以及具体算法(一)

avatar
关注

这篇文章主要是给数据爱好者以及想自己尝试动手算的人看的,也方便普通爱好者以后和人对线(233),比网上一般的介绍可能会多一些计算过程。

高阶数据第一阶段:per/ws

不是重点简单说两句,就是专家自己通过球员面板定一个系数,然后算一下球员的贡献,优势是比较客观(相对自己凭感觉描述),缺点是系数纯凭经验也不咋准,另一方面想要验证算法的精度也很困难。

高阶数据第二阶段:apm/rapm

从此以后高阶数据真正有了很高的参考价值,这俩方法区别很小(但结果区别很大)就一起讲了。

假设场上有5名进攻球员a1,a2……a5 五名防守球员b1,b2……b5进攻方在一个回合内拿了2分那么就可以写成

a1+a2+a3+a4+a5-b1-b2-b3-b4-b5+a0=200

值得一提是是a代表的是进攻贡献b是防守贡献,a0代表平均进攻水平,200就是简单的2*100因为要算百回合数据。这个式子视情况可以加入主场优势(影响不大)一个nba赛季常规赛差不多会有17万左右的回合数,把这些放到一起解方程就好了,这个就是第二代高阶数据的思路。

当然啦,有常识的人都会吐槽这个方程肯定解不出来,解决的方法就是使用最小二乘法。

XZ=Y,误差就是||XZ-Y||^2,使得误差最小的Z(就是球员高阶数据)为 (XTX)^-1(X^TY)然后仍给计算机就行了,这个就是apm的方式,但是这个算法的问题是受到噪音影响较大,实际上对接下来比赛的预测能力不如蒙所有球员水平都是一样的。

之后就是rapm的改进了,rapm采用了岭回归的方法简单的来说就是把误差改了一下变成了

||XZ-Y+λI||^2,结果就变成了 (XTX+λI)^-1(X^TY),这个方法的优势从贝叶斯的角度讲就是给球员的能力加入了一个先验,这个先验就是球员水平服从0为均值方差与λ有关的分布,当然λ怎么选就是一个问题了,一个简单的方法就是交叉验证,即把数据分成训练集和验证集,验证集上的损失最小时λ就是最合适的。这个就是rapm的思路。

如果想要自己动手算的话推荐两个网址:

github.com/jkennedy14/NBA_Seqential_Deep_Learning(墙裂推荐,里面东西很多)

github.com/wfordh/pbpstats_rapm_tutorial(数据下载方法)


然后就是说说rapm了,它的优势就是包容万物,球员牛逼说穿了就算要么他能帮球队多得分要么能帮球队少丢分,不管你扯什么最终都指向这个,完美,啥都能解释。而且rapm非常适合球迷跨年代比较球员,毕竟不管规则咋变,多得分都是实在的。

但是如果rapm是完美的就没有第3阶段了,

首先rapm需要play-by-play数据(就是每回合的记录)这个是从1996年才有的,所以实际上数据党一般比较球员能力的时候一般拒绝比较1996年之前的。

第二个, rapm想要真正准确需要至少3年以上的数据,原因很简单,如果上网站上查查就会发现最牛逼的球员其实百回合就只能帮球队多拿10分,10分而已啊,如果回合数少我多进个运气球就差别很大了,所以单年的rapm受运气影响很大,而多年的rapm不能反应球员每年水平的剧烈变化。

第三个, rapm没法很好的解决共线性问题,即如果两个球员同上同下最后俩人高阶数据是一样的。虽然联盟没有能真正同上同下的,但是如果两个人确实在一起打的比较多,rapm的算法也会倾向于这俩人的贡献难以区分,这个即使加长年份也不一定能解决,比如东契奇和电风扇这俩人实在打的够久,这都4年了,俩人的rapm差距也不大。

rapm其实还有别的用途,只要把得分换成别的数据就可以评判一个球员的篮板影响力等等,可以说非常好用。

高阶数据第二代半:bpm

到了bpm日常撕逼就多起来了,事实上bpm也是个准确性很一般的数据(尤其防守)bpm可以解决上面rapm的3个问题,具体方式回归了第一代高阶数据的方法,通过面板来算,但系数不是自己定的了,而是通过5年份的rapm数据回归出来的(具体方法和rapm的算法差不多,只不过球员变成面板数据了)。在此基础上bpm其实还做了些调整。

1.分位置,简单说就是觉得不同位置的面板数据价值是不一样的(事实也是如此)后卫的防守篮板和中锋前锋的就是不一样(说的就是你077)

2团队加成,这个解释起来就有点怪了建议去看官网https://www.basketball-reference.com/about/bpm2.html

由于使用面板数据,所以bpm可以追溯非常非常远,非常适合球迷撕逼,另外成功的解决了rapm的共线性问题。

当然了,我说这是一个及其不靠谱的数据,它的 问题还是很大的,由于防守数据的局限性 , 衡量防守真就是只做参考了,不一定比蒙成0准因为需要方便撕逼的缘故,所以以前没有现在有的数据永远也不可能用在这里,他永远都不会更准(我咋感觉像诅咒似的)


另外bpm有个广为人知的被威少打爆所以改算法的事,这里可以说一下,威少把bpm1.0爆了主要就两个原因,首先当时bpm使用了助攻率*使用率作为回归项,这个非线性的数据是很不稳定的,当时威少刚好这俩奇高无比,再乘起来就炸穿了。第二当时威少篮板还巨高所以防守也高。

所以这些在bpm2.0中都改进了,事实证明也使得交叉验证的误差更小。不要相信啥作者就是为了不让威少超过詹姆斯一类的鬼话。


第三代:rpm,raptor,lebron,epm

第三代的高阶数据与其说是像第2.5代的bpm其实更像第二代的rapm,之前我说过rapm实际上是在apm的基础上加了一个先验,即球员水平服从0均值的高斯分布,但是这个先验是不是准确的呢,其实是有待商榷的。在这些高阶数据里球员的先验不再是0均值的,而是经过面板数据计算(计算方式类似bpm)之后得到的水平。

通过这个方式,这几个数据一方面解决了rapm的共线性问题,另一方面也解决了bpm没法衡量球员面板外价值的问题,是目前的评价球员客观的方式。当然这几个算法也都各有各的不同如果大家感兴趣的话我一个在(二)里讲讲,具体想要计算的话在我上面推荐的链接里也是有代码的。


第三代半:bayesian box apm

这个和第三代的主要区别是,面板的系数不再是一成不变的,而是用一年的数据回归出来的,通过这个方式可以看出联盟的发展趋势,反应球员的能力变化会更及时。

https://www.intraocular.net/posts/bayesian-box-plus-minus(官网)

第四代??dpm

这个算法我就没法做过多介绍了,毕竟我也不是搞机器学习的,从结果上说他更体现球员当前的水平,而不是这个赛季打的怎么样,所以不能用了评价mvp,但是更适合预测下场比赛打的怎么样。

官网有比较详细的介绍,可能需要翻墙

https://apanalytics.shinyapps.io/DARKO/


那么我怎么知道一个数据的准确程度呢

其实验证方法有很多了,这里讲一个比较实用的,就是用这个赛季球员的水平直接带入下赛季的play-by-play数据中去看误差,会对新秀做特殊处理(比如一律认为是-2)

外网有个小哥已经对大多数数据做了计算了结果如下

可以看到预测性质的dpm以微弱的优势打败了epm, bpm属实拉胯,而per由于本身原因(不代表球员百回合贡献)没法上榜

发布于中国香港阅读 20255

这些回复亮了

discusser-avatar

殿军前锋多利安芬尼史密斯

· 江苏

龙哥好帖,顶!

亮了(26)
回复

全部回复

discusser-avatar

殿军前锋多利安芬尼史密斯

· 江苏

龙哥好帖,顶!

亮了(0)
回复
discusser-avatar

luka的五花肉

· 山东

吐饼哥好样的

亮了(0)
回复