[闲聊] 尝试以机器学习排出P+前三队

楼主: chih2loveu (智智爱你)   2022-07-08 04:58:23
大家好
前阵子世界赛,看到很多人在讨论P+前两队的选人标准
突然想到我曾经做过类似的专题(感兴趣的人可以A我文章看,但很简略xD)
因此决定再做一次,看看是不是与媒体投票的结果有所差异~
先打预防针,这是机器学习的结果,基本上就是个黑盒子,所以大家看看就好,别太认真!
-
懒人包:
以 PCA+t-SNE 对资料降维,并以 K-Means 对球员分群^[1]
再考虑各群对球队胜率的帮助及各自的上场时间,得出结论(有根据P+规则)
第一队-> 吉尔贝克、李德威、李家瑞、陈坚恩、李恺谚
第二队-> 辛巴、朱云豪、曾文鼎、杨盛砚(?)、简祐哲
第三队-> 塞瑟夫、林志杰、林书纬、林俊吉、高国豪
(参考板友意见后,在推文有另一个版本)
-
正文:
首先机器学习最重要的就是资料,分成传统数据和进阶数据
传统数据部分来自P+网站,进阶数据部分则来自Game Changer网站^[2]
范围是本季例行赛,出赛多于十场、平均上场多于六分钟、总上场时间多于一百分钟
在这里先吐槽一下,P+可不可以赶快完善数据这一块,不懂到底难在哪......
都有一个NBA stat给你抄了,到现在还是只有传统数据@@
但现在的资料维度(95个)太高,直接跑的结果不会好,因此需要先设法降低
这边用的是比较常见的 PCA 和 t-SNE
PCA 的中文叫做“主成分分析”,原理简单来说是透过轴的旋转
找到新的变量(即主成分),这个变量可以同时保留很多维度的讯息,从而达到降维目的
可以想像在二维平面上,假设资料点都是(1,1)、(2,2)、(3,3)......
那么比起用x、y轴记录这些点,不如将座标轴旋转45度,那就是只用一个轴达到同样效果
但 PCA 完后仍有3X个维度,因此再引入另一种方法再度降维
t-SNE 我不太确定正式的中文译名,直接翻的话叫“t分布随机邻近插入”
假设我们想要将一个圆上均匀的点投射在一条线上,势必有重叠但其实距离很远的点
那要如何让这些点在线上可以分别?答案比想像中粗暴:先量原本的距离
量完后根据距离丢到t分布上,并赋予这些点一个条件机率
使这些点有更高的机会在投射后被分到原本距离近的点附近(抱歉真的很难解释^[3])
维度顺利降到二维后,就可以开始对球员进行分群了,在这里顺便解释一下原因
在现行所有评估球员的方法中,最难的点就是怎么降低场上其他人的影响?
这就回到我的目的,也就是选出前三队
对我来说,前三队代表这些人上场就是赢球保证
因此我借由观察其他表现差不多的球员,去看说是不是其他人上场越多,球队胜率越高?
当然这个想法有很多瑕疵,但现行公开的数据来看,我认为可能没有更好的选项
分群的方法应该就不用介绍了,就是将距离近的点抓在一起,而这里我将球员分10群^[4]
接着计算各群在各队的上场时间,加上各队胜率跑个回归,便得到各群平均对胜率的影响
值得注意的是各群之间各球员的相似度落在0.375至0.4左右
因此如果直接用上面得到的结果,会造成精确度的影响很大,那要怎么解决呢?
其实统计很常见的做法就是:一次不行,那就多跑几次,相信大数法则xD
所以我重复上述步骤100次,并将每次得到的胜率乘上同群相似度和总上场时间
最后得到的结果便是我用来决定前三队的指标!(结果如懒人包所示)^[5]
-
心得:
1.以这项指标来看,MVP德威、最佳洋将大B、最佳新人小烈
而敏哥和又玮在这项指标中都不算太好
2.国王和领航猿的洋将在队内排名都不高(汤玛士队内第9,里乔罗三人则几乎垫底)
可能是国王的体系让本土球员可以更好的发挥优势?
3.结果看起来对中锋评价都比较高,可能是采用的数据问题,也可能在台湾中锋真的很好用
这一点等之后有更多数据后再作观察
4.FMVP辛特力在队内排名倒数第二,真正的季赛养生季后杀生代表?
5.这项指标为负值的人有->
张耕淯、聂欧玛、李盈锋、里金斯、林宜辉、钱肯尼
而领航猿和钢铁人大多都为负值,可能胜率太低所致,也可能体系有很大的问题
6.另外有一项指标是看各球员被分到的群,在全部里面排名第几
我原本想当作观察有谁应该得到更多上场时间的指标,但容毅燊名列前矛让我有点怀疑
7.以结果来看,应该模型表现没有很好,未来再找找看有没有衡量的指标做为参考
也欢迎对数据有兴趣的板友们一起讨论、集思广益!
-
附注:
[1]这个过程参考自UCLA的一篇论文:https://tinyurl.com/544k9dkf
[2]https://tinyurl.com/2e6y5qfr
其中除了各区域命中率以外皆有使用
顺便问一下有没有高人可以指点如何爬这种网站?慢慢复制好累......
[3]有兴趣的板友推荐看https://tinyurl.com/4vhbkww3
非常浅显易懂!
[4]群数的决定办法是土法炼钢,从分2群到分10群,各跑1000次看结果哪个最好
[5]最后附上各队前六名:
勇士 -> 塞瑟夫 > 曾文鼎 > 林书纬 > 林志杰 > 曾祥钧 > 张宗宪
国王 -> 李恺谚 > 简祐哲 > 林仕轩 > 林力仁 > 陈俊男 > 杨兴治
领航猿-> 陈冠全 > 林耀宗 > 李家慷 > 林 正 > 温立煌 > 卢峻翔
攻城狮-> 辛 巴 > 李家瑞 > 朱云豪 > 陈坚恩 > 高国豪 > 吴岱豪
梦想家->吉尔贝克> 李德威 > 杨盛砚 > 林俊吉 > 吴永盛 > 陈振杰
钢铁人-> 布 朗 > 王柏智 > 王律翔 > 班尼特 > 郑德维 > 卢哲毅
作者: Derricklin21 (Wannahoop)   2022-07-08 09:16:00
有人看到跟自己的印象分数不一样就开酸= =就说是纯机器演算 有什么毛病
作者: boss87922522 (徐小乐)   2022-07-08 10:23:00
推 有趣
作者: whenhowxyz12 (whenhowxyz123)   2022-07-08 11:45:00
优文必推
作者: breakfastboy (早餐人)   2022-07-08 12:05:00
结果看起来跟大家印象不一样 胜率是使用logistic regression跑吗
作者: richard88502 (RichardChi)   2022-07-08 21:47:00
爬资料这点稍微看了一下他的网页,可以试试selenium加上pandas应该可以省去很多麻烦

Links booklink

Contact Us: admin [ a t ] ucptt.com