大部分跑步 App 最後都會給你一個數字:VDOT、跑力、體能分數。一個數字很好懂,問題是,分數一樣的兩個人,不一定會在同一個地方撐不住。一個可能在 30 公里撞牆,另一個到了間歇最後兩趟才開始掉速。我們花了幾個月,看過 8,966 堂訓練與 400 多位跑者的資料,最後決定:跑力要拆成兩個軸來看。
同一個分數,弱點可能完全不同
這個落差不是我們自己猜的。古典的三參數模型(最大攝氧量、乳酸閾值的分數利用率、跑步經濟性)合起來,大約只能解釋馬拉松表現變異的七成;剩下的三成,過去一直沒有一個好名字。
2024 年,運動生理學家 Andrew Jones 把這一塊命名為 physiological resilience(生理韌性)。就算最大攝氧量和閾值相同,有些人跑了兩小時後,數值幾乎沒變;有些人卻早就垮了。跑步能力不只看「你最好的時候有多強」,也要看「你能維持多久」。
VDOT 量的是前者。它從比賽成績反推,讓不同跑者有一把可以互相比較的尺,我們沒有要丟掉它。但後者要等時間拉長、疲勞累積後才看得見,本來就不是 VDOT 要回答的問題。
我們想問的不是「怎麼把 VDOT 算得更準」,而是「疲勞之後會發生什麼事,能不能從日常訓練資料裡看出來」。
第一個軸:有氧能力,看你能穩定跑多長
固定配速跑久了,心率通常會慢慢往上飄。這叫 cardiovascular drift(心血管漂移):熱負荷與脫水一路累積,每一下心跳打出去的血變少,身體只好把心跳拉高來補。
在我們的資料裡,漂移不是隨機出現,而是逐步累積出來的。同一個人跑得越遠,漂移也跟著上升;103 位跑者中,有 90 位方向都相同。我們前後試了五種量法,只有一種抓得到這個訊號。原因不複雜:漂移是跟著絕對時間累積,不是跟著「跑程的百分之幾」累積。參考窗如果用比例切,例如「最後 10%」,反而會把「跑了多久」這個主要因素除掉。
但漂移小,未必代表能力好。跑得慢、跑得短,漂移自然也會比較小。所以這個軸會把三件事一起看:實際跑到的距離、同距離下的漂移表現,還有那堂課的相對配速水準。距離也不是該「控制掉的干擾」,它本來就是能力的一部分。
這是我們刻意留下來的資訊:分數會跟你的長跑距離高度相關,我們沒有把它「修掉」。對馬拉松來說,能不能穩定跑到 30 公里,本來就是能力,不是資料偏差。
第二個軸:速耐力,看你在高強度下掉得多快
速耐力(speed endurance)的研究主要來自足球與中距離,Jens Bangsbo 的框架把它分成「產生」與「維持」兩種。長跑在意的是後者:不只看最快能跑多快,更要看高強度重複時,你會掉得多快。
我們先後試過兩條理論很漂亮、放進現有資料卻走不通的路。這些失敗也很重要,因為它們畫出了資料的邊界:
- 臨界速度+D′ 模型:它得在時間軸上外推到接近零的位置。一般跑者能提供的成績點只有三個左右,而且全擠在一起。外推距離跟資料本身的跨度差不多,這樣算出來的不是估計,是猜。
- 無氧速度儲備(ASR/SRR):這個模型要有真正的最大衝刺速度。但我們的母體最快 10 秒配速中位是每公里 3 分 36 秒,那不是衝刺。這群人不衝刺,模型就沒有輸入。
最後真正用得上的是自我參照:先不問「他跑得多快」,改看「同一堂課裡,後面比前面掉了多少」。我們從間歇課與持續配速課看四個彼此接近正交的切面:後段相對於最好一段的掉速、單趟內的衰減、配速穩定度,以及持續跑後半段的掉速。四個切面看到的東西不同,合起來才成為這個軸。
但自我參照也有盲點:它看不到絕對速度。同樣是 16 趟 400 公尺,心率和掉速都一樣,一個跑 3 分速、一個跑 5 分速,四個切面卻會給出幾乎相同的分數,顯然說不通。所以這個軸刻意保留一部分 VDOT 成分,讓不同跑者之間仍然可以比較。有氧能力那個軸也用同樣的處理原則。
把兩個軸放在一起看
我們把兩個軸當成 X、Y 畫成散布圖,再用全馬完賽成績上色。兩個軸都有分數的跑者共 184 位,其中 92 位有全馬紀錄。
第一件要問的事很基本:兩個軸會不會其實在講同一件事?如果會,硬拆成兩個軸就沒有意義。
兩軸之間的相關是 +0.42,共同變異不到兩成。兩者確實有關,體能好的人通常兩邊都不差,但大部分仍是各自獨立的資訊。
接著看四個象限的全馬成績中位:
| 象限 | 人數 | 有全馬 | 全馬中位 |
|---|---|---|---|
| 右上 兩個軸都強 | 61 | 41 | 3:12 |
| 右下 有氧強、速耐力偏弱 | 31 | 19 | 3:51 |
| 左上 速耐力強、有氧偏弱 | 31 | 9 | 3:46 |
| 左下 兩個軸都弱 | 61 | 23 | 4:33 |
高手很集中地落在右上角。兩端差 81 分鐘,重複抽樣算出的區間是 59 到 104 分鐘,不會只是巧合。這是單一指標排不出來的差別;只看其中一個軸,右上會和左上(或右下)混在一起。
中間那兩格就不一樣,不能這樣下結論。3:51 和 3:46 看起來有高有低,但左上只有 9 個人有全馬紀錄;重算之後,兩格的差距落在正負半小時以上。換句話說,以現有的樣本,我們分不出「有氧強、速耐力弱」和「速耐力強、有氧弱」哪一種跑得快。這件事該由資料回答,不能由我們挑一個順序寫上去。真要回答,得等有全馬成績的人再多一些。
最後再看母體裡的 15 位破三跑者:
15 位破三跑者,全部落在有氧能力的母體中位以上,沒有一個例外。他們的速耐力百分位中位是 89、有氧百分位中位是 84。
分數「看起來不對」時,先查原因
看到分數特別高或特別低,先別急著判定指標失準。真正要緊的是,你知不知道它為什麼離群。
那 15 位破三跑者中,有氧能力最低的兩位是 55.0 和 55.2 分,明顯低於其他破三跑者的 63 到 97 分。往下查,原因很直接:他們比較長的那些課只有 18.7 公里和 16.2 公里。把這 15 個人的分數和他們比較長的課放在一起看,兩者的相關高達 +0.94——這個分數幾乎就在講他們最近跑到多長。
這不是指標失準,而是他們最近沒有跑長。一個能跑 2:56 的人當然跑得動 30 公里,但那個賽季的訓練裡沒有這樣的課,我們就沒有資料可以證明。分數只反映「我們看到了什麼」,不替他猜「應該有多強」。
所以系統不能只丟分數。每個分數旁邊都有一句話,解釋這個數字怎麼來:
「你比較長的那些課大約 18 公里。這個分數主要看你能穩定跑多長,想往上走,長跑得拉到 23 公里左右。」
這句話不是固定模板,而是拿你自己的資料現算,告訴你還差多少、接下來該往哪裡補。但如果分數低只是因為資料還不夠,說法就會換成:
「紀錄還不夠:目前只涵蓋 8 週、只有 7 次有氧課。累積到 8 週、12 次左右(大約半個訓練週期)分數才會穩定下來,現在通常會比實際偏低一點。」
這兩句話講的是完全不同的事:一個是「分數準,但你的訓練內容撐不出高分」;另一個是「資料還不夠,分數本身還會動」。混著講,用戶只會覺得系統在打模糊仗。
現在還算不出來,也要說清楚缺什麼
我們的資料裡,有 282 位跑者至少有一個軸還算不出來。這時留一片空白,或硬塞一個不可靠的數字,都沒有幫助。
我們改成直接告訴他們還缺多少:其中 83 位再累積 1 到 2 次有氧課就算得出有氧能力,84 位再一次速度課就算得出速耐力。
「還算不出速耐力:目前累積 2 次速度課、另有 4 次因為節奏抓不出來沒被算進去。同一種趟距要累積 2 次,或是有 2 次持續配速課(3–10 公里、後半到閾值心率)。」
這個問題,是我們的創辦人自己用到時抓到的。我明明跑了間歇,系統卻顯示「還沒看到你的間歇課」。往下查才發現,課其實有讀到,只是被上游的判定規則擋掉。最後修的不只那句訊息,規則本身也一起改了。放寬之後,可用的間歇課多了四成三,指標的可重複性幾乎沒變(差距落在重複抽樣的雜訊裡),跟比賽成績的相關性還變好了一點。
兩個問題,值得分開回答
這兩個軸不是要取代 VDOT,而是補上它原本不回答的那一塊:你的極限在哪,和你能維持多久,是兩件事。
右上角的人兩件事都做得到。右下角的人耐力撐得住,高強度卻會掉;左上角的人快得起來,但拉不長。知道自己在哪一格,比只知道一個分數更有用,因為下一個週期該補什麼,也會跟著清楚。
這兩個軸都從平常的訓練資料算出來,不用多做一次測驗,也不用特地去比賽。