Strasmore Research
學習 Matt Connor作者: Matt Connor

Brier 分數怎麼評估機率預測

Brier 分數以均方誤差評估機率預測,分數越低越好;本文用 10 筆範例拆解公式,並說明為何固定回答 50% 會得到 0.25。

Brier score 是用實際結果評估機率預測準確度的指標。計算方式是:以你所給出的機率減去結果值(事件發生時為 1,未發生時為 0),將差值平方,再對你做出的所有預測取平均。分數越低越好:0 代表完美紀錄;如果對所有事情都回答「50%」,所得分數則為 0.25。

什麼是 Brier 分數?

預測是對機率的判斷,而單一機率本身永遠不能直接判定為正確或錯誤。你判斷某件事發生的機率為 30%,結果它真的發生了。你錯了嗎?還不能這樣說。Glenn Brier 在 1950 年為氣象預報員撰文時,採取的方法是拒絕評分任何單一預測。這項分數會一次評估整份預測紀錄。

以下是一份虛構的十筆預測紀錄。這些數字都不是來自市場,而是為了展示計算方式而設計。

  • 判斷機率為 90%,事件發生。平方誤差為 0.01。
  • 判斷機率為 80%,事件發生。平方誤差為 0.04。
  • 判斷機率為 70%,事件未發生。平方誤差為 0.49。
  • 判斷機率為 60%,事件發生。平方誤差為 0.16。
  • 判斷機率為 50%,事件未發生。平方誤差為 0.25。
  • 判斷機率為 40%,事件未發生。平方誤差為 0.16。
  • 判斷機率為 30%,事件發生。平方誤差為 0.49。
  • 判斷機率為 20%,事件未發生。平方誤差為 0.04。
  • 判斷機率為 10%,事件未發生。平方誤差為 0.01。
  • 判斷機率為 95%,事件發生。平方誤差為 0.0025。

十筆平方誤差合計為 1.6525。除以十後,Brier 分數為 0.165。這就是完整的計算方式,而且任何 Mac 或 Linux 電腦出廠時都已內建的 python3 即可執行。不必安裝任何軟體,也不需要任何函式庫。

  • rows = [(0.90, 1), (0.80, 1), (0.70, 0), (0.60, 1), (0.50, 0), (0.40, 0), (0.30, 1), (0.20, 0), (0.10, 0), (0.95, 1)]
  • brier = sum((p - o) * (p - o) for p, o in rows) / len(rows)
  • flat = sum((0.5 - o) * (0.5 - o) for _, o in rows) / len(rows)
  • print(round(brier, 3), round(flat, 3)) 成交紀錄 0.165 0.25

為什麼 0.25 是必須超越的基準

對所有事情都給出 50% 的預測,每一次平方誤差都是 0.25,無論實際結果如何。這個固定的 0.25,就是任何一組是非題在沒有資訊時的基準。skill score 則將結果轉換成單一數值:以 1 減去你的分數除以基準分數。前述虛構紀錄的分數為 0.165,換算後的 skill score 為 0.34。

有一項注意事項可以避免許多錯誤的評分方式。假設你評分的事件只有 10% 的機率發生,那麼每次都給出固定的 10% 預測,即使完全不知道個別問題的答案,分數仍可達 0.09。對於結果分布不均的題組而言,低於 0.25 的分數並不能證明具備預測能力。正確的基準,應是你實際回答之問題的基準發生率。

校準度與信心程度會一併評分

校準度是指:在所有你預測機率為 70% 的事件中,實際發生的比例接近 70%。統計學家所稱的信心程度(resolution),則是指當你掌握某些資訊後,願意偏離基準率多遠。對每個問題都回答 50% 的預測者,校準度完美,卻完全沒有實用價值;而 Brier score 會同時衡量這兩項特性:校準失準會提高分數,展現出有效信心則會降低分數。

依照預測機率分組整理這份虛構的預測紀錄,可以看出校準檢查的樣貌。在 Python 中,每個分組各有一行,hits = [o for p, o in rows if p >= 0.8],接著計算 hits 的平均值。

  • 預測機率為 10% 至 30%,平均值為 20%:3 次中有 1 次發生,為 33%。
  • 預測機率為 40% 至 50%,平均值為 45%:2 次中 0 次發生,為 0%。
  • 預測機率為 60% 至 70%,平均值為 65%:2 次中有 1 次發生,為 50%。
  • 預測機率為 80% 至 95%,平均值為 88%:3 次中 3 次發生,為 100%。

10 次預測遠遠不足以從這些分組看出任何結論。每個分組需要數百個已揭曉結果的問題,才能評估校準度。本頁其餘內容使用一份包含數百萬筆預測的紀錄。

評估市場自身的預測

每一張上市選擇權都帶有一個近似明示機率的數值。Delta 衡量標的股票每變動一美元時,選擇權價格會變動多少;對於到期時要麼價內(到期時具價值)、要麼一文不值的契約而言,Delta 的絕對值通常接近市場所隱含的價內機率。這個數值來自同一個波動率表面,也就是 AAPL 隱含波動率 所使用的表面。每份契約都會到期,因此每一項預測都能接受檢驗。

下圖納入了從2025年1月至2026年5月、在到期前約一個月觀察到的每一張 SPY 選擇權,依明示 Delta 分組,並計算各組契約最後以價內到期的頻率。

查詢SPY 選擇權 Delta 與合約到期時價內頻率的比較
每個數據背後的精確 SQL 語法
WITH settle AS
(
    SELECT
        date                             AS settle_date,
        any(toFloat64(underlying_close)) AS settle_px
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= '2025-01-01'
      AND date <  '2026-08-01'
    GROUP BY date
),
scored AS
(
    SELECT
        toUInt8(floor(abs(toFloat64(g.delta)) * 10))    AS bucket,
        abs(toFloat64(g.delta))                         AS stated,
        startsWith(lower(toString(g.option_type)), 'c') AS is_call,
        if(is_call,
           s.settle_px > toFloat64(g.strike_price),
           s.settle_px < toFloat64(g.strike_price))     AS finished_itm
    FROM global_markets.options_greeks AS g
    INNER JOIN settle AS s ON s.settle_date = g.expiration_date
    WHERE g.underlying_symbol = 'SPY'
      AND g.date >= '2025-01-01'
      AND g.date <  '2026-06-01'
      AND g.expiration_date <= '2026-07-31'
      AND g.days_to_expiry BETWEEN 28 AND 35
      AND g.iv_converged = 1
      AND g.volume > 0
      AND abs(g.delta) > 0.02
      AND abs(g.delta) < 0.98
)
SELECT
    concat(toString(bucket * 10), ' to ', toString(bucket * 10 + 10), '%') AS stated_bucket,
    round(avg(stated) * 100, 1)       AS stated_pct,
    round(avg(finished_itm) * 100, 1) AS finished_itm_pct,
    count()                           AS sample_size
FROM scored
GROUP BY bucket
ORDER BY bucket
Run this yourself

請比較這兩組序列。在最低分組中,市場明示的平均值為 5.2%,而這些契約實際以價內到期的比例為 3.7%。在最高分組中,明示值為 94%,實際以價內到期的比例則為 96.5%。在全部 10 個分組中,實際頻率都落在與明示值相近的範圍內。這正是校準表的作用:逐組揭示預測者所說的內容與實際發生結果之間的差距,而不是將差距隱藏在單一平均值中。

市場表現能勝過擲硬幣嗎?

接下來看分數本身。計算方式相同,列出幾個家喻戶曉的名稱,並將各名稱的 Brier score 與在完全相同契約上計算出的固定 50% 基準並列。

查詢依標的資產區分的市場自述機率 Brier 分數
每個數據背後的精確 SQL 語法
WITH settle AS
(
    SELECT
        underlying_symbol                AS sym,
        date                             AS settle_date,
        any(toFloat64(underlying_close)) AS settle_px
    FROM global_markets.options_greeks
    WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'TSLA')
      AND date >= '2025-01-01'
      AND date <  '2026-08-01'
    GROUP BY sym, settle_date
),
scored AS
(
    SELECT
        g.underlying_symbol                             AS symbol,
        abs(toFloat64(g.delta))                         AS stated,
        startsWith(lower(toString(g.option_type)), 'c') AS is_call,
        if(is_call,
           s.settle_px > toFloat64(g.strike_price),
           s.settle_px < toFloat64(g.strike_price))     AS finished_itm
    FROM global_markets.options_greeks AS g
    INNER JOIN settle AS s
        ON s.sym = g.underlying_symbol AND s.settle_date = g.expiration_date
    WHERE g.underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'TSLA')
      AND g.date >= '2025-01-01'
      AND g.date <  '2026-06-01'
      AND g.expiration_date <= '2026-07-31'
      AND g.days_to_expiry BETWEEN 28 AND 35
      AND g.iv_converged = 1
      AND g.volume > 0
      AND abs(g.delta) > 0.02
      AND abs(g.delta) < 0.98
)
SELECT
    symbol,
    round(avg((stated - finished_itm) * (stated - finished_itm)), 4) AS market_brier,
    round(avg((0.5 - finished_itm) * (0.5 - finished_itm)), 4)       AS coin_flip_brier,
    formatReadableQuantity(count())                                  AS graded_contracts
FROM scored
GROUP BY symbol
ORDER BY market_brier
Run this yourself

在相同的契約集合中,NVDA28.54 thousand份評分契約上的分數為0.1122,固定基準則為0.25。表現最弱的6個名稱之一SPY,分數仍達到0.1375。這裡的選擇權並非魔法。深度價外契約的 delta 接近 0.02,且大多數會到期失效。這種結果很容易預測,而這種容易程度已反映在分數中。這也是單獨引用 Brier score 幾乎沒有資訊價值的主要原因。

同一名預測者在不同問題上的得分不同

以問題的到期時間區分相同的方法,會發現其得分隨問題而變動。

查詢SPY 各到期期間的市場 Brier 分數
每個數據背後的精確 SQL 語法
WITH settle AS
(
    SELECT
        date                             AS settle_date,
        any(toFloat64(underlying_close)) AS settle_px
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= '2025-01-01'
      AND date <  '2026-08-01'
    GROUP BY date
),
scored AS
(
    SELECT
        multiIf(g.days_to_expiry <=   7, 1,
                g.days_to_expiry <=  14, 2,
                g.days_to_expiry <=  30, 3,
                g.days_to_expiry <=  60, 4,
                g.days_to_expiry <= 120, 5,
                6)                                      AS horizon_rank,
        abs(toFloat64(g.delta))                         AS stated,
        startsWith(lower(toString(g.option_type)), 'c') AS is_call,
        if(is_call,
           s.settle_px > toFloat64(g.strike_price),
           s.settle_px < toFloat64(g.strike_price))     AS finished_itm
    FROM global_markets.options_greeks AS g
    INNER JOIN settle AS s ON s.settle_date = g.expiration_date
    WHERE g.underlying_symbol = 'SPY'
      AND g.date >= '2025-01-01'
      AND g.date <  '2026-06-01'
      AND g.expiration_date <= '2026-07-31'
      AND g.days_to_expiry BETWEEN 1 AND 250
      AND g.iv_converged = 1
      AND g.volume > 0
      AND abs(g.delta) > 0.02
      AND abs(g.delta) < 0.98
)
SELECT
    multiIf(horizon_rank = 1, '1 to 7 days',
            horizon_rank = 2, '8 to 14 days',
            horizon_rank = 3, '15 to 30 days',
            horizon_rank = 4, '31 to 60 days',
            horizon_rank = 5, '61 to 120 days',
            '121 to 250 days')                                       AS horizon,
    round(avg((stated - finished_itm) * (stated - finished_itm)), 4) AS market_brier,
    round(avg((0.5 - finished_itm) * (0.5 - finished_itm)), 4)       AS coin_flip_brier,
    count()                                                          AS sample_size
FROM scored
GROUP BY horizon_rank
ORDER BY horizon_rank
Run this yourself

市場 delta 在剩餘 1 to 7 days 的合約上得分為 0.1084,在剩餘 121 to 250 days 的合約上則為 0.1218。預測者與方法都相同,但問題組合不同。固定的 50% 基準線在第一列為 0.25,在最後一列為 0.25,因此可作為各個期限的唯一固定參考。比較兩名預測者時,必須在相同期間內回答相同問題,否則比較的會是問題難度,而非預測能力。

為何適當評分規則很重要

平均絕對誤差是你所給機率與實際結果之間絕對距離的平均值。它聽起來像是合理的替代指標,但評分結果很差。假設你確實認為某事件發生的機率為70%。報出70%時,預期絕對誤差為0.7 x 0.3 + 0.3 x 0.7 = 0.42。改報100%後,誤差反而降至0.7 x 0 + 0.3 x 1 = 0.30。在絕對誤差下,誠實報出的數字會讓你付出代價;而一個鼓勵你誇大信心的指標,並沒有真正衡量預測能力。

Brier score沒有這個問題。你相信機率為70%,也報出70%時,預期分數為0.7 x 0.09 + 0.3 x 0.49 = 0.21。報出100%後,分數升至0.30。報出60%後,分數升至0.22。最低分恰好落在你主觀相信的數字上。具備這項特性的規則稱為適當評分規則,這也是Brier score成為預測競賽預設指標的原因。

log score是另一種常見的適當評分規則:先取你對實際發生結果所給機率的自然對數,再反轉符號。對實際發生的事件報出1%,代價為4.6;報出0%則是無限大。在這組虛構的十筆預測中,log score為0.483,優於固定基準的0.693。Brier score介於0與1之間,作為成績表上的分數更直觀。log score沒有上限,適合用於尾端結果承擔主要風險的評分情境。

事件合約的意義

如果某件事發生便支付 1 美元、未發生則支付 0 美元的事件合約,其交易價格已經反映一項機率。價格為 62 美分,代表市場預測機率為 62%,但尚未扣除買賣價差與費用。我們的指南 將事件合約價格轉換為機率說明這項換算方式;事件合約如何結算則說明合約文字中的「事件已發生」具體代表什麼。

這項價格是一項具有公開績效紀錄與結算日期的預測,因此你的預測紀錄必須超越它,才能證明具備優勢。針對相同問題、在相同期間評估你的預測。若交易員在這組問題上的 Brier score 高於市場價格所隱含機率的 Brier score,便無法從衡量結果證明自己在這組問題上具備優勢,無論交易背後的論述多麼完整。當你從投注賠率中扣除莊家水位後,同樣的測試也適用於運動賽事賠率;在利率市場中,Fed 利率賠率則會提供一項具有明確解決日期的問題之定日期機率。

這些面板如何評估市場

Delta 取自每份合約的每日 options greeks 紀錄。只有在觀察日有成交量,且波動率已收斂求解的合約才會納入。結果依合約到期日標的資產的收盤價判定:若該收盤價高於履約價,買權便視為價內;若低於履約價,賣權便視為價內。實際結算會在收盤後透過履約決策進行,因此,若合約價格距離履約價僅數美分,實際結算結果可能與此簡化判定不同。這些面板中的所有合約均已到期;較長期間的分組必然取自觀察窗口內較早的觀察日期。若股票分割發生在觀察日至到期日之間,履約價與結算價格便會採用不同尺度,這也是每個分組都列出樣本數的另一項原因。

Delta 近似的是風險中性機率,而非實際世界機率。兩者的差異來自 options prices 中隱含的 risk premium;calibration table 正是用來衡量這項差異,而不是逕自假設差異不存在。

常見問題

Brier 分數越低越好嗎?

是。Brier 分數是誤差衡量指標,因此 0 代表完美紀錄,1 則是最差結果;若對所有最終未發生的事件都給出 100% 機率,就會得到 1。對每個問題都回答 50%,所得分數為 0.25;任何低於 0.25 的分數都優於這項結果。

怎樣的 Brier 分數算好?

沒有適用於所有情況的固定標準,因為分數取決於問題的難度。預測明天下雨的氣象預報員若得分為 0.10,與預測競爭激烈選舉的政治預報員若得分為 0.18,兩者不能直接比較。只有在回答相同問題、涵蓋相同期間時,才能比較不同預報員的分數。

Brier 分數為 0.25 代表什麼?

這代表預報員對所有問題都給出 50% 機率,因為無論結果如何,每次預測誤差的平方都是 0.25。對一組是非題而言,這是沒有資訊時的標準基準;但若題目集合的結果分布明顯偏向某一方,則應以基準發生率作為基準。

Brier 分數與 log score 有何不同?

兩者都是適當評分規則,也就是說,當你填報自己真正相信的機率時,分數會降至最低。Brier 分數會將誤差平方,範圍介於 0 與 1 之間。log score 對高信心但錯誤的預測懲罰嚴重得多;若對最終發生的事件填報 0%,代價將是無限大。

能否將 option delta 解讀為機率?

delta 的絕對值接近市場隱含的選擇權到期時價內機率,但那是風險中性機率,而非現實世界機率。上方圖表將其視為一項預測進行評分:一個軸顯示填報的 delta,另一個軸顯示這些合約實際到期時價內的比例。


此處每個圖表下方都附有完整且原始的 SQL,因此評分結果可以逐行查核。若要將你自己的預測紀錄,針對相同問題與市場預測進行評分,請以一般英文在 Strasmore terminal 索取數據。

#prediction markets#forecasting#brier score#calibration#event contracts