僅是出自興趣的side project,內容如有疏漏歡迎留言討論XD
在看棒球時,你們有沒有這種經驗:看著看著,突然覺得場上這位王牌投手「好像怪怪的」?也許球速還在,但球就是一直被打到甜蜜點,然後下一秒就大爆炸(Meltdown)了!這種時候,總教練總是成為眾矢之的。
「早就看出來他狀況不行,搞不懂為什麼不換?」
應該很常看到諸如此類的留言吧!
為了不成為事後諸葛的酸民,如果我們能夠透過數據,試著量化出投手被打爆前的「真實徵兆」,等有一天我們當總教練時,就能「精準換投」防止被罵到臭頭(?
總之,我們關心的主題是「投手被打爆前會有什麼徵兆?」
想進一步分析的話,「打爆」這個詞太模糊了,我們必須給它一個可量化的描述。
回想一下,當你看一場球賽時,你什麼時候會認為投手被「打爆」呢?
以我而言,最直觀便是失分。
但如果我們只看失分就認為投手崩盤(Meltdown)會怎麼樣呢?試想一個情境:
- 投手A第7局體力透支,連續保送兩個人(一二壘有人),這時候教練把他換下場。此時投手A帳面上還沒失分。但是,接替的後援投手一上來就被打全壘打,這 2 分將會算在投手A的帳上(ER),導致投手A被我們判定為崩盤。
可是我們現在關心的是「投手A崩盤前有什麼訊號?」以上的情境會導致我們用投手A的數據來預測接替的後援投手被打全壘打的可能性,這在邏輯上是斷裂的。
只看失分不行,那我們多看長打(XBH, Extra-Base Hits)呢?
當投手狀態下滑或球威減弱時,最直接的懲罰就是被打長打,特別是全壘打。
因此,我們暫且定義「崩盤」為:
「在該局中,被擊出 2 支以上長打,且投手被換下場或失分 > 3」
我們再考慮個情境:
- 假設投手A在某一局遭遇了亂流:保送、安打、保送(堆滿壘包),然後被對手第四棒扛了一支「滿貫全壘打」。結果是失了4分,隨後被換下場。
根據剛剛的定義:這一局只有1支長打(那支全壘打)。
判定:因為不滿足「2 支以上長打」,這一局在數據上會被標記為「正常」
這絕對是嚴重的崩盤吧!但在目前的定義下會被漏掉。
因此我們應該多考慮被「一棒擊沉」的可能性。修正為:
該局滿足以下任一條件即視為「崩盤(Meltdown)」:
- 長打轟炸:被擊出 2 支以上長打(原本的條件)。
- 一棒擊沉:被擊出 1 支全壘打且該局失分 ≥3 分(涵蓋滿貫砲或三分砲的情況)。
- 純粹失分:該局責任失分(ER)≥ 4 分(無論是被長打還是連續安打堆疊,單局丟4分對王牌來說就是崩盤)。
嗯,現在看起來很完善了,但還少考慮一件事––運氣。
如果我們把「運氣不好」導致的失分局也算作「崩盤」,我們的隨後建立的模型就會很困惑。因為模型會試圖從投手的球速、轉速等特徵中尋找徵兆,去解釋為什麼游擊手發生失誤,或者為什麼對手打出了一支軟弱的德州安打。這在邏輯上是不通的。
因此,我們引入Baseball Savant公開數據庫中xBA(Expected Batting Average)指標。
xBA是根據擊球初速(Exit Velocity)和擊球仰角(Launch Angle)計算出來的「這球預期是安打的機率」。在2025年球季,MLB打者xBA平均為0.245,像Aaron Judge這種強打者會達到0.303,大谷翔平則為0.278。
接下來,我們試著定義「真實崩盤(True Meltdown)」:
單局必須同時滿足以下兩個條件,才標記為 1 (Meltdown),否則為 0。
- 條件 A:造成實質傷害
- 該局被擊出 2 支以上長打 (XBH ≥ 2) OR
- 該局被擊出 1 支全壘打且該局總失分 ≥ 3 OR
- 該局責任失分 (ER) ≥ 4
- 條件 B:擊球品質確認
- 該局所有「擊球結果」的 平均 xBA ≥ .300。
註:聯盟平均 xBA 約在 .240-.250,若該局平均 xBA 超過 .300,代表對手是結結實實地咬中了球,而非運氣。
定義完「崩盤」了,可以開始分析了吧?
不不不,還記得我們一開始的題目嗎?––「投手被打爆前會有什麼徵兆?」
徵兆是什麼?如何被量化?
根據教育部辭典,
徵兆是事情發生前所顯現的跡象。
表示徵兆一定是在某個時刻前/後發生了「差異」,我們才會判斷那是一個「徵兆」
因此,我們首先得定義好基線(baseline)。
那問題又來了,「崩盤前的基線」該跟「當季平均」比?還是跟「顛峰期平均」比?
那得看我們關心的是什麼。
如果我們關心的是"In-game degradation"(賽內衰退),那我們重視的應該是投手當天狀況。
我認為比賽前30顆球應該就能大概判斷先發投手今天的狀況(純粹操作定義),
所以將基線定義為「該場前 30 顆球」。
換句話說,我們討論的「徵兆」是投手「當下狀況」與「該場前 30 顆球」的數據差異。
那「當下狀況」又是什麼?
這個簡單,只要看過去 20 顆球的數據即可。(又一個操作型定義XD)
好了,到這邊我們的題目終於定義清楚:
「投手在發生『崩盤』前,當下狀況與該場前30顆球是否存在差異(徵兆)?」
接下來,我們需要挑選一位投手來分析看看。
在此我選擇 Max Scherzer (私心喜歡)
選擇2019-2023年的資料分析,根據以上對崩盤的定義,分析結果為:
- 總資料筆數 (Pitch Count): 12840
- 正常球數 (Label 0): 12009
- 崩盤局球數 (Label 1): 831
- 崩盤樣本佔比: 6.47%
不愧是大投手,崩盤只占6.47% XD
那我們看到什麼「徵兆」呢?
我們先試著以直球「球速」分析看看:
定義velocity delta為「最近20顆球」與「該場前 30 顆球」的速度差異(若未滿30顆則全計入)

Max Scherzer直球均速差異統計 (2019-2023)

Max Scherzer 速球球速於正常局/崩盤局變化(2019-2023)
左邊的圖顯示Scherzer在正常/崩盤的局數中,直球球速是差不多的,甚至崩盤局略快一點(表格可以看到崩盤局平均只掉0.51 mph,正常局平均掉0.58 mph)。
右邊的圖則為Scherzer在正常/崩盤的局數中,隨局數的掉速曲線。藍色曲線可以看到Scherzer是越投越猛的類型(6-9局速度上升)XD。有趣的是,比較兩條線可以看出,Scherzer在崩盤的情境下,球速確實沒有退化得比正常情境快。
換句話說,當遇到危機時,Scherzer 很有可能會試圖用力催球速。
不過,既然球速沒問題,那Scherzer為什麼崩盤呢?
接下來看看失投率(meatball):

Max Scherzer 正常局/崩盤局失投率(2019-2023)
Meatball為一顆投手跑進紅中/甜區的球。Baseball Savant有Meatball rate,但我這邊採自己的定義。簡單來說是計算最近20球內,距離紅中0.8 英尺以內的球。
嗯...失投率看起來好像也沒太大差異 XD
既然單一變數看不出差異,那Scherzer的崩盤很可能是「多變數的交互作用 」導致的。 (例如:球速只掉一點點、第三次面對同一打線...等 ,這兩個單獨看都不嚴重,加在一起卻可能導致崩盤。)
因此,接下來我們交給機器學習,透過隨機森林看看能捕捉到什麼訊號:

Max Scherzer 崩盤局特徵分析(2019-2023)
噹噹!
頭號兇手:`release_pos_z_delta` (出手點高度變化) - Importance: 0.14
這代表 Scherzer 在崩盤局時,他的出手點高度跑掉了。
嗯?出手點高度改變會怎麼樣呢?
出手點一變,打者視角的「進壘角度」就變了。原本看起來會像好球的滑球,現在看起來就像壞球;或者原本高位直球上竄效果減弱,不再有引誘揮棒的效果。
那為什麼出手點高度會改變?
這就可能跟投手疲勞或過度用力有關。疲勞時腿部力量支撐不住,身體重心會下沉,或者手臂跟不上身體旋轉,導致出手點變低。
接下來看
二號兇手:`rolling_meatball_rate` (失投率) - Importance: 0.10
結合出手點高度變化來看,很有可能是因為出手點跑掉了,導致Scherzer 失去了精準的控球。他試圖投到邊角,但因為放球點不穩定,球飄進了紅中。
為了驗證這個猜測,接下來針對出手點位置的標準差分析:

Max Scherzer 正常局/崩盤局出手點位置標準差差異(2019-2023)
咦?我們可以看到崩盤局時,Scherzer 的出手點反而非常穩定(Std 比正常局低)。
但剛剛模型顯示這是出手點位置是第一名的特徵,說明位置跑掉確實與崩盤有關。
這表示什麼?
表示當 Scherzer 遇到危機時,他並沒有「亂丟」。相反地,他可能因為心理壓力或過度專注,導致身體變得僵硬,機械式地重複一個錯誤的出手點。
到這邊,我們可以下個結論:
「Scherzer 的崩盤並非源於體力透支或控球亂掉。 相反地,當危機出現時,他會進入一種『過度僵化』的狀態。」
換句話說,他變成了球會飄向好球帶紅中附近的發球機。
我們可以看一下Scherzer常投的速球以及滑球數據:

Max Scherzer 正常局/崩盤局不同球種數據差異(2019-2023)
請看 FF (四縫線速球)的這兩欄數據變化:
1. `is_in_heart` (甜區率): 42.4% → 47.0%
is_in_heart = 該顆球是否進到好球帶視覺上的紅中區,也是採用我自己的定義:距離中心小於 0.8 英尺 。
相當於Scherzer的速球在崩盤局,投進了甜區的比例比正常局高了5%。
2. `plate_z` (進壘高度): 2.638 → 2.716
2.5 ft是好球帶絕對中心。
考慮到Scherzer的速球經常有上竄的效果,正常局2.63 ft通常是 Scherzer 想要的位置(High Fastball),可以製造揮空。
但崩盤局時,進壘高度上升到2.71 ft,相當於往上移了2.4公分左右。
配合 `dist_from_heart` 變小 (0.96 → 0.93),這代表球沒有高到足以誘騙打者揮空,而是停留在打者最舒服的「腰帶至胸口 」位置。
dist_from_heart =「距離紅中中心點多遠」
以上可以看出,崩盤局時Scherzer試圖要把直球投在高角度,但因為我們之前發現的「機制僵化/出手點跑掉」,導致球沒有「竄」上去,而是死死地掛在了好球帶上半部的紅中區。這是全壘打率最高的位置。
因此,Scherzer崩盤並非源於體力下滑或滑球失控,問題出在四縫線速球的進壘點品質。
最後我們再重新整理一下Scherzer崩盤的發生機制:
- 當局勢緊張時,Scherzer 試圖用力投球。
- 導致投球機制僵化,出手點出現系統性偏移。
- 結果:直球無法精準壓在邊角或竄升至誘餌區,而是上浮並集中於好球帶上半部的紅中區域 。
好了!以上就是我們對 Max Scherzer 這位大投手的「崩盤徵兆」分析,如果覺得有趣或有其他想法歡迎在下方留言或按讚!你最好奇哪一位王牌投手的崩盤徵兆呢?歡迎告訴我, 我們下次見囉!















