跳至主要內容

運動表現的數學建模:從Banister到現代——為什麼公式救不了你,但值得你懂

訓練科學
匿名
2026年7月13日
5 次觀看

開場:那位盯著TSS數字失眠的破三跑者

我帶過一位工程師學員,姑且叫他阿哲。他是台北某科技公司的資料工程師,數字是他的母語。他來找我時已經跑進全馬3小時15分,目標是破三。第一次面談,他打開筆電,螢幕上是一張自己用Python畫的曲線圖:藍線是「體能」,紅線是「疲勞」,兩條線相減的綠線就是他預測的「表現」。他很得意地說:「教練,我把Banister模型自己刻出來了,這禮拜綠線會到高點,所以我排了一場半馬測驗。」

結果那場半馬,他跑爆了。配速崩掉,最後三公里用走的回家。

他百思不得其解:「數學不會騙人啊,為什麼模型說我狀態最好,我卻跑得最差?」

這篇文章,就是要回答阿哲的問題。運動表現的數學建模,從1975年一路發展到今天的機器學習,是一段迷人又充滿陷阱的歷史。我想帶你搞懂:這些公式在說什麼、它們為什麼有用、更重要的是——它們為什麼會失準,以及身為一個在台灣訓練的實際運動者,你該怎麼聰明地使用它們,而不是反過來被它們綁架。

先講結論,免得你看完覺得我在澆冷水:數學模型不是水晶球,它是一副眼鏡。 戴上它,你會看得比較清楚,但你還是得自己走路,還是會踩到石頭。

一、科學基礎:Banister到底在算什麼

1.1 一個違反直覺的核心觀念

1975年,一位叫Eric Banister的學者提出了一個到今天仍在影響所有運動App的想法:衝量—反應模型(impulse-response model)

他的核心洞見其實非常符合我們的身體經驗,卻常被業餘者忽略:每一次訓練,同時產生兩個效果——一個正面的「體能(fitness)」,一個負面的「疲勞(fatigue)」。你當下能表現出來的能力,等於體能減去疲勞。

用一條讓所有人都記得住的公式來寫:

表現(Performance)= 體能(Fitness)- 疲勞(Fatigue)

這聽起來廢話,但Banister補上了關鍵的第二層洞見,這才是精華所在:

在一次訓練後,疲勞一開始比體能大,所以你的表現能力會先下降;但疲勞消退的速度比體能快,所以隨著時間過去,體能逐漸「浮出水面」,表現能力才會上升。

這正是「超量恢復」與「減量(taper)」背後的數學語言。你練完一組大課表隔天腿很沉、跑不動,不是因為你變弱了,而是因為疲勞這條負面曲線暫時蓋過了體能這條正面曲線。等疲勞退得夠多,你「浮上來」的那一刻,就是你狀態的高點。

我常跟學員這樣比喻:體能像存款,疲勞像卡債。 你每次刷卡(訓練)都同時增加存款也增加卡債,但卡債的利息還得快、存款留得久。減量週就是「先別刷卡,讓卡債退掉,把存款亮出來」的過程。

1.2 怎麼把「訓練」變成一個數字:TRIMP

模型要運轉,得先把「今天練了多少」量化成一個數字。Banister用的工具叫做 TRIMP(Training Impulse,訓練衝量)

最基本的算法概念是:

TRIMP ≈ 運動時間 × 平均心率的強度加權

這裡的心率不是直接拿原始bpm去乘,而是用「心率儲備(Heart Rate Reserve)」的概念——也就是你當下心率落在「最大心率減安靜心率」這段區間的相對位置,再乘上一個隨強度上升而變大的加權係數(因為高強度的生理壓力是非線性放大的,不是線性的)。

舉個台灣跑者容易懂的例子。假設阿哲:

  • 安靜心率 48 bpm、最大心率 190 bpm,心率儲備=142 bpm
  • 某天在河濱慢跑60分鐘,平均心率 140 bpm

他的相對強度大約落在 (140−48)/142 ≈ 0.65,屬於中低強度。系統會給這段一個中等的加權,算出一個中等的TRIMP值。如果同樣60分鐘他去操場跑間歇、平均心率飆到175 bpm,相對強度衝到 0.89,加權係數大幅放大,TRIMP值可能是慢跑的兩倍以上。

重點不是記公式,而是理解它想捕捉什麼:既久又累的訓練,衝量最大;又短又輕的,衝量最小。 這跟你身體的直覺是一致的。

補充說明:你可能在Garmin、Strava、TrainingPeaks看到的是TSS(Training Stress Score)或Suffer Score,它們是TRIMP的近親,用功率或心率去估算同一件事——今天這一課,對身體的內部負荷有多大。名字不同,靈魂一樣。

1.3 兩個時間常數:模型的靈魂

把每天的TRIMP餵進模型後,體能和疲勞各自用一條「指數衰減」曲線去累積與消退。每條曲線有一個 時間常數(time constant),決定它退得多快:

成分 意義 典型時間常數(僅為概念範圍) 白話
體能 Fitness 訓練帶來的長期正面適應 較長(數週等級) 存款,留得久
疲勞 Fatigue 訓練帶來的短期負面消耗 較短(數天等級) 卡債,退得快

我要特別強調:上表的時間常數只是「概念上的量級」,不是給你直接套用的數字。 每個人、甚至同一個人在不同訓練階段,這些參數都不一樣。這正是後面要談的「模型失準」的第一個伏筆。

1.4 五十年的演進:一張時間軸看懂建模史

很多人以為運動建模是最近才有的東西,其實這條路走了半個世紀。我幫學員畫過一張簡化的時間軸,讓大家理解「我們現在用的App,站在誰的肩膀上」:

年代(概略) 里程碑 帶來的觀念轉變
1970年代 Banister提出衝量—反應模型與TRIMP 第一次把「訓練→表現」寫成可計算的公式
1980-1990年代 模型被用於游泳、跑步、自行車的個案研究 從理論走向實際選手的追蹤
2000年代 TSS、功率計普及,商用平台興起 把學術模型包裝成人人可用的儀表板
2010年代 學界系統性檢視模型的統計缺陷 開始誠實面對「預測不準」這件事
2020年代至今 機器學習、多變量方法補強傳統模型 從兩變量走向多維度,但仍需大量乾淨資料

這張表想傳達的重點是:每一代方法都不是推翻前一代,而是補上前一代的盲點。 Banister的公式到今天仍活在你手錶的每一次計算裡,只是外面多包了好幾層。理解這個脈絡,你就不會盲目崇拜「最新的AI預測」,也不會輕視「老掉牙的TRIMP」——它們是同一條河的上下游。


二、實務方法:模型在真實訓練裡怎麼用

數學歸數學,我們是要拿來練的。以下是我實際帶學員時,怎麼把這套框架落地。

2.1 三個你天天在用、卻不一定叫得出名字的指標

現代訓練App(TrainingPeaks的PMC圖、intervals.icu、Garmin的Training Status)幾乎都是Banister模型的直系後代,只是換了包裝。它們通常給你三條線:

指標(常見英文縮寫) 對應Banister概念 白話解讀 實務用途
CTL(慢性訓練負荷,長期平均) 體能 Fitness 你過去約6週累積的實力底 看長期進步趨勢
ATL(急性訓練負荷,短期平均) 疲勞 Fatigue 你最近約1週累積的疲勞 看是不是練過頭
TSB=CTL−ATL(訓練壓力平衡) 表現 Performance 你今天「浮出水面」多少 抓比賽狀態高點

阿哲當初的錯,就是他只盯著TSB(也就是那條綠線),看到它轉正就以為狀態到頂,直接排了硬測驗。但TSB是個「平均」的間接推估,它不知道你昨晚只睡5小時、公司趕專案壓力爆表、外食吃太鹹水腫、又剛好遇到台北一波濕熱的梅雨。模型看得到你的訓練,看不到你的人生。

2.2 一份實際可操作的「減量週」課表範例

減量(taper)是Banister模型最經典、也最被實證支持的應用——透過減少負荷讓疲勞退掉、體能浮出,在比賽日達到TSB高點。以下是我給阿哲設計、賽前兩週的減量框架(以全馬為例,強度區間用主觀感受RPE 1-10搭配心率描述,避免假精確):

賽前週次 週跑量相對平時 關鍵課表 目的(用模型語言說)
賽前第3週(最後一個大週) 100% 一次長距離、一次節奏跑 最後一次墊高體能存款
賽前第2週 約70-80% 保留強度、砍掉量 開始讓疲勞(ATL)下降
賽前第1週 約50-60% 短間歇維持神經肌肉銳利度 ATL大幅退、CTL幾乎不掉
賽前2-3天 約30-40% 幾組短加速、大量休息 TSB衝到高點,狀態浮出

這裡有個常被誤解的關鍵:減量不是完全停練。 完全休息會讓「銳利度」流失(神經肌肉的協調、乳酸耐受的手感)。正確的減量是「砍量、保強度」——大幅減少總跑量,但保留一點點高強度刺激,讓體能的降幅遠小於疲勞的降幅。這正是模型告訴我們的:疲勞退得快、體能退得慢,所以短時間的減量能讓TSB淨值上升。

2.3 台灣情境的校正:模型沒告訴你的變數

在台灣訓練,有幾個本土變數會嚴重干擾模型的預測,我一定會提醒學員:

  • 濕熱:台灣夏天動輒32度、濕度80%以上。同樣的配速,在濕熱環境下心率會拉高10-15 bpm甚至更多。這意味著你的TRIMP會被高估——模型以為你練得很重(心率高),但其實你只是在跟環境搏鬥、真正的訓練刺激沒那麼大。夏天的CTL數字要打點折扣看。
  • 外食與水分:台灣外食普遍偏鹹,鈉攝取偏高,賽前容易水腫、體重虛胖,影響體感與配速。減量週我會請學員稍微注意飲食清淡、留意水分,但這是一般性建議,不是精算的鈉劑量。
  • 場地:河濱車道、操場PU跑道、學校田徑場是多數台灣跑者的主場。河濱平坦好抓配速但夏天曬、冬天東北季風逆風;操場單調但強度課好執行。這些都會影響同一份課表的實際生理負荷,而模型只看到心率與時間。

2.4 自行車的特例:功率讓建模更準,但也更容易自欺

這篇分類在「單車科學」,我得特別談談自行車。相較於跑步只能靠心率估負荷,自行車有一個跑者羨慕的工具:功率計(power meter)。功率是「你實際輸出到踏板上的瓦數」,是外部負荷的直接測量,不像心率會被溫度、咖啡因、脫水、睡眠嚴重干擾。

這讓自行車的建模先天就比較準。用功率算出的TSS,比用心率算的TRIMP更穩定、更可重複。我有一位參加過武嶺挑戰的學員,就是靠功率數據把訓練負荷管理得很細。

但功率也帶來一個新的自欺陷阱:因為功率很客觀,很多車友會過度信任它,忽略「同樣的瓦數,在不同狀態下對身體的內部代價完全不同」。 讓我用一張表說明同樣250瓦,在不同情境下的真實負擔:

情境 輸出功率 心率反應 主觀感受 真實內部負荷
涼爽清晨、睡飽 250 瓦 中等 輕鬆撐得住 中等
台灣夏日午後濕熱 250 瓦 明顯偏高 很吃力 偏高
睡眠負債、感冒初期 250 瓦 異常偏高 非常痛苦 過高、危險

同樣的功率數字,TSS算出來一模一樣,但你身體付出的代價天差地遠。這正是為什麼我永遠要求車友:功率記錄的旁邊,一定要並排看心率與主觀感受。 當你發現「同樣的瓦數,今天心率高很多、感覺累很多」,那是身體在對你喊話——別管模型怎麼說,那天該收手。功率讓外部負荷變準,但內部負荷永遠得靠你自己的身體與紀錄去補。


三、預測的極限:為什麼阿哲跑爆了

這是全文最重要的一段。如果你只想記一件事,記這段。

3.1 模型的統計硬傷:參數根本抓不準

近年的運動科學研究對傳統fitness-fatigue模型提出了相當嚴厲的批評。研究者指出,這個模型在統計上是「病態的(ill-conditioned)」——白話說,就是體能與疲勞這兩組參數的「可辨識性(identifiability)」很差:同一份訓練與表現資料,可以用很多組差異很大的參數組合去擬合,都得到差不多的結果。

這是什麼意思?意思是當你的App告訴你「你的疲勞時間常數是X天」時,那個數字的可信度其實不高——換一段資料、換一個擬合方法,可能就跑出完全不同的值。模型「事後解釋」你過去的表現通常擬合得不錯,但要「事前預測」未來的表現,準度和可靠度都受到質疑。

3.2 生理被過度簡化

第二個硬傷是:真實的生理適應遠比「兩條指數曲線相減」複雜。 研究指出,模型的主要問題來自對運動生理過程的過度簡化,以及把「影響表現的因素」當成單一變數來處理。

實際上,影響你今天能不能跑好的因素至少包括:肌肉肝醣存量、睡眠品質、心理壓力、荷爾蒙狀態、免疫狀態、水分電解質、環境溫濕度、甚至腸胃狀況。Banister模型把這一整片森林,壓縮成「體能」和「疲勞」兩棵樹。壓縮當然方便,但壓縮就是失真。

阿哲跑爆的那天,模型的綠線確實在高點——因為就「訓練負荷」這個單一維度而言,他確實減量得宜。但他那週熬夜趕專案、睡眠負債、又遇到梅雨濕熱,這些模型「看不見的維度」全部同時變差。模型沒有錯,模型只是瞎——它只看得到它被餵進去的那幾個數字。

3.3 個體差異:沒有一體適用的參數

第三,研究一再強調:最佳的指標選擇與參數,會因人而異。 適合精英選手、單一運動、同質樣本的模型,換到你身上、換個運動、換個訓練型態,就不一定適用。這也是為什麼很多研究的結論都是「未來需要在不同運動與族群上進一步驗證」。

3.4 機器學習是解方嗎?是,但別神化

那麼,用機器學習(machine learning)取代老公式,是不是就無敵了?

研究的態度其實很務實,也是我認同的:機器學習不是要「取代」fitness-fatigue模型,而是可能「補強」它的弱點。 透過把生理知識嵌入非線性、多變量的學習演算法,機器學習有機會處理傳統模型處理不了的複雜互動(例如把睡眠、環境、主觀感受一起餵進去),甚至用集成學習(ensemble)結合多個個體化的反應模型。

但我要對所有喜歡數字的阿哲們潑一盆務實的冷水:機器學習吃資料。 它需要你長期、乾淨、多維度的紀錄才學得好;而個人運動資料往往少、雜、又不連續。丟一堆髒資料進去,你得到的不是預言,是被包裝得很漂亮的雜訊。garbage in, garbage out這句話,在運動建模上尤其血淋淋。

3.5 三代方法的誠實比較

為了讓你對「該信任建模到什麼程度」有個務實的座標,我把三代方法攤開來比:

方法 需要的資料 優點 主要限制 適合誰
純主觀感受(RPE、體感) 幾乎不用工具 最貼近真實、零成本、永遠可用 主觀、難以長期客觀比較 所有人,尤其新手
傳統Banister/TSS模型 心率或功率+時間 能量化趨勢、看長期進步 參數不穩、過度簡化、預測不可靠 有目標的中階者、教練
機器學習/多變量模型 大量、乾淨、多維度資料 能納入睡眠環境等更多因素 極吃資料品質、易被神化 有豐富資料的進階者、研究團隊

看完這張表,你應該會發現一件事:沒有一種方法是「最好」的,只有「最適合你現階段」的。 而且無論哪一代,主觀感受這一欄從頭到尾都在——它是所有方法的地基,不是被淘汰的原始工具。 我帶過的最厲害的選手,往往是那些既看得懂數據、又從沒放掉身體感覺的人。技術越先進,越要記得回到最原始的那個問題:「今天,我的身體感覺怎麼樣?」


四、常見錯誤與修正

帶學員這麼多年,我看過各式各樣被數字帶偏的狀況。整理成一張表,對號入座:

常見錯誤 背後的誤解 我的修正建議
只看TSB轉正就排硬課表/測驗 以為模型的「表現高點」等於「身體真的準備好」 TSB當參考,但一定要疊上睡眠、心情、環境、晨間心率再決定
追求CTL數字一路往上衝 把「體能分數」當成目標本身 CTL是結果不是目標;衝太快只是把疲勞堆高,受傷風險上升
夏天看到CTL沒掉就安心 忽略濕熱讓心率虛高、TRIMP被高估 夏季數據打折看,多用配速/功率而非只看心率
資料一天沒記就焦慮 把工具當主人 模型是趨勢工具,缺幾筆不影響大局,別本末倒置
拿別人的參數/課表直接套 忽略個體差異 參數要用自己的資料校正,課表要照自己的生活與體感調

一個真實的修正:阿哲的第二次減量

跑爆那次之後,我請阿哲做一件很不「工程師」的事:每天早上量安靜心率、記一個1-10的主觀狀態分數、寫一句話今天睡得如何。 這三個超低科技的資料,加上他原本的模型曲線一起看。

三個月後的下一場全馬減量,模型綠線同樣在高點,但這次他的晨間心率比平常高了6 bpm、主觀分數只有5、前兩晚都沒睡好。我們一起決定:把預定的賽前測驗砍掉,改成輕鬆的活動日。 結果比賽當天,他跑出2小時58分,破三達標。

模型那次還是「對」的——狀態高點的方向沒錯。但真正救了他的,是他學會把模型當其中一位顧問,而不是唯一的老闆。


五、給不同程度讀者的行動建議

如果你是剛開始運動的新手

  • 先別碰任何模型。 CTL、TSB這些數字對你現階段是干擾,不是幫助。你現在最該累積的是「規律運動的習慣」和「基本的身體感覺」。
  • 練習用最原始的工具:主觀感受(RPE 1-10)。今天這趟輕鬆(3分)、中等(5-6分)、還是很累(8分以上)?把這個練熟,比任何App都值錢。
  • 一週給自己至少一天完全休息。你的疲勞需要退,這是身體的物理定律,不是懶惰。

如果你是有數據、想進步的中階者(像阿哲)

  • 可以開始看CTL/ATL/TSB的趨勢,但永遠當「參考」而非「指令」。
  • 建立你自己的多維度日誌:晨間安靜心率、睡眠時數、主觀狀態分數。這三個加起來成本幾乎為零,卻能補上模型最大的盲點。
  • 減量時記住口訣:砍量、保強度。 別完全停練。
  • 夏天的數據學會打折看,多信配速與功率,少全信心率。

如果你是進階或帶隊的教練

  • 把模型當成溝通工具與趨勢儀表板,用來跟選手討論「這一個月的方向對不對」,而不是拿來預測某一天的精確表現。
  • 如果你想玩機器學習,先確保資料品質:長期、連續、多維度。資料的質,決定模型的天花板。
  • 永遠保留「教練的眼睛」。選手臉色、步態、講話的精神,這些模型永遠學不會,而它們往往比任何數字更早告訴你「這個人快出事了」。
  • 幫選手建立「數據與體感衝突時的處理原則」。我的預設是:當模型說可以練、但選手晨脈明顯偏高又主觀很累時,一律先降階。放過一次高強度課的損失很小,硬上導致的過度訓練或受傷,代價是幾週甚至幾個月。這個保守的偏誤,長期而言幾乎總是划算的。
  • 別讓數據取代對話。我每次課前後都會花一兩分鐘單純問選手「今天感覺怎麼樣」,那段對話裡透露的訊息,常常比整個儀表板還多。模型能量化的東西有限,人與人之間的觀察永遠有它不可取代的價值。

六、學員最常問我的六個問題(FAQ)

這些年來,關於運動建模,學員問我的問題高度重複。整理成一份FAQ,說不定正好是你心裡的疑惑。

Q1:我到底要不要買一支能算CTL/TSB的手錶或訂閱平台?

看你的階段。如果你是新手,把錢省下來,先練好規律與體感。如果你是已經有明確賽事目標、每週穩定訓練的中階者,這類工具能幫你看清長期趨勢、避免無意識地練過頭,投資是值得的。但請記住:工具是拿來輔助決策,不是拿來製造焦慮。

Q2:App說我今天「恢復良好、可以高強度」,但我覺得很累,該聽誰的?

聽你的身體。這幾乎是鐵律。App的建議是根據它有限的輸入算出來的機率性判斷,它不知道你昨晚失眠、工作壓力爆表。當數字和身體訊號衝突時,身體訊號的優先級永遠比較高。長期硬要跟身體對著幹,代價是過度訓練或受傷。

Q3:為什麼我很認真練,CTL卻卡住不動?

CTL卡住不一定是壞事。它可能代表你進入了一個「維持期」,身體正在鞏固既有適應。一味追求CTL往上衝,往往換來的是疲勞堆積與受傷。進步從來不是一條直線,是階梯狀的——平台期是為了下一次躍升在充電。

Q4:模型能不能預測我全馬會跑幾分幾秒?

可以給你一個「參考範圍」,但別當成保證。前面談過,這類預測的可靠度受到學界質疑,而且比賽當天的天氣、補給、心理、配速策略,任何一個出錯都會讓精算的秒數失準。把它當成「大概落在哪個區間」的參考,而不是刻在石頭上的目標。

Q5:我該多久回頭校正一次我的模型參數?

對一般運動者,我建議至少每一個訓練週期(大約8-12週)結束後,回頭看一次趨勢,而不是天天盯著日線波動焦慮。日線的雜訊很大,週線與月線的趨勢才有意義。

Q6:AI/機器學習的訓練App,是不是就能解決所有問題?

不是。它能處理更多維度的資料,但它的天花板是你餵給它的資料品質。資料少、雜、不連續,再厲害的演算法也學不出可靠的東西。而且再先進的模型,都無法取代教練的眼睛與你自己的身體感覺。把AI當成一個很會算的助手,不是無所不知的神。


七、一個健康與安全的提醒

數學模型有一個危險的副作用:它會讓人過度相信自己撐得住。當綠線很漂亮時,有些人會忽略身體真實的警訊硬上。

請務必記得,模型不會偵測疾病。如果你在訓練中或訓練後出現這些狀況,不要拿「我TSB還很好啊」來自我安慰,請停下來、必要時就醫:

  • 運動中或運動後出現胸悶、胸痛、異常喘不過氣、頭暈、暈厥
  • 靜止心率長期異常升高、心律不整感、心悸
  • 不成比例的極度疲勞、持續數週的表現不明原因下滑

台灣的就醫其實很方便,健保下心臟科、運動醫學門診的門檻並不高。有心血管疾病、糖尿病、高血壓等慢性病史,或有家族心臟病史的人,在開始或大幅提升訓練強度前,強烈建議先諮詢醫師做個別化評估——這些狀況都需要專業判斷與個別化處理,任何模型或文章都不能代替。用語我保守一點:這裡不下任何診斷、也不給處方,只是提醒你把專業的事交給專業的人。

結語:把公式當眼鏡,別當水晶球

從1975年Banister的一條「體能減疲勞」,到今天嵌入生理知識的機器學習,運動表現的數學建模走了五十年。這段旅程教我最深的一課是:模型的價值,不在於它能不能精準預言明天,而在於它能不能幫你把訓練這件混沌的事,看得清楚一點點。

阿哲後來跟我說了一句話,我很喜歡:「教練,我以前以為模型會告訴我答案,現在我知道,它只是幫我問對問題。」

這正是我想留給你的。戴上這副數學眼鏡,你會看得更清楚——但走路的還是你自己,感受身體的還是你自己,最後為每一步負責的,也還是你自己。數字是僕人,身體才是主人。無論你手上的工具是五十年前的一條老公式,還是最新的AI演算法,真正決定你能走多遠的,從來不是模型多聰明,而是你有沒有學會一邊善用它、一邊誠實地傾聽自己的身體。願你練得聰明,也練得健康,在每一次上路時都離傷害遠一點、離熱愛久一點。


本文為教育性內容,不能取代醫師、物理治療師或營養師的個別診斷與治療建議。

參考資料