作者Debugger (Win Shares 痴汉)
看板Baseball
标题推估得分公式的方法比较
时间Tue Dec 13 15:55:43 2005
本文将出现於台湾棒球资讯网专栏
推估得分数的方法比较 (Part I)
棒球是比得失分的比赛,得分多的队伍容易获胜,失分多的队伍容易战绩不好,这道理相信大家都知道。道理虽基本,但却相当重要。当一支球员需要藉由补进新人或是交易球员来增强实力的时候,若想藉由补进(以及换出)选手的实力来评估球员的变动会让球队的赢球场数产生什麽变化,一个简单的方法就是去评估球员变动会让球队的得失分数产生什麽变化。再藉由毕式理论胜率(Pythogorean Winning Percentage)或是边际得失分(Marginal Runs、Marginal Opponent
Runs),便可粗略地藉由预估个别球员的成绩来推估出球队会在下一球季拿到几胜。换句话说,球队首先对个别球员作这样的估计:
个别球员实力 ─→ 个别球员年度成绩 ─→ 个别球员分别为球队多得或少失的分数
再由最後一点,算出球队一年会得到几分失去几分,进而估计出:
球队总得失分数 ─→ 球队年度胜率
当然,在每个估计的步骤中,都或多或少会产生误差。误差的来源有许多种,例如错估球员实力、球员表现出意外的好表现或坏表现、伤兵等等,所以上面提到的几个步骤实在是一个很大的课题。在本文中,我们将专注於
个别球员年度成绩 ─→ 个别球员分别为球队多得或少失的分数
这个评估步骤的攻击层面,考虑打者(含跑者)的成绩,也就是来看看要如何评估
个别打者(含跑者)年度成绩 ─→ 个别球员分别为球队多得的分数
在作评估之前,首先要知道的是,所谓的个别打者年度成绩可包含哪些项目,而哪些项目不应考虑在内。既然之前个别打者年度成绩是由评估他们的实力所得出,我们希望用到的数据是与队伍中其他打者实力较无关系的数据项目。基於此点,在一般球迷话题中常常出现的打点数就应该排除在外,因为这跟该打者前面几位上场的其他打者表现关系甚大。前面两三位打者上垒率高,考虑的打者登场打击时通常就已经有很多跑者在垒包上等待支援,击出安打时自然就比较容易送回跑者。若垒包上空空如也,即使全垒打,也不过是一分打点。除了安打之外,上场打击时若较常三垒有
人,也比较容易因为高飞牺牲打或是平凡无奇的滚地球送回一分。虽然打点这个项目历史悠久,也为众多球迷所熟知,但在评估单一打者成绩优劣的时候,其实很容易受到其他球员的表现影响。基於同样的道理,各球员的得分数也是一个不太可靠的评估指标,以下我们将忽略这两项数据。考虑的有
打数、安打、二垒打、三垒打、全垒打、双杀打、牺牲触击、牺牲高飞、四坏、故意四坏、触身球、三振、盗垒成功、盗垒失败
以及可以直接从这几项定义出来的数据,例如打击率、上垒率、长打率等等。
要知道用来评估的方法好不好,就必须能将此方法得到的结果拿来跟现实中的数据结果相比较,看看准确度如何。如果评估的结果太过偏离现实,则须再找别的评估方法以代替之。可是,既然打点数与得分数都不适合用来判断球员表现的优劣,那还有其他数据可以用来代替他们吗?这里的关键在於,虽然个别球员的打点与得分数用途不大,但是团队的打点与得分数则不然,尤其是得分数。因为我们的终极目的就是希望找出好的方法,使得可以从个别球员的打击数据推估出全部会得几分。如果方法适合的话,那麽直觉上利用团队的上面几项攻击数据一样可以得到与实际得分数
相差不远的评估结果。所以我们可以先研究团队攻击数据与得分数的关系,找到好的评估方法之後,再将其套用到个别球员的攻击数据上,即可得到个别球员攻击为球队多打下来的分数。在接下来的文章中,我将考虑几个不同的评估方法,进而介绍出由 Bill James 所创的 Run Created 公式。
首先来看也是一般人所熟知的打击率。假设现在我们知道一支球队的团队打击率,可以推估出这支球队大约的得分数吗?当然不行,因为打击率是比率,而得分数却是总量,与球队一年的比赛场数密切相关。所以这边作一点小变化,来看看能不能从打击率精确地推估出球队的平均每场比赛得分数。
只看一支球队的话,评估方法的选择性自由度实在太大,让人无所适从。所幸,在经过十六年的台湾职业棒球(含中华职棒与台湾大联盟,以下一律合称台湾职棒)历史之後,我们现在已有 109 支队伍的成绩可以作为研究之用。若将这 109 支队伍的历年打击率与平均每场比赛得分数画在一座标平面上,以打击率作为 X 轴,平均得分数作为 Y 轴,我们可以得到以下的图:
图略
明显地,这些由打击率和平均每场得分数当成座标画出的点,在这个图中的分布很接近直线。我们用最小平方法来算出最接近这些点位置分布的直线,也画在同一个图上,变成:
图略
直线的函数式大约(取一位小数)是 Y = 33.4X – 4.4。
从图中可以明显看出,虽然这些点并不是刚好都落在线上,但是几乎都偏离这条直线不远。如果给定打击率 X,我们便可以藉由这条直线来估计出大约的平均每场得分数 Y 值是多少。这边并不列出全部 109 支队伍的推估平均得分数与实际平均得分数,只列出 2005 年六支队伍的这两项数据作为参考:
实际平均得分数 推估平均得分数 误差
兴农 4.31 4.26 -0.05
诚泰 4.60 4.37 -0.23
兄弟 4.14 4.35 0.21
统一 4.09 4.33 0.24
中信 3.95 3.82 -0.13
La New 4.26 4.62 0.36
光看到这里,想必很多读者已经马上想到别的评估方法了。只看打击率当然资讯过少,两支队伍若有一样的打击率,长打多的队伍通常会是得分较多的队伍。所以很自然地,也可以来算算看利用长打率推估出来的得分数会是怎样。这边我们也作类似的处理,先将 109 支队伍的历年长打率与平均每场比赛得分数画在一座标平面上,以长打率作为 X 轴,平均得分数作为 Y 轴,得到一堆点的分布图。这些点的分布依然是很接近一条直线,所以再用同样的想法找到最接近直线後,拿这条直线以及给定的长打率,来评估平均每场得分数大约会是多少,结果是:
图略
直线的函数式大约(取一位小数)是 Y = 18.2X – 2.4。
我们来同时看看 2005 年六支队伍的这两种评估方法结果以及误差:
实际平均得分数 推估平均得分数1 误差 推估平均得分数2 误差
兴农 4.31 4.26 -0.05 4.03 -0.28
诚泰 4.60 4.37 -0.23 4.49 -0.11
统一 4.09 4.33 0.24 4.22 0.13
兄弟 4.14 4.34 0.20 4.00 -0.14
中信 3.95 3.81 -0.14 3.95 0.00
La New 4.26 4.62 0.36 4.53 0.27
除了兴农以外,用长打率估计出来的得分数都比用打击率估计出来的得分数误差要小,还蛮符合直觉中长打率要比打击率更能评估攻击火力的概念。不过只看六支队伍样本实在太小,若看全部 109 支队伍又会是如何呢?光看上面那两个图实在看不太出来哪个方法较优,因此我们还需要一个指标来量化不同方法的准确度。这边提供三个评估准确度的方法,复杂度依序递增,但後面的方法也较具统计精神:
1. 比较全部 109 支队伍中,有几支队伍是用打击率来评估得分会得到较准确的结果,又有几支队伍是用长打率来评估得分会得到较准确的结果。
2. 上面两个方法会出来的图,点的分布都很接近直线。可以计算推估得分数与实际得分数的相关系数,来评估这些点有多靠近直线。相关系数愈接近一,则代表所有的点都相当接近落在同一直线上;愈接近零,则代表两组数字的分布很可能没有任何线性关系。
3. 计算两组误差值的 RMSE(Root of Mean Square Errors),也就是考虑用两个方法得到误差值的分布,计算其标准差。粗略地说,算出来的值一定是正数或零。或为零,则所有的点都落在同一直线上;算出来的愈小,就代表所用的评估方法愈准确。
用这三个指标评估准确度的结果是
打击率法 长打率法 何者较准确
误差较小 52, 占47.7% 57, 占52.3% 长打率法
相关系数 0.630 0.705 长打率法
RMSE 0.359 0.327 长打率法
三个评估准确度的结论一致,所以我们可以蛮有把握的说,若想利用打击率或长打率来估计出平均每场得分数,长打率应是较好的方法。
==
推估得分数的方法比较 (Part II)
在前一篇文章中,我们已看到用长打率来估计得分数似乎是比用打击率来估计更为准确。打击数据如此之多,只用打击率与长打率来估计岂能满足我们呢?另一个也很普遍的打击数据就是上垒率。要想多得分就得朝两个方向努力,一是上垒,二是推进。所以上垒率与长打率正是得分这个目标的两大基石。长打率已经考虑过,那麽来看看上垒率推估得分准不准确是再自然也不过的了。
打击率相同的队伍,长打多的队伍通常得分较多;同样地,打击率相同的队伍,上垒率高的队伍通常得分也会较多。所以直觉来说,上垒率跟长打率都比打击率更能够准确地估算出得分。但是上垒率与长打率来比呢?那可就没那麽明显了,所以我们还是来算算看吧。将 109 支队伍的历年上垒率与平均每场比赛得分数画在座标平面上,以上垒率作为 X 轴,平均得分数作为 Y 轴,得到一堆点的分布图。这些点的分布依然如预期的很接近一条直线,然後就可以拿最接近直线以及给定的上垒率,来评估平均每场得分数大约会是多少,结果是:
图略
直线的函数式大约(取一位小数)是 Y = 32.9X – 6.4。
来比较看看打击率和上垒率的评估准确度吧!
打击率法 上垒率法 何者较准确
误差较小 49, 占45.0% 60, 占55.0% 上垒率法
相关系数 0.630 0.680 上垒率法
RMSE 0.359 0.322 上垒率法
如之前所预料的,上垒率全面优胜,没什麽新鲜的。再来比较看看长打率和上垒率的评估准确度:
长打率法 上垒率法 何者较准确
误差较小 59, 占45.9% 50, 占54.1% 长打率法
相关系数 0.705 0.680 长打率法
RMSE 0.327 0.322 上垒率法
三个项目中,长打率在其中两项表现较优,并无像之前跟打击率相比时的全面性压倒胜利,所以也很难从这个比较就下结论说到底是长打率还是上垒率较能准确地用来预估得分数。代表上垒的上垒率与代表推垒的长打率难分轩轾,那如果把两个一起看呢?这就引入了另一个重要数据:OPS(= 长打率 + 上垒率)。在兼顾两个得分的重要层面之下,OPS 在评估得分数的表现要比只看其中之一都要来得好。
图略
光看图,就已经可以感觉到这些点的分布比在前面几个图里还更要接近直线。量化之後就更确定了,OPS 与平均每场得分数的相关系数是 0.739,RSME 是0.268,都远优於只看上垒率或长打率。若让他们捉对厮杀来比较估计误差,则变成
OPS 法 上垒率法 长打率法
OPS法 - 64, 占58.7% 71, 占 65.1%
上垒率法 - - 50, 占 45.9%
长打率法 - - -
解释一下这个表格。以第二行第一列为例,当 OPS 法对上上垒率法时,这代表我们同时用这两种来估计 109 支队伍的平均得分数。OPS 法的估计结果有 64 支队伍误差较小,上垒率法只有 109 – 64 = 35 支队伍较好。由此表可看出,用 OPS 法来估计得分数,不仅是相关系数最高,RSME 最低,而且与上垒率法或长打率法一对一火拼时也轻松获胜。还有没有别的数据比看 OPS 更好用呢?还可以拿来测试的选择不少,例如 1981 年 Thomas Boswell 定义的总攻击率(Total Average, TA,
中职官方网页译为攻击指数,大致意义是说平均每制造一个出局数可以进几个垒包),算出来与平均得分数的相关系数是 0.734,RSME 是0.265,可说是与 OPS 不分轩轾。
不管是打击率、长打率、上垒率、OPS,还是 TA,这些公式有一个共同的特徵:若固定打击机会,同样的打击结果效用永远是一样的。这句话是什麽意思呢?拿打击率来说的话,若固定打数,每多一支安打影响打击率变化的程度是固定的,都是一除以总打数。拿长打率来说的话,若固定打数,每多一支二垒安打影响长打率变化的程度是固定的,都是二除以总打数;每多一支全垒打影响长打率变化的程度是固定的,都是四除以总打数,一垒安打跟三垒安打也是如此。拿上垒率来说的话,若固定打数 + 四坏球保送 + 触身球 +
牺牲飞球(也就是固定分母),每多一个保送影响上垒率变化的程度是固定的,都是一除以分母,其他有出现的分子的项目也是如此。OPS 与 TA 也有同样的性质,读者不妨自行思考一番。我们可以说这几个公式具有「加法性(Additivity)」,就好像在算加法的时候,如果要把两个数字 a 跟 b相加,那麽不管 a 是多少,b 对 a 造成的变化是固定的。
除了众多「加法性」的公式,另一个想法是考虑「乘法性(Multiplicativity)」的公式。一个简单的例子是 Pete Palmer 定出来的 BRA(Batter’s Run Average)」,定义很简单,OPS 是把长打率跟上垒率直接加起来,BRA
则是把这两项直接乘起来。由於是乘法,若长打变动相同幅度,上垒率愈高的人长打率变动对於乘积的影响就愈大。类似地,若上垒率变动相同幅度,长打率愈高的人上垒率变动对於乘积的影响就愈大。在棒球攻击的世界里,乘法跟加法差在哪里呢?如果你的队友愈会上垒,那麽你的长打就愈容易把更多跑者送回来得分;如果你的队友愈会打长打,那麽你上垒之後就愈容易被队友送回来得分。从这个角度来看,在棒球场上的得分模式,其实或多或少带有一些乘法性。
Bill James 的 RC(Runs Created)公式便是由此而诞生。最原始的 RC 公式跟 BRA 几乎一样,只不过 BRA 公式里有两个分母(一个是上垒率的分母,一个是长打率的分母),RC 将 BRA 略作调整,只用一个分母,使得算出来的 RC 跟得分数相当接近。原始 RC 定义是:
RC = (安打 + 四坏保送) * 垒打数 / (打数 + 四坏保送)。
因为 RC 看的是总得分数,为了要跟实际平均每场得分数相比,我们把 RC 先除以场数,再跟平均得分数相比,把代表 109 支队伍这两项数据的点画在图上,得到:
图略
最接近直线的函数式为 Y = 1.03 X + 0.20。
之前得到最好的评估得分方法是用 OPS (或是 TA)得到的,这边来看看用原始 RC/G 是不是真的更能准确地评估得分数。
OPS 法 原始RC/G 法 何者较准确
误差较小 54, 占49.5% 55, 占50.5% 不相上下
相关系数 0.739 0.730 OPS 法
RMSE 0.268 0.260 原始RC/G 法
看起来两个方法一样好。不过,原始 RC/G 算出来的结果与实际的平均每场得分数相当接近,就算不用图中的直线来辅助,直接算 RC/G 就可以得到还不错的估计得分数,这是用 OPS 所不能达成的大优点。虽然原始 RC公式中只有寥寥数项,但却已经可以拿来当成一个相当准确的估计得分公式了。为了更加精确,Bill James 後来又发展出来许多更复杂的 RC 公式。藉由引入触身保送、盗垒成功与失败、牺牲打等等影响力较小的数据,让 RC 算出来的结果比原始版更接近实际得分数。一般球迷若不想做这些复杂计算,其实用原始的 RC = (安打 + 四坏保送) * 垒打数 /
(打数 + 四坏保送) 就已经相当不错了。
--
Win Shares (暂译胜场贡献指数) 是由棒球统计魔人 Bill James (现任红袜队 Senior
Advisor, Baseball Operations) 所提出用来衡量棒球选手攻守整体价值的一套系统, 我
将原公式作了些许的调整与取舍, 以用来计算中华职棒史的球员排名. 相关文章放在 ptt
BBS 站 CPBL板以及台湾棒球资讯网专栏区
http://twbaseball.info/column_alist.php?editer_no=21
欢迎来信指教 ^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 69.162.28.246
1F:推 Leon419:写的真好..不推不行 12/13 16:13
2F:推 KeeperOf7Key:push!!!! 12/13 16:18
3F:推 yenx:如果大学有这种棒球研究..大概D大可以去当教授了 12/13 16:23
4F:推 genie2:我始终觉得D大写的数据分析文章至少有conference paper等级 12/13 16:45
5F:→ genie2:如果有棒球conference的话 12/13 16:45
6F:推 Corycat:推 12/13 18:19
7F:推 fengels:推...虽人看不大懂XDD 12/13 18:34
8F:推 kihifung:推荐这篇文章 12/13 23:24
9F:推 mbawen:偷偷问,有地方发表吗? 12/13 23:55
10F:推 Debugger:正在与台湾棒球资讯网站长合作 编一本类似 Bill James' 12/14 00:04
12F:→ Debugger:不过应该还要弄两三个月(吧?) 12/14 00:07
13F:推 Guderian:会被联盟告吧 XD 12/14 00:44
14F:推 Debugger:只有数据 没有照片 :D 12/14 00:54
※ 编辑: Debugger 来自: 69.162.28.246 (12/20 07:30)
15F:推 peterxxo: 後面观众好绝望的感觉 10/22 19:47
16F:推 h4512297: 没换 10/12 19:24