万象城娱乐官网app

体育分析介绍(八):棒球好球带模型简介

从本篇开始,我将介绍几个经典的体育分析工作。这些工作会比之前的简单模型要复杂了许多,但效果也要好了许多,是能够真正进入工业实用的模型。

这一篇我会介绍棒球里“好球带”(strike zone)相关的工作。首先简单的描述一下背景。

棒球有一个所谓好球带。如果一颗球打者没打的话,进入好球带的球会被判为好球(strike),否则判为坏球(ball)。由于棒球规定3好球打者出局、4坏球打者自动保送上垒,好球带就成了一个很关键的东西。在mlb官方规则里,对好球带是有如下的规定:

(1)纵向。低至打者膝盖髌骨下缘。高至打者的裤腰带上缘和肩膀上缘的中线。即上图所示。打者各身体部位的位置以其准备击球时的姿势为准。

按此规定,好球带是一个三维的形体。只要球在飞行过程中通过好球带的任一部分(即与好球带相交),则为好球。否则为坏球。通常我们用本垒板前缘上的截面来描述好球带,就像上图一样,这样它会是一个二维图形。

但实际上,在比赛中,裁判并不完全遵守这个规定,会有很多实际调整。通过下图也可以看出,同样是mlb裁判,2007年和2013年的好球带甚至都有不一样,并且两者的截面都不是矩形。通过本篇文章介绍的工作,还可以看出来其他实际上裁判们所做的调整。

本篇文章所讲的工作,正是对好球带做预测。根据打者、投手、裁判、球种以及好坏球数等等特征,来预测好球带的大小。显然,这是个二分类问题,所以我们会采用二分类的模型和评价标准。

(1)用于分析好球带本身的影响因素,例如在不同球种和不同好坏球数时的好球带大小。可以用于指导投手投球等等。

(2)用于分析捕手的接捕(pitch framing)能力。所谓接捕能力,是通过接球动作帮助投手“赚”好球的能力,也就是去评价该捕手拿到的好球带和联盟平均的好球带的区别。如果捕手接球没接好甚至没接到、或者接球动作很夸张不自然,不给好球的概率会大了不少。由于捕手一年接的投球很多,这个能力的影响会非常大,像格兰达尔(Grandal)这种接捕能力极好的捕手,每年可以帮助球队赚得1.5胜左右。

(3)用于评价裁判的好球带、以及裁判在某场比赛里的具体表现。这个和评价捕手的原理是一样的。如果知道下场球对应裁判的好球带,也可以用于指导投手投球等等。

这三条应用都是目前非常成熟的“标准化”应用了,在各式棒球数据网站通常都能找得到。

首先还是选取特征。投球的位置(横纵坐标)当然是个特征,其他的则大概有这么多东西可以做特征:

从上面的官方好球带规定中,我们可以发现,打者的身高、身体各部分比例以及打击姿势和好球带是有直接关系的。因此打者会很大程度上影响好球带。

在训练数据中,我们可以拿到打者是谁,同时也能拿到他的身高。还能知道打者当前是左打还是右打。前两个信息看起来肯定有用,左右打也可以加进去。

经常观看比赛的球迷应该知道,当前3坏0好时的好球带往往很大,反之0好2坏时的好球带会比较小。所以当前的好坏球数必须是作为一个特征的。

其实还很容易发现,曲球(有很强下坠)被给好球的范围和速球(轨迹变化比较小)也不会完全一样。因为我们拿到的数据记录的是通过本垒板前缘的位置,这个位置不一定和裁判拿来判断的位置是相同的,并且按照规则,不管是前缘还是后缘,只要擦上都算好球。所以球种也应该是一个特征,或者我们用球的速度和旋转做特征也行。

根据上面的讨论,我们知道捕手对好球带是有很大影响的,所以捕手应当作为一个特征。同样的,裁判也应当作为一个特征。另外,投手本身也是一个特征,边边角角的位置、投手能准确投进捕手手套的话想必被给好球的概率会大一些;还有也许有一些投手一直给裁判“控球大师”的印象,所以好球带会宽一些呢?

和其他体育运动一样,棒球也有主队和客队。完全有可能是主队的好球带稍大。所以当前是主队投球还是客队投球应当是一个特征。

然后是选取数据。我们使用mlb官方提供的PitchF/X数据。该数据记录有每颗投球的位置、该颗投球的球速与旋转,以及该颗投手被当值主裁判定为好球还是坏球。

这里选择数据比较容易。我们选取2008~2019的所有有效投球数据即可。我们刨除所有打者挥棒了的球(剩下的球才需要判定好坏球)。共有约420万的样本量。

接着来确定模型。这里的模型会比较复杂。如果直接拿上一篇讲的现成的分类模型来训效果会很差,主要有这么两个原因:

(1)从规则可以看出来,棒球的好球带基本上是有对称性的,并且会接近一个边角平滑的矩形(或者说一个中间部分比较直的椭圆)。如果拿现成的分类模型来做,很难引入这个信息,这样的话想达成训练目标较为困难(很可能会训出一个很“毛”也就是曲率很大并且单调性反复改变的边界)。

(2)这个里面存在大量的离散特征:打者、投手、捕手和裁判。量比较大,加起来有好几千。上一篇我们提到过,gbdt和随机森林可以处理这类特征。但是他们对这种量比较大的特征处理起来仍然有极大困难(尤其是在数据摊到每个离散值上并没有很多的时候)。如果摊平用0-1特征的话那会更糟糕。还有个方法是先提这些人对应的连续特征(所谓的embedding),这个方法倒是可以一用,不过本文用了另一套方案解决这个问题。

在本文的模型中,我们会引入一种方案,叫做分层贝叶斯模型(Hierarical Bayesian Models)。这是一种特别适合体育分析的特点、并且被很多体育分析实践者所使用和热爱的一种模型,因此笔者认为有必要专门花时间来介绍。这类模型在不同教材里有不同的名字,有的教材会叫做贝叶斯网络(Bayesian Nets),说的都是同一种东西。接下来我们就以好球带问题为例,简单的描述这种模型是什么。

首先,好球带本身是一个分类模型。按照分类模型(比如逻辑回归)的标准假设,最后的好球概率是一个伯努利分布,其为1的概率比为0的概率的对数就是输入特征经过某种变换之后的结果。我们就用逻辑回归,因此这个变换就是线性组合。即:

如上面所述,我们有大量的离散特征,就以捕手为例。我们将它处理成0-1特征。实际每条数据的特征会是:这个球对应的捕手是1,其他所有捕手都是0。记这些特征为c_i,也就是每次有且只有一项为1。类似的,我们记打者的特征为b_i,投手的特征为p_i,裁判的特征为u_i。我们可以把上面的式子细化为:

其中x_i是那些不需要处理成0-1的特征,比如投球位置、主客场(它本来就是0-1)、当前好坏球数等等。到这里为止,这就是个正常的逻辑回归模型。

之前我们讨论过,直接使用该模型进行训练会很灾难。原因就是离散特征太多,每一条特征(每个捕手、投手、打者等)能分到的数据太少,如果不加以限制的话,这些离散特征会学成泛化能力很差的状态,而且由于这是个线性模型,把其他数据较多的特征也会拖垮。

熟悉概率论的读者应该知道,真实世界中的很多分布都很接近正态分布。特别的,只要样本量足够大,任何分布的随机变量的独立多次采样的平均值都会接近正态分布。所以,我们是不是可以限制“所有捕手的权重项wc_i接近正态分布“呢?

从实际数据来看,这一项还真的比较像正态分布。我们完全可以假设该分布的均值为0。因为如果不为0,则这一项可以提到整体模型的常数项中。所以我们添加这样的限制:

我们可以看到,现在我们的模型有若干个概率分布。训练目标本身(好坏球)有分布,参数又有额外的四个分布。这和之前提到的现成模型不同,那些模型全部只有一个概率分布。现在这类有多个、分层的概率分布的模型就叫分层贝叶斯模型。我们就采用它来做好球带模型。

在开始讲怎么训练这个模型之前,还有必要提一下本文一开始提到的另一个问题。

之前提到的是,棒球的好球带基本上是有对称性的,并且会接近一个边角平滑的矩形。那么如果把横纵坐标(由于历史原因,分别用x和z表示)先打格子离散化再建模,那会遇到和上面的离散特征一样的问题,并且在这里用正态分布就不大合适:可以想见,大概率不是正态分布,这个分布是什么样取决于好球带“边缘”和“内部”、“外部”的大小比例,大概率会是一个在0和1附近双峰的分布。并且,这个分布还需要加上如下限制条件:相邻的格子值相近、“对称性”和“矩形”的对应格子值相近,倒是可以做,但很是麻烦,训练这样的模型也会困难很多。有没其他的做法呢?

(1)我们可以直接把“等高线”参数方程化。比如如果好球带是矩形,参数方程就是:

c相同的点,其算出来的权重值应该接近(可假设为正态分布)。其中a,b是长宽、x_0,z_0是好球带中心。可以先拿所有数据先学出这几个参数。

实际上好球带是个边角平滑的矩形,这样的话用矩形的参数方程就不合适,可以用超椭圆的参数方程:

这就比较像我们上面看到的真实好球带的样子。同样的也可以根据数据把所有参数(包括n)先学出来。

(2)我们可以做一个近似[3]。我们先用通用的模型学出在不加离散特征时,各个位置的好球概率。这时就容易了很多,由于没有了离散特征干扰,数据量比较大,效果是不错的,上面看到的好球带图就是这样学出来的。可以使用之前提到的分层贝叶斯模型,也可以用kernel density estimation的模型或者其他的可用模型去做。

然后把这个学出来的概率当作特征,代替原来的x和z,加入到最后的模型中。注意这里最好别用线性模型,因为可以想见这里并不存在线的概率很少会因为捕手、投手等原因有很大变化,接近0.5的才会容易变化。可以用之前提到过的GAM模型,或者把这个参数填进多项式里当特征也是可以的。本篇文章中提到的论文就是用的这个做法。

如果刚好是一个只有两层的模型,并且外层是一个线性函数(线性回归、逻辑回归),内层是正态分布,可以使用所谓的mixed model训练工具[4]。r的lme4是一个很好用的库,非常简单干净。没有第二层(即不带有权值正态分布假设)的变量是所谓fixed effect,有第二层的变量是所谓random effect。python也有对应的库。本文提到的模型就属于此类,所以直接用此类库训练即可。大致是:

另外如果外层是GAM而不是线性模型的话可以用r的mgcv库,同样也能做。

如果不是这类模型呢?那就要复杂了很多。还好也有库,不过用起来需要注意的事项要多了很多。[6]由于篇幅原因,在这里就不介绍了。

(1)用参数方程的方案处理横纵坐标的话,上面那个模型公式对c(横纵坐标参数方程结果)的处理是不是丢了信息?如果丢了的话,怎么做比较好?

(2)之前提到过,打者和投手都有左手、右手之别。在上面的模型里并未体现这一点。这个信息怎么处理比较合适?直接当作一个特征合不合适?

(3)打者的身高会很大程度上影响好球带。按照规则,我们一定程度上知道它是怎么影响的,是不是有比直接塞一个正态分布的打者权重更好的方式?

上图有两个信息。一个是红实线和蓝实线展示的内容,即不同裁判的好球带(以左图为准,它正是好坏球分类界面)。我们可以看出来,确实不同裁判之间的好球带是有显著区别的。

另一个信息是实线和虚线展示的内容,即同一个裁判在不同好坏球数时的好球带。我们可以看出来,在2-0的好球带要比0-2大了不少。事实上,以面积衡量,2-0的好球带比0-2的要大了50%左右,这是个非常显著的数字。

同样的方法,我们可以看不同球种的好球带大小。最终会发现,速球的好球带比曲球和滑球大了约5%左右。稍大一点,但大的并不明显。

最好的捕手每年大概能够赚取15分也就是1.5胜左右,这个数字是不低了。同一名捕手连续两年赚分的相关系数在0.6~0.7左右,是相当高的,说明这个模型较为可靠并且这反应的是一种有泛化能力的“球员技术”。具体的分析结果可参考论文。

顺便提一句,MLB目前在小联盟推广和测试所谓电子好球带。其模型并不是本文所提到的这种,而是按照规则原文的矩形来判定好球带。所以说,本文所述的模型并不能用到这个应用上来,而且如果电子好球带得以推广了,这个模型所研究的对象很多将不再成立。

该模型也会遇到和本文提到的模型相同的问题,具体的说就是如何根据打者的身高和打击准备姿势,判定好球带上下缘。事实上,该模型也是用机器学习模型来实现的,以该打者或身高类似打者以前的裁判判定标准为训练样本[8]。但是该模型大部分地方和本文所述的模型是不同的。它并不考虑捕手的接球。也没有不同好坏球数和不同球种的好球带差异。更没有不同裁判的差异。

本文介绍了棒球分析中的经典工作——好球带模型。该工作使用了层次贝叶斯模型,获取了靠谱的效果,并有包括指导投手投球、分析捕手接捕能力在内的若干应用。

我们可以这么看这样的训练方式:这种先训一部分、再训另一部分参数的方法就是类似机器学习里的坐标下降算法。这个算法是需要反复迭代才能够收敛得到最优解的。在这里我们没有迭代,所以是一个近似解。

求解算法是Laplace近似。虽然这不是最好的算法,但对绝大部分应用完全足够了。

目前市面上最好的库是stan,见 。其求解算法是MCMC或者一种通用变分推断。

合理来说,应该用计算机视觉的方式来识别打者的膝盖髌骨、肩膀以及裤腰带。mlb官方不这么做的原因未知。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注