足球預測是把一場比賽拆成可量化的輸入、再由模型把這些輸入壓成三個機率的過程。進去的是四類資料——賽程與賽果、表現資料、陣容與可用性、市場報價;模型用它們估出兩隊各自的期望進球數,把這兩個數字展開成每一個可能比分的機率,再把比分歸併成三個數:主勝、和局、客勝,三者相加等於 100%。這三個數字描述的是「同樣的條件重複很多次會怎樣」,而不是眼前這一場會怎樣。發布之後到結算之前,先發會公布、價格會變,所以一條預測只有帶著發布時間戳記和當時的標價,才談得上可核驗。以下把這條流水線從頭到尾拆一遍。
第一步:四類輸入
賽程與賽果。 誰對誰、主場還是客場、哪一天、上次打成什麼樣。這是最容易取得的一層,也是每一個看球的人都已經看過的一層。單靠它,定不出任何還沒被定進價格裡的東西。
表現資料。 射門、射正、預期進球、控球、區域推進、定位球數量。它們描述的是一支球隊實際踢成什麼樣,而不是計分板最後停在哪。一場比賽每隊大約十到十五腳射門,所以單場數字是建立在極少事件上的估計;要穩下來,得放到十到十五場的窗口上看。
陣容與可用性。 傷病、停賽、輪換風險,以及最後確認的先發——在多數聯賽裡,先發在開賽前約六十分鐘才公開。這是賽前價值最高的一項輸入,同時也是可用窗口最短的一項。
市場報價。 每個結果的掛牌價格,持續更新。這一類輸入和前三類在性質上不同:前三類描述這場比賽,第四類描述別人已經對這場比賽得出了什麼結論。把兩者混為一談,是這個領域裡最常見的分析錯誤。
第二步:模型怎麼把輸入壓成三個機率
公開的足球模型不管還加了什麼,基本都要經過三道工序。
- 1.先估每支球隊的進球率。 模型給出九十分鐘內的期望進球數——比如主隊 1.55、客隊 1.10——依據是表現資料,再按對手強弱、主客場與陣容狀態做調整。
- 2.把進球率展開成比分分布。 假設進球在比賽時間裡近似隨機到達,用卜瓦松類的分布把這兩個數字換成每一個比分的機率:0-0、1-0、2-1,依此類推。
- 3.把比分歸併成結果。 所有「主隊進球多於客隊」的比分機率加總,就是主勝機率;和局與客勝同理。
拿 1.55 和 1.10 實際算一遍,得到的大約是主勝 48%、和局 25%、客勝 27%。把任何一個進球率改動十分之一個球,三個數字全都會動。這種敏感度正是重點:三個門面機率是兩個估計的下游產物,整條預測的品質,就是那兩個估計的品質。
第三步:機率不是對一場比賽的預告
48% 的主勝,不是在說「主隊會贏」。它說的是:把這套條件重複很多次,其中接近 48% 會以主勝收場。而眼前這一場,只發生一次。
由此有兩個後果,兩個都經常被漏掉。
單一結果無法給一條預測打分。 主隊沒贏的那 52%,不是錯誤,它本來就是這個分布裡被寫明的多數。一場一場地給預測判對錯,量到的是運氣,叫出來的是水準。
三個數字裡最大的那個不等於「預測」。 當分布是 40 / 30 / 30 時,最高的那一項也只是三件不太可能的事裡最不那麼不可能的一件。一個只報自己最看好那一項的模型,等於把它算出來的東西扔掉了大半。
真正能被打分的是校準:把某個模型標在 45%–50% 之間的所有條目收集起來,數一數其中實際發生了多少,看實現比例落不落在這個區間裡。這個檢驗需要幾百筆樣本,不是幾筆——背後的道理寫在《AI 足球預測準嗎》裡。
第四步:發布之後到結算之前
一條預測是被發布進一個持續變動的世界裡的。下面這條時間線,就是「時間戳記不是形式主義」的原因。
| 階段 | 典型時間 | 變動的東西 | 對已發布條目的影響 |
|---|---|---|---|
| 發布 | T | 暫時沒有 | 機率與當時標價被釘死 |
| 先發公布 | 開賽前約 60 分鐘 | 先發、臨場傷情 | 模型會重算;已發布那條不改 |
| 開賽 | T0 | 賽前窗口關閉 | 條目就此對著現實鎖定 |
| 比賽進行中 | 0–90+ 分鐘 | 比分、紅黃牌、換人 | 即時機率與賽前機率分岔 |
| 終場 | 約 T0 + 105 分鐘 | 結果確定 | 結算依據出現 |
| 結算 | 終場之後 | 無 | 命中與未命中一起入帳 |
這張表裡最吃重的一句,是第一列的第四欄:已發布的條目事後不會被編輯。我們的紀錄鏡像到一個公開的 git 儲存庫——github.com/oddsflowai-team/clawsportbot-protocol/tree/main/record——提交歷史本身就是防竄改的證據;結算完的條目,命中的和未命中的,一起排在公開預測紀錄上。這些計數每天隨著比賽結算而變動。
怎麼分辨「建模的預測」和「拍腦袋的預測」
五個問題,按區分力從高到低排。
- 1.有沒有機率? 「我看好主隊」裡沒有任何可以被校準檢驗的量。一個數字可以被證明是錯的;一句觀點連檢驗都無從談起。
- 2.有沒有對應的標價? 不帶價格的機率,是對一場比賽的看法;對著價格的機率,是關於「分歧」的主張——而只有後者,在唯一重要的那個維度上可被證偽。兩者之間的換算寫在《足球賠率怎麼看》裡。
- 3.有沒有發布時間戳記,而且早於開賽? 拿它去比對既定開球時間,永遠不要去比對終場哨。
- 4.未命中的條目在不在命中的同一個頁面上? 只陳列贏的那一份,是宣傳頁面,不是紀錄。
- 5.結算口徑事先寫下來了嗎? 走盤、半贏半輸、比賽腰斬,都需要事先寫明怎麼記,否則計數可以在事後被調整。我們的口徑寫在《我們的勝率是怎麼算出來的》裡。
一條五關全過的預測,仍然可能在某一場上判斷錯誤。而任何一關沒過的預測,則根本無法被證明在任何事情上判斷正確。
常見問題
足球預測最高能做到多準? 有天花板,而且這個天花板是由這項運動本身、而不是由模型決定的。足球進球稀少,單一事件的影響極大,所以任何一個結果裡都有相當大一部分是不可壓縮的雜訊。誠實的目標是校準——讓標 60% 的事真的以六成的頻率發生——而不是在單場上追求高命中率。
為什麼三個掛牌價格換算出來超過 100%? 因為掛牌價格在底層機率之上還帶著報價方的抽水。把它剝掉是一道算術題,而不同的剝法在冷門一側分歧最大——具體算法逐步寫在《足球賠率怎麼看:從標價到機率的深讀》裡。
模型比一個懂球的人更強嗎? 單論讀一場比賽,經常不是。但論「把讀出來的東西表述成一個校準過的機率、對著一個即時價格、同時處理很多場、按一條固定規則、而且不會累」——是的,而在操作層面,只有這個比較能決定任何事情。