大家好。我是 Ryan Cooper,JMP 的墨西哥湾沿岸系统工程师。今天和大家一起分享的是我的同事 Laura Higgins。
大家好,我是 Laura Higgins。我也是全球技术支持团队的系统工程师。
我们之前做的项目是关于美国职业棒球大联盟的鱼雷棒。这些球棒因其独特的设计和由此产生的进攻效果而备受关注。关于这个想法的起源,我们有一个小故事。四月初,也就是赛季刚开始的时候,我和劳拉在休斯顿观看了一场棒球比赛。我们当时去参加那里举办的探索研讨会。
那是赛季开始的几天,休斯顿太空人队(我所在的德克萨斯州的一支球队)正在和旧金山巨人队比赛,而旧金山巨人队正是劳拉的家乡。我们当时在场,听说过鱼雷球棒的热潮,也听说过纽约洋基队接连打出本垒打,而正是这支神奇的球棒,让这些本垒打接连不断。我们一边观看比赛一边讨论这件事,心想:“我们应该做一个关于这个的项目。”
这就是这一切的由来。我们很高兴能展示这些结果,因为赛季初,除了大家开始做这件事时的一些数据点外,几乎没有其他数据点。现在,我们收集到了很多数据点,并从中获得了非常有价值的见解。我们很高兴能为大家呈现这一切。
关于鱼雷球棒本身,我先简单介绍一下背景。我们接下来要研究的是鱼雷球棒的性能是否有显著提升。我们将重点关注探索性数据分析、数据挖掘以及使用Statcast进行建模。Statcast是美国职业棒球大联盟(Major League Baseball)的公共数据库,保存了大量与美国职业棒球大联盟相关的统计数据。
我们来仔细看看这支球棒是什么样子的。你会看到在最左边……让我把指针转向这里。你会看到左边的球棒,它看起来和右边的有点不同。右边的是一支传统球棒。你会看到球棒的侧面,边缘更直一些,而鱼雷球棒则是向内弯曲的。这里发生的情况是,更多的重量集中在你可能击球的最佳位置,而这支球棒则是均匀分布的。这转化到这张图上,在蓝色部分,你可以看到鱼雷球棒和更集中的最佳位置,而传统球棒,这个位置的分布更均匀,但可能没有那么有冲击力。
我们从这幅图的这部分转到这部分,你会看到传统球棒和鱼雷球棒的叠加和颜色相同,最佳击球点就在这里。现在的情况是,我们得到了预期击球出口速度(也就是球从这些球棒上飞出时的发射速度)的分布。如果球棒稍宽一些,预期的出口速度和发射速度会高出约 5-7%,最大击球速度也会更高。而如果用传统球棒击球,则会增加约 2-3%。这款球棒会对击球力度稍大的球员的表现产生非常大的影响,或者应该会对他们的表现产生影响。
这里还有一些其他的小图表。我强烈推荐大家观看一个视频,里面有人画了这些球棒和图形,并解释了球棒的结构。上面这张图值得一提,它就像挥动斧头一样,对于像传统球棒这样的东西,重量分布在斧头的最末端。而如果你把重量转移到离你更近的那一端,挥动起来就会容易得多。实际情况是,重量发生了轻微的移动,这使得挥动变得更容易。这里的一些机制可能会发生变化,至于具体如何运作,我们稍后会详细分析数据。
现在转到我们进行数据探索的方法和目标。这些数据是通过 PyBaseball(一个 Python 包)访问的,代码主要由 ChatGPT 编写。我在这里找到了我与 ChatGPT 对话的链接。值得一看的是,它是如何编写的,以及如何从 Python 中提取数据。
JMP 18 以及后续 JMP 19 及更高版本的优点在于,我们集成了 Python 功能。您可以生成 Python 代码,编写 Python 代码,执行所需的操作,然后将其导入 JMP,并从类似这样的软件包中获取数据。
这个棒球软件包针对每种投球大约有 119 个不同的变量。所以你得到了一行。我们来看看这里的数据集是什么样子的。每一行实际上代表一个事务和一个投球。每个投球都有 119 个不同的测量项,或者说是采集的数据点。我们获取这些数据,用鱼雷球棒进行细分,无论用户是否使用鱼雷球棒,ChatGPT 也发现了这一点。目前还没有很好的查找方法。它的文档记录不太完善,所以 ChatGPT 只能自己挖掘。
我们关注的是发射速度、直击球和爆发力以及挥杆技巧等关键指标。直击球和爆发力是与出手速度相关的指标。我们将查看上面这两张图片,它们来自MLB Statcast网站的词汇表中,我在参考资料中也提供了链接。
但是,垂直挥杆是击球时最大速度的百分比,而爆发力实际上是垂直挥杆的增强版。爆发力实际上是你能做出的最佳挥杆,我们预计,随着鱼雷球棒的使用成功,爆发力会有所提升。
我们使用了一些工具,比如图形生成器。您可以在下面看到其中几个。分布图、公式列、数据表标签(JMP 19 中的新功能),以及一些建模技术,例如 Bootstrap Forest、Boosted Trees 和 Workflow Builder,它们将所有内容整合在一起。总而言之,我们想要探索所选球员在采用鱼雷棒训练后的表现变化,并通过建模将其作为一个整体进行观察。
回到设置部分,我们来看看它是如何工作的。我提到了 JMP 中的 Python 脚本。这是该 Python 脚本的一段代码,以及它如何访问 Statcast 数据。然后我们还有 Statcast 数据本身。这是手动提取的四分卫和爆炸数据,因为这些数据实际上不包含在 PyBaseball 包的数据中。
这些信息必须整合起来,而目前的做法,或者说部分做法,是将这些“开球”(square-up)和“爆炸”(blast)数据片段保存到单独的文件中,然后使用“多文件导入”和 JMP 一次性导入。我有一个装满开球和爆炸数据的文件夹。我一次性导入了所有这些文件,将它们串联起来,然后将它们合并回主数据表脚本,这样我们就有了每笔交易的爆炸和开球数据,并为每个投球都进行了标注。
然后,我们使用所有已知鱼雷棒使用者及其开始使用时间的查找表。我们有一个公式,如果玩家的游戏日期在首次使用之后,则判定该玩家为鱼雷棒使用者,否则为零。然后,我们有一个工作流程将所有内容整合在一起,首先从 Statcast 数据中提取数据,然后从 Python 脚本保存的 CSV 文件中提取数据,最后导入多个文件。
一旦掌握了这些信息,我们就可以开始进行一些探索性数据分析。我们首先挑选了几个我们知道有一定影响力的球员。安东尼·沃尔普从一开始就被提及,他取得了一些不错的成绩。我们在这里做的是观察弹射速度的分布。我们来看一下。
这是 Graph Builder 中的一个图表,它是一个阴影图。X 轴上是发射速度。让我用激光笔指一下。X 轴上是发射速度,颜色是比赛年份。2024 年的蓝色代表发射速度比 2025 年略低。红色代表发射速度略高,然后这里还有一些汇总统计数据。
由此,我们想看看这对每个人来说是什么样子的。在最右边,有一张图表,其中我们将 2025 年的发射速度的众数和 2024 年的众数沿着一条线连接起来,以查看哪些人取得了这样的进步。我们发现,并非每个人都能做到这一点。安东尼·沃尔普最终通过改变鱼雷球棒在发射速度方面取得了一些成功。但其他人用绿色表示,还有一些我们不确定是否使用鱼雷球棒但可能使用过的人,在这里用橙色表示。这导致我们想到这对人们的影响是不同的,这也是模型最终显示的结果,劳拉马上就会展示。
我们深入研究的另一个人名叫科尔森·蒙哥马利。他的特别之处在于,他从2025年7月初才开始在大联盟打球。大约三周的时间里,他没有使用鱼雷棒,然后突然间,当他开始使用鱼雷棒时,他的本垒打数量开始增加。你可以看到,这里的圆圈代表本垒打,他的爆发力也增加了。红色部分代表爆发力。y轴上的圆圈代表的是发射速度。然后,我们得到了发射速度的移动平均值。
大约在7月31日,我记得是8月1日,他的鱼雷棒断了,之后大约一个半星期他都没有其他球棒可用,直到他们给他做了新的。你可以看到,出口速度明显下降,而且发射速度的高点没有那么多,本垒打也没有那么多。他拿回那根球棒后,马上就打出了几个本垒打,而且发射速度要高得多。这显然对科尔森·蒙哥马利产生了积极的影响。以上涵盖了探索性数据分析的结果以及一些方法和目标,现在我将把工作交给劳拉进行数据挖掘和建模。
谢谢,Ryan。我最终关注的问题是鱼雷球棒如何影响击球特性。我们掌握了所有这些数据,所以我使用了数据挖掘和建模方法。下一张幻灯片,就是这样。数据的第一个问题是,使用鱼雷球棒的人数比例太小。当你的数据集非常不平衡时,如果你要寻找的数据只占数据中的很小一部分,那么你实际上很难找到任何信号。
所以我需要创建一个数据集,包含鱼雷球棒使用者和非鱼雷球棒使用者的相同数据量。我决定公平起见,与其使用整个数据池并随机抽取一些数据,不如创建看起来相似的数据集。所以我根据鱼雷球棒使用者的发射速度进行了分层。我认为从非鱼雷球棒使用者中抽取一个具有代表性的样本,这样比较具有代表性。这就是我分层的方法。下一张幻灯片。
数据非常非线性。我尝试了一些其他建模技术,树方法效果最好。对于非线性数据来说,情况确实如此。线性模型的表现很奇怪。Bootstrap森林法给出了最佳且最清晰的答案。我也尝试了提升法,它给出了定性上相似的答案,但实际上并没有改善结果。
我使用了33%的验证列,你可以看到,总体而言,考虑到每只蝙蝠是否使用了鱼雷蝙蝠,该模型解释了大约9%到15%的数据,具体取决于你想使用哪个项目。错误分类率还可以。所以它有一定的预测能力,但并不完美。但其中肯定有信号。
这些结果是基于 Bootstrap 森林法得出的。如果你看一下这张图,就会发现这是各列的贡献。击球速度绝对是最重要的因素。其他大多数列也产生了类似的影响,我将在下一张幻灯片中详细讨论这些列。
使用分析器时,这里的“鱼雷球棒”1 表示他们有鱼雷球棒,0 表示他们没有使用鱼雷球棒。我们看到的是更长的挥棒距离。挥棒距离是球棒移动的整个范围,记住,鱼雷球棒可以挥得更快,我们也看到了这一点。我们看到了更高的球棒速度和更高的整体发射速度,而发射速度指的是球的实际飞行距离。当你在观看球赛时看到图表时,显示的是出口速度,它能很好地指示球的飞行距离,尤其是在你想打出本垒打的时候。在那条注释中,我们还看到了球实际飞行位置的指标之一。对于守备位置,它确实向场地内飞得更远了。它是向左飞还是向右飞实际上并没有被纳入模型。
模型中还有其他一些内容,基本上都指向同一件事:使用鱼雷棒的人击球位置更稳定,这很合理。如果球棒上的甜蜜点较小,那么在挥棒机制方面,你必须成为一个更自律的击球手。我们并没有探究这是否成功。也许下一篇论文会讨论。但结果肯定是,鱼雷棒会改变你的挥棒机制,无论好坏,都取决于击球手。但它确实会改变击球手。下一张幻灯片是这样的。海报里有一个GIF动图。如果你想查看所有变量的概况或范围,你可以在PowerPoint里查看。Ryan,回到你的问题上。
我们从建模和一些探索性数据分析中得出的一些结论……我实际上会回到这张图表,以便我们能够探索其中的一些结论。无论球员是否成功,鱼雷球棒通常会改变挥棒动作。这与这里发生的情况一致。每个挥棒的人都会有不同的感觉。结果好坏取决于他们是否成功。因此,正如您在探索性数据分析中所看到的,发射速度、打击面和爆发力都是衡量击球质量提升的有用指标。
鱼雷棒或许能提升部分击球手的表现,但并非所有击球手都能做到。因此,个人的技术和适应性至关重要。你必须能够控制挥杆动作的进行以及它的变化,才能成功打出正手、爆发力十足或更快的出手速度。
我们从球员的发射速度、爆发力和正手击球中获得了一些宝贵的洞察。但实际上,数据挖掘和建模揭示了鱼雷球棒如何影响挥棒机制本身。在此过程中,建模受到球棒使用情况报告的限制。我们并没有太多可靠的数据可供参考,这些数据仅仅列出了每个球员使用鱼雷球棒的情况和时间。但我们能够发现的线索确实很有影响力,并且仍然为我们提供了一些可以得出结论的结果。
然后在右下角,这是击球手的站位和截击点,以及你的挥棒距离。这些只是词汇表中的一些定义,与劳拉解释的力学部分有关。那么你的挥棒距离是多少?然后是接球的截击点,在挥棒过程中会稍晚一些,但速度会快得多。这样你就能更快地接住球,并且更多地领先于球。这在建模中得到了充分体现。
我们的演示到此结束。右下角有一些参考资料,如果您想进一步了解,绝对值得一看。我提到了Statcast、搜索和词汇表。还有一些评论文章可以参考。
我发现的真正引起我兴趣的是萨凡纳香蕉队(Savannah Bananas)的这段视频。视频时长30分钟,但他们用自己的方式测试了鱼雷球棒。样本量和设计可能并非最有启发性,但听他们谈论如何更好地击打内角球,以及从实际使用球棒的领域专家那里获得的其他见解,以及他们作为棒球运动员可能获得的见解,真的非常棒。此外,还有一些关于科尔森·蒙哥马利(Colson Montgomery)的文章,左边第二张图表就是关于他的,正是这些文章促使我产生了绘制图表的想法。好了,感谢大家观看我们的演示,祝大家今天过得愉快。