大家好。我是 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)的文章,左邊第二張圖表就是關於他的,正是這些文章促使我產生了繪製圖表的想法。好了,感謝大家觀看我們的演示,祝大家今天過得愉快。