Strasmore Research
Matuto Matt ConnorNi Matt Connor

Brier Score: Paano Suriin ang Forecast

Sinusukat ng Brier score ang probability forecast gamit ang mean squared error laban sa aktuwal na kinalabasan. Mas mababa ang mas mahusay, at 0.25 ang score sa laging pagsagot ng 50%.

Sinusukat ng Brier score ang isang probability forecast batay sa aktuwal na kinalabasan. Kunin ang probability na sinabi mo, ibawas ang outcome (1 kung nangyari ang event, 0 kung hindi), at i-square ang diperensiya. Pagkatapos, kunin ang average ng mga squared difference sa lahat ng forecast na ginawa mo. Mas mababa ang mas mahusay: perpektong record ang 0, habang 0.25 ang score kapag “50%” ang sinasabi mo sa lahat.

Ano ang Brier score?

Ang forecast ay pahayag tungkol sa probability, at hindi maaaring ituring na tama o mali ang isang probability nang mag-isa. Sinabi mong 30% ang posibilidad ng isang bagay, at nangyari ito. Mali ka ba? Hindi pa. Si Glenn Brier, na sumulat para sa mga weather forecaster noong 1950, ay nilutas ito sa pamamagitan ng pagtangging magbigay ng grado sa bawat forecast. Sa halip, sinusukat ng score ang buong talaan nang sabay-sabay.

Narito ang isang kathang-isip na talaan ng ten forecasts. Wala sa mga numerong ito ang nagmula sa market; ginawa lamang ang mga ito upang ipakita ang kalkulasyon.

  • 90% ang sinabi, at nangyari ang event. Squared miss: 0.01.
  • 80% ang sinabi, at nangyari. 0.04.
  • 70% ang sinabi, ngunit hindi nangyari. 0.49.
  • 60% ang sinabi, at nangyari. 0.16.
  • 50% ang sinabi, ngunit hindi nangyari. 0.25.
  • 40% ang sinabi, ngunit hindi nangyari. 0.16.
  • 30% ang sinabi, at nangyari. 0.49.
  • 20% ang sinabi, ngunit hindi nangyari. 0.04.
  • 10% ang sinabi, ngunit hindi nangyari. 0.01.
  • 95% ang sinabi, at nangyari. 0.0025.

Ang kabuuan ng ten squared miss ay 1.6525. Hatiin ito sa ten, at ang Brier score ay 0.165. Iyan na ang buong kalkulasyon, at tumatakbo ito sa python3 na kasama na sa anumang Mac o Linux machine. Walang kailangang i-install at walang libraries.

  • 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)) prints 0.165 0.25

Bakit 0.25 ang kailangang malampasan

Sabihin ang 50% para sa lahat ng bagay, at ang bawat squared miss ay 0.25, anuman ang mangyari. Ang nakapirming 0.25 na ito ang no-information benchmark para sa anumang set ng yes-or-no questions. Ginagawang isang figure ito ng skill score: 1 minus ang iyong score na hinati sa score ng benchmark. Ang kathang-isip na log na may score na 0.165 ay katumbas ng skill score na 0.34.

May isang caveat na mahalaga para maiwasan ang maling scorekeeping. Kung 10% lamang ng panahon nangyayari ang mga event na sinusukat mo, ang pagsagot ng flat 10% sa bawat pagkakataon ay magbibigay ng score na 0.09 kahit wala kang anumang alam tungkol sa mga indibidwal na tanong. Ang score na mas mababa sa 0.25 ay hindi ebidensiya ng skill kung lopsided ang set ng mga tanong. Ang tamang benchmark ay ang base rate ng mga tanong na aktuwal mong sinagutan.

Calibration at confidence ay parehong sinusukat

Ang calibration ay nangangahulugang sa lahat ng tinawag mong 70%, malapit sa 70% ang aktuwal na mangyayari. Ang confidence, na tinatawag ng mga statistician na resolution, ay kung gaano kalayo kang handang lumihis mula sa base rate kapag may alam kang impormasyon. Ang forecaster na nagsasabi ng 50% sa bawat tanong ay perpektong calibrated ngunit lubos na walang silbi. Sabay na sinusukat ng Brier score ang dalawang katangiang ito: pinapataas ito ng maling calibration, habang ibinababa ito ng confidence na nakatutulong.

Makikita kung ano ang hitsura ng calibration check sa pamamagitan ng paggrupo sa ginawang log ayon sa stated probability. Sa Python, isang linya ito bawat bucket, hits = [o for p, o in rows if p >= 0.8], at pagkatapos ay ang average ng hits.

  • Stated na 10% hanggang 30%, average na 20%: 1 sa 3 ang nangyari, 33%.
  • Stated na 40% hanggang 50%, average na 45%: 0 sa 2 ang nangyari, 0%.
  • Stated na 60% hanggang 70%, average na 65%: 1 sa 2 ang nangyari, 50%.
  • Stated na 80% hanggang 95%, average na 88%: 3 sa 3 ang nangyari, 100%.

Hindi sapat ang ten forecasts para makabuo ng anumang konklusyon mula sa mga bucket na iyon. Kailangan ng calibration ang daan-daang resolved questions bawat bucket. Gumagamit ang natitirang bahagi ng page na ito ng forecast log na naglalaman ng millions nito.

Pagtatasa sa sariling forecast ng market

May numerong kumakatawan sa tila probability sa bawat listed option. Sinusukat ng delta kung gaano kalaki ang galaw ng presyo ng option sa bawat one dollar na galaw ng underlying stock. Para sa kontratang mag-e-expire na in the money (may halaga sa expiry) o magiging walang halaga, ang absolute value ng delta ay karaniwang malapit sa implied probability ng market na magtatapos ito in the money. Galing ito sa parehong surface na nagtatakda ng implied volatility ng AAPL. Nag-e-expire ang bawat kontrata, kaya nasusuri ang bawat forecast.

Kinukuha ng panel sa ibaba ang bawat SPY option na naobserbahan humigit-kumulang isang buwan bago ang expiry, mula January 2025 hanggang May 2026. Ibinubukod ang mga ito ayon sa stated delta at binibilang kung gaano kadalas nagtapos na in the money ang kontrata.

QuerySPY option deltas kumpara sa dalas ng pag-expire ng mga contract na in the money
Ang eksaktong SQL sa likod ng bawat numero
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

Basahin ang dalawang serye bilang paghahambing. Sa pinakamababang bucket, nagtakda ang market ng average na 5.2%, at nagtapos na in the money ang mga kontratang iyon nang 3.7% ng panahon. Sa pinakamataas na bucket, ang stated na 94% ay may 96.5% na nagtapos na in the money. Sa lahat ng 10 bucket, ang realized frequency ay nasa kaparehong antas ng stated frequency. Iyan ang layunin ng calibration table: inilalantad nito, bucket kada bucket, ang pagitan ng sinasabi ng forecaster at ng aktuwal na nangyayari, sa halip na itago ito sa iisang average.

Nalalampasan ba ng merkado ang coin flip?

Ngayon naman, ang score mismo. Pareho ang construction, ilang kilalang pangalan, at ang Brier score ng bawat isa ay nakalagay sa tabi ng flat 50% baseline na kinuwenta gamit ang eksaktong parehong contracts.

QueryBrier score ng mismong probability na ipinahayag ng market, ayon sa underlying
Ang eksaktong SQL sa likod ng bawat numero
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

Nakakuha ang NVDA ng score na 0.1122 sa 28.54 thousand graded contracts, kumpara sa 0.25 ng flat baseline sa kaparehong set. Ang pinakamahina sa 6 pangalan, ang SPY, ay umabot pa rin sa 0.1375. Hindi magic ang options dito. Ang deep out-of-the-money contracts ay may delta na malapit sa 0.02 at kadalasang nag-e-expire nang walang halaga. Madaling tamaan ang ganitong forecast, at kasama sa score ang pagiging madali nito. Ito ang pangunahing dahilan kung bakit halos walang sinasabi ang Brier score kapag ipinakita nang mag-isa.

Parehong forecaster, magkakaiba ang score sa magkakaibang tanong

Ihiwalay ang parehong method ayon sa layo ng panahon bago malutas ang tanong, at tingnan kung paano nagbabago ang score sa ilalim nito.

QueryBrier score ng market sa iba't ibang expiry horizon, SPY
Ang eksaktong SQL sa likod ng bawat numero
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

Ang delta ng market ay nakakuha ng score na 0.1084 sa mga kontratang may natitirang 1 to 7 days at 0.1218 sa mga kontratang may natitirang 121 to 250 days. Parehong forecaster at parehong method, ngunit dalawang magkaibang hanay ng mga tanong. Ang flat na 50% baseline ay nasa 0.25 sa unang row at 0.25 sa huling row, kaya ito ang iisang fixed reference sa bawat horizon. Kailangang pareho ang mga tanong at window kapag naghahambing ng dalawang forecaster. Kung hindi, ang inihahambing ay ang hirap ng mga tanong, hindi ang skill.

Bakit mahalaga ang proper scoring rules

Ang mean absolute error, o average ng simpleng layo sa pagitan ng iyong probability at aktuwal na kinalabasan, ay mukhang makatwirang alternatibo ngunit hindi mahusay ang resulta nito. Ipagpalagay na tunay mong naniniwalang 70% ang posibilidad na mangyari ang isang event. Kung 70% ang idineklara mo, ang inaasahang absolute error ay 0.7 x 0.3 + 0.3 x 0.7 = 0.42. Kung 100% naman ang ideklara mo, bababa ito sa 0.7 x 0 + 0.3 x 1 = 0.30. Sa ilalim ng absolute error, napaparusahan ang tapat na pagtataya. Ang metric na nagbibigay ng gantimpala sa labis na confidence ay hindi sumusukat ng forecasting.

Walang ganitong butas ang Brier score. Kung naniniwala kang 70% ang posibilidad at 70% ang idineklara mo, ang inaasahang score ay 0.7 x 0.09 + 0.3 x 0.49 = 0.21. Kung 100% ang ideklara mo, tataas ito sa 0.30. Kung 60% naman, tataas ito sa 0.22. Eksaktong nasa numerong pinaniniwalaan mo ang minimum. Ang rule na may ganitong katangian ay tinatawag na proper. Ito ang dahilan kung bakit naging default ang Brier sa mga forecasting tournament.

Ang log score ang isa pang karaniwang proper rule. Kinukuha nito ang natural log ng probability na itinalaga mo sa kinalabasang nangyari, pagkatapos ay binabaligtad ang sign. Kung 1% ang itinalaga mo sa isang bagay na nangyari, ang cost ay 4.6. Kung 0% naman, infinity ang cost. Sa gawa-gawang ten forecast, umabot ito sa 0.483 kumpara sa 0.693 para sa flat baseline. Nananatili ang Brier sa pagitan ng 0 at 1, kaya mas natural itong basahin bilang scorecard. Unbounded ang log score, kaya angkop ito sa grading kung saan nasa tails ang risk.

Ano ang ibig sabihin nito para sa event contracts

Ang event contract na nagbabayad ng $1 kapag nangyari ang isang bagay at $0 kapag hindi ito nangyari ay nakikipagkalakalan sa presyong nagsasaad na ng probability. Ang sixty two cents ay forecast na 62%, bago ibawas ang spread at fees. Ipinapaliwanag ng aming gabay sa mga presyo ng event contract bilang probabilities ang conversion na ito, habang tinatalakay naman ng kung paano nasesettle ang event contracts kung ano ang ibig sabihin ng “nangyari ito” ayon sa mismong pananalita ng contract.

Ang presyong iyon ay isang forecast na may public track record at settlement date. Dahil dito, ito ang benchmark na kailangang malampasan ng sarili mong log. I-score ang iyong mga forecast gamit ang parehong mga tanong sa parehong panahon. Kung mas mataas ang Brier score ng trader kaysa sa score na ipinapahiwatig ng presyo, wala siyang nasusukat na edge sa set ng mga tanong na iyon, gaano man kaganda ang narrative na kaugnay ng trade. Nalalapat din ang parehong test sa sports odds kapag inaalis mo ang vig sa betting odds, at sa rate markets, kung saan ang Fed rate odds ay nagbibigay ng dated probability para sa tanong na may tiyak na araw ng resolution.

Paano binibigyan ng score ng mga panel na ito ang market

Ang Delta ay nagmumula sa daily options greeks record para sa bawat contract. Isinasama lamang ang mga contract na may volume sa observation day at may nag-converge na volatility solve. Kinukuha ang outcome mula sa closing price ng underlying sa expiration date ng contract: itinuturing na in the money ang call kapag mas mataas sa strike ang close, at ang put kapag mas mababa rito. Ang aktuwal na settlement ay dumaraan sa exercise decision pagkatapos ng close. Kaya maaaring iba ang settlement ng mga contract na ilang cents lamang ang layo sa strike kaysa sa ipinapakitang simplification na ito. Nag-expire na ang bawat contract sa mga panel na ito. Ang mas mahahabang horizon bucket ay kinakailangang kumukuha ng mas naunang observation dates sa loob ng window. Kung magkakaroon ng share split sa pagitan ng observation date at expiry, magkaiba ang magiging scale ng strike at settlement price. Isa pa itong dahilan kung bakit may sample count ang bawat bucket.

Tinatantiya ng Delta ang risk-neutral probability, hindi ang real-world probability. Nagkakaiba ang dalawa dahil sa risk premium na nakapaloob sa option prices. Ang calibration table ang instrumentong sumusukat sa pagkakaibang iyon sa halip na ipagpalagay na wala ito.

Mga Madalas Itanong

Mas mabuti ba ang mas mababang Brier score?

Oo. Ang Brier score ay panukat ng error, kaya perpekto ang record kapag 0 at pinakamasama kapag 1. Makukuha ang score na 1 kung magbibigay ng 100% na probability sa lahat ng hindi nangyari. Anumang mas mababa sa 0.25 ay mas mahusay kaysa sa score kapag 50% ang sagot sa bawat tanong.

Ano ang magandang Brier score?

Walang iisang pamantayan para sa magandang score dahil nakadepende ito sa hirap ng mga tanong. Hindi maaaring direktang ihambing ang weather forecaster na may score na 0.10 sa ulan bukas at political forecaster na may score na 0.18 sa dikit na halalan. Ihambing lamang ang mga score ng mga forecaster na sumagot sa parehong mga tanong sa parehong panahon.

Ano ang ibig sabihin ng Brier score na 0.25?

Ito ang score ng forecaster na nagsasabing 50% sa lahat ng tanong, dahil ang squared miss ay magiging 0.25 anuman ang resulta. Ito ang standard no-information benchmark para sa isang set ng yes-or-no questions. Gayunman, kung hindi balanse ang set ng mga tanong, dapat base rate ang gamitin bilang benchmark.

Paano naiiba ang Brier score sa log score?

Pareho silang proper scoring rules. Ibig sabihin, pinakamababa ang score kapag inilalahad mo ang probability na talagang pinaniniwalaan mo. I-s-square ng Brier ang miss at nananatili sa pagitan ng 0 at 1. Mas mabigat na pinaparusahan ng log score ang mga miss na may mataas na kumpiyansa. Kapag naglahad ka ng 0% sa isang bagay na nangyari, infinity ang kapalit na score.

Maaari bang ituring ang option delta bilang probability?

Ang absolute value ng delta ay malapit sa implied probability ng market na magtapos in the money ang option. Risk-neutral probability ito, hindi probability sa aktuwal na mundo. Sa mga panel sa itaas, sinusuri ito bilang forecast: nasa isang axis ang stated delta, at nasa kabilang axis ang bahagi ng mga kontratang iyon na aktuwal na nagtapos in the money.


May eksaktong SQL sa ibaba ng bawat panel dito, kaya maaaring i-audit ang grading line by line. Para i-score ang sarili mong forecast log laban sa forecast ng market sa parehong mga tanong, hingin ang mga numero sa plain English sa Strasmore terminal.

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