Google 最新的預測模型,輸給了一條 1994 年的公式
Google 八月底發表 TimesFM 3.0,三大時間序列評測榜首。我手上正好有一個在跑的價格預測工具,用的是 1994 年的老公式。花半天把兩者放進同一個回測,60 組對照裡新模型只贏 21 組。這篇完整交代怎麼比才算公平——以及為什麼「沒有顯著性檢定的 A/B 比較,大部分在比運氣」。
八月底 Google 發表了 TimesFM 3.0。宣傳很硬:三個主流的時間序列評測榜單,點預測和機率預測兩種指標,全部第一。
我手上正好有一個東西可以拿它來打。先前替一個製造業客戶做的教材裡,附了一個真的能跑的小工具:吃三種工業金屬的國際期貨報價,輸出「未來 N 天,價格最可能落在哪個區間」。它用的方法叫 EWMA,1994 年 J.P. Morgan 發表的東西。
所以問題很單純:32 歲的公式,該不該換成上週發表的 AI 模型?
半天之後有了答案。答案是不該。這篇要講的不是「AI 沒用」——而是你要怎麼問,才問得出這個答案。因為在我真正動手比之前,我以為它會贏。
照這個系列的慣例先交代作法:這是一次 AI 協作實驗。程式由 Claude 寫,實驗設計是一來一往吵出來的,每個「這樣比公不公平」的判斷由我拍板。
一、兩位選手
選手 A:EWMA(1994)
全名指數加權移動平均。白話講就一件事:算「最近價格晃得多兇」,而且越近的日子算得越重。昨天的波動比一個月前的重要,一個月前的比一年前的重要,權重照固定比例往回衰減。
它有一個很關鍵的特性——它完全不猜漲跌。它只回答「會晃多遠」,然後假設價格從今天出發,往上往下的機率一樣。所以它給出來的東西不是一條預測線,是一個扇形:一天後大概在這個範圍、五天後範圍變寬、二十天後更寬。
整條公式用一行就寫得完,跑起來不用一秒。
選手 B:TimesFM 2.5(2025)
Google 的時間序列基礎模型。白話講就是時間序列版的 GPT:它預先在超過一兆個時間點上訓練過,你把一段歷史數字丟進去,它直接吐未來——不用拿你的資料重新訓練。這叫「零樣本」(zero-shot)。
它一次會吐出九個分位數,也就是第 10、20……到第 90 百分位。所以它本來就給區間,不是只給一個數字。這點很重要,因為這代表兩位選手可以在同一張紙上比分數。
一個接案的人必須先知道的事
我測的是 2.5,不是 3.0。原因跟技術無關:
- TimesFM 3.0 的權重是「非商用授權」,禁止用在生產環境。
- 2.5 是 Apache-2.0,可以商用。
如果你打算把模型放進要交付給客戶的東西裡,3.0 目前這條路是關著的(除非走 Google 自己的付費託管服務)。這種事沒人會寫在發表會的投影片上,但它會決定你的專案能不能交。
先確認授權,再測效能——順序反過來,測完才發現不能用,那半天就是白花的。
二、比賽規則:怎麼比才算公平
這一段是整篇文章最值錢的部分。大部分「我們 A/B 測過了」的結論之所以不可信,都死在這裡。
規則一:先讓舊方法拿到分數
聽起來像廢話,但我看過太多次:要換新工具的人,講得出新工具多好,講不出現在這套的分數是多少。沒有基準線,「提升」這個字沒有意義。
所以第一件事是把現行方法完整重跑一次。我用清理後的四年多資料(1,072 個交易日)重算,得到的波動率數字跟工具頁面上顯示的完全一致,到小數點第三位。這一步確認了我測的確實是同一個東西,不是我自己另外寫的一個近似版。
這個對帳花了十分鐘,但如果跳過它,後面所有結論都站不住。
規則二:用「區間」的評分方式,不要用「準不準」
一般人比預測會問「猜對沒有」。但這兩位選手輸出的都是區間,不是單一數字,所以要用專門評區間的分數,叫 pinball loss。
白話講它在罰什麼:你說 90% 的機率不會超過某個價格,結果超過了,罰得重;你說得太保守把區間開得跟海一樣寬,也罰。它同時懲罰「太樂觀」和「講廢話」。分數越低越好。
另外看一個更直覺的指標:覆蓋率。你宣稱這是 80% 的區間,那實際上就應該有大約 80% 的日子落在裡面。落 70% 代表你在低估風險;落 95% 代表你的區間寬到沒有參考價值。
規則三:做顯著性檢定,否則你在比運氣
這是最容易被跳過、也最致命的一步。
我用了 300 個滾動測試點——從四年資料的後段,每隔一天就假裝「今天」,然後預測未來 1、5、10、20 天。問題來了:這 300 個測試點是重疊的。今天的 20 日預測和明天的 20 日預測,共用其中 19 天。
重疊代表誤差高度相關。某一段行情特別好猜,會同時讓連續二十幾個測試點都變好看。這時候你直接比兩邊的平均分數,很可能只是在比誰運氣好。
處理方法是 Diebold-Mariano 檢定配 Newey-West 修正。名字很嚇人,做的事很好懂:它先估計「這些測試點彼此有多相關」,再據此把差距的可信度打折,最後回答一個問題——這個差距,有多大機率只是巧合?
慣例上 p 值小於 0.05 才算真的有差。
這一步的重要性,實驗中途就直接示範給我看了。某一組數字上,新模型贏了 2.9%,看起來像個勝利;檢定跑出來 p = 0.44。翻成白話:這個「勝利」有 44% 的機率純粹是運氣。如果我沒做這一步,我會拿著這個 2.9% 去改產品。
規則四:不要只測一組參數
只測一個設定就宣布結果,最容易被打的一句話是「你只是沒調好」。
所以我把「給模型看多少天歷史」這個設定從 64 掃到 720,五個值 × 三種金屬 × 四個天期 = 60 組對照,測試點完全固定不動,只有這一個變數在變。
規則五:拆解「贏在哪一半」
我還多做了一個混合版本:用新模型的中位數當中心,配舊方法算的區間寬度。
這是為了回答一個診斷性的問題——如果新模型贏了,是贏在「它更會抓方向」,還是贏在「它更會估寬度」?兩個答案的後續做法完全不同。
三、結果
先講總分:60 組對照,新模型只贏 21 組。比丟硬幣還差。
分開看三種金屬(以下用金屬 A / B / C 代稱):
| 設定 | 金屬 A | 金屬 B | 金屬 C |
|---|---|---|---|
| 標準設定 | 顯著輸 −5%~−9%(p<0.05) | 平手(p>0.28) | 平手 |
| 對新模型最有利的設定 | 平手 | +4%~8.6%,但 p=0.055~0.18 不顯著 | 平手 |
金屬 B 那個 8.6%、p=0.055 看起來很誘人,差一點就跨過門檻。但那是我掃過五個設定之後挑出來最好的一組。掃得夠多,總會掃到一個接近顯著的——這叫多重比較,它不算數。誠實的講法是:在最有利的條件下,新模型也只是打平。
一個比輸贏更該注意的細節
新模型的區間,在長天期系統性地太窄。
金屬 A 的 20 天預測,它宣稱是 80% 的區間,實際只蓋到 69.7%;舊方法是 77.7%。
對做生意的人來說,這個方向的錯誤比輸幾個百分點嚴重得多。低估風險的工具,會讓你在該留餘裕的時候不留。一個誠實說「我不確定」的區間,比一個看起來很精準但會漏接的區間有用。
拆解:它輸在哪一半
混合版本給出了答案:金屬 A 的損失幾乎全部來自中心跑偏——也就是模型試圖預測方向,而且預測錯了。
我另外單獨測了這件事:把新模型的中位數,跟「明天等於今天」這種完全不動腦的猜法比。結果是在金屬 A 上,新模型顯著比「明天等於今天」還差(20 天 −10.5%,p=0.003)。
也就是說,在這個題目上,它「動腦」的部分是負貢獻。
四、為什麼會這樣
不是模型爛。TimesFM 在評測榜上贏過所有同類,那個成績是真的。
問題在於題目的性質。
基礎模型的本事,是從一兆個時間點裡學到各種重複出現的型態——週期、季節性、趨勢、假日效應。餐廳的來客數、電網的負載、網站的流量,這些東西身上有大量結構可以學,它就會表現得很好。
但國際金屬價格接近隨機漫步:明天的價格 ≈ 今天的價格 + 一個沒人猜得到的擾動。這種序列身上沒有型態可學。模型帶著一身在別處練出來的本事進場,找不到東西可用,那些本事就變成雜訊——它會「看到」不存在的型態,然後把中位數推向錯的方向。
而舊公式活下來的原因也在這裡:它從一開始就放棄猜方向。它只做一件事——估計「會晃多遠」。而波動率這個東西,是金融序列裡少數真的有結構、真的可以預測的部分(今天晃得兇,明天多半也晃得兇,這叫波動叢聚)。
一個只做一件事、但那件事剛好可做的窄方法,打贏了一個什麼都會、但沒有一樣用得上的通用方法。
這不是我一個人的發現。2026 年有研究拿同一批基礎模型去預測美股報酬率,結論一致:這些模型在互相比較時排名很漂亮,但贏過「明天等於今天」的幅度小到統計上幾乎不顯著。另一篇更直接:某些模型的樣本外解釋力是負的,方向準確率不到 50%。
我只是在自己的資料上,又驗證了一次。
五、真正的收穫,跟 AI 一點關係都沒有
實驗第一次跑,直接爆掉。
查下去發現客戶那份原始檔有兩個問題,兩個都不是「錯誤」,是看起來完全正常的陷阱:
第一,0 不是缺值,是「那天沒開市」。 原始檔每個日曆日都有一列,週末和假日的價格欄寫 0。四年多累積下來 400 多筆。任何直接拿這欄去算報酬率的程式,都會在這裡靜默地算出垃圾——或者像我一樣,對 0 取對數然後當場爆炸。
爆炸其實是好事。如果那些 0 剛好被填成別的數字,程式會順順跑完,吐出一份看起來很專業、但整份都是錯的報告。
第二,有兩筆數字的千分位被當成小數點打進去了。 一個五位數的價格變成兩位數,少了一千倍。這在圖表上是兩根穿到地心的柱子,在統計上是兩天 ±690% 的漲跌。
第二個問題有個值得記下來的後續:這兩筆錯誤沒有影響工具現在顯示的數字——因為那條老公式只記得最近大約 50 天,早就把它們忘了。但同一份資料上另一個吃全部歷史的機器學習模型,就完完整整地把這兩天的瘋狂數字學了進去。
同一份髒資料,對不同方法的傷害完全不同。這件事沒有通則,只能一個一個查。
教訓很簡單,但值得刻在牆上:新模型不會幫你解決舊資料的問題。你把髒資料餵給 2026 年最強的模型,它會用最先進的方式產生錯誤答案。
六、給要做決定的人
這次實驗總共花了半天。實際運算的部分,三種金屬 × 300 個測試點 × 五種設定,在一台 M1 Mac 上跑完不到兩分鐘。
這種驗證現在非常便宜。便宜到「沒做」不再有藉口。
幾條可以直接拿去用的:
- 「benchmark 第一」不等於「你的資料上第一」。 評測榜衡量的是通用能力。你的題目有沒有結構可學,決定了那個第一名有沒有意義。
- 換之前,先讓現在這套拿到分數。 講不出基準線,就沒資格談提升。這一步通常是最快的,也最常被跳過。
- 沒有顯著性檢定的 A/B 比較,大部分在比運氣。 尤其測試期重疊的時候。這次那個「贏 2.9%、p=0.44」就是活教材。
- 看區間有沒有蓋到該蓋的比例,不要只看平均誤差。 一個系統性低估風險的工具,比一個誠實說不確定的工具危險。
- 先查授權再測效能。 最強的那版可能根本不准商用。
- 資料清理的回報,通常高於換模型。 這次唯一確定有用的產出,是抓到兩筆打錯的數字和 400 多筆假的 0。
最後一件事。
這是一次失敗的實驗——如果「成功」的定義是換到更好的工具的話。但半天換到的東西是:一條「不用換」的確定結論、一份可以重複跑的比較框架、兩個被抓出來的資料錯誤,以及未來每次有人問「要不要換成最新的 X」時,一個可以直接套用的流程。
負面結果值得留下來。它省下的不是這半天,是未來每一次「聽說有個新東西很強」的時候,你不用再從零開始猜。