Strasmore Research
Leren Matt ConnorDoor Matt Connor

Hoe berekent u een Brier score voor uw prognoses?

De Brier score beoordeelt de nauwkeurigheid van waarschijnlijkheidsvoorspellingen via de mean squared error. Een lagere score is beter en nul is een perfect resultaat.

De Brier score beoordeelt een waarschijnlijkheidsvoorspelling op basis van de werkelijke uitkomst. Neem de door u opgegeven waarschijnlijkheid, trek daar de uitkomst van af (1 als de gebeurtenis plaatsvond, 0 als dat niet zo was), kwadrateer dat verschil en bereken vervolgens het gemiddelde van de kwadraten over al uw voorspellingen. Een lagere score is beter: 0 staat voor een perfect resultaat, en 0,25 is de score die u behaalt door bij alles "50%" te zeggen.

Wat is een Brier score?

Een prognose is een bewering over waarschijnlijkheid, en één waarschijnlijkheid kan op zichzelf nooit goed of fout zijn. U schatte de kans op iets in op dertig procent en het gebeurde. Had u het mis? Nog niet. Glenn Brier, die in negentienhonderdvijftig schreef voor weersvoorspellers, loste dit op door te weigeren een enkele prognose te beoordelen. De score beoordeelt het gehele logboek in één keer.

Hier is een fictief logboek van tien prognoses. Geen van deze cijfers is afkomstig uit een markt; ze zijn verzonnen om de rekenkunde te demonstreren.

  • Negentig procent gesteld, de gebeurtenis vond plaats. Gekwadrateerde afwijking nul komma nul één.
  • Tachtig procent gesteld, vond plaats. Nul komma nul vier.
  • Zeventig procent gesteld, vond niet plaats. Nul komma vier negen.
  • Zestig procent gesteld, vond plaats. Nul komma één zes.
  • Vijftig procent gesteld, vond niet plaats. Nul komma twee vijf.
  • Veertig procent gesteld, vond niet plaats. Nul komma één zes.
  • Dertig procent gesteld, vond plaats. Nul komma vier negen.
  • Twintig procent gesteld, vond niet plaats. Nul komma nul vier.
  • Tien procent gesteld, vond niet plaats. Nul komma nul één.
  • Vijfennegentig procent gesteld, vond plaats. Nul komma nul nul twee vijf.

De tien gekwadrateerde afwijkingen tellen op tot één komma zes vijf twee vijf. Deel dit door tien en de Brier score is nul komma één zes vijf. Dat is de volledige berekening, en deze draait in de python3 die standaard aanwezig is op elke Mac of Linux-machine. Niets te installeren, geen bibliotheken.

  • 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

Waarom 0,25 het te kloppen getal is

Stel dat u voor alles vijftig procent invult; elke gekwadrateerde misser is dan 0,25, wat er ook gebeurt. Die vaste 0,25 is de benchmark zonder informatie voor elke reeks ja-of-nee-vragen. De skill score vertaalt dit naar één cijfer: 1 minus uw score gedeeld door die van de benchmark. De verzonnen log op 0,165 resulteert in een skill score van 0,34.

Eén voorbehoud maakt een einde aan veel gebrekkige scoreregistratie. Als de gebeurtenissen die u beoordeelt slechts in tien procent van de gevallen plaatsvinden, levert het invullen van een vast percentage van tien procent een score van 0,09 op, terwijl u in feite niets weet over de individuele vragen. Een score onder 0,25 is bij een scheve vragenset geen bewijs van vaardigheid. De eerlijke benchmark is het basispercentage van de vragen die u daadwerkelijk heeft beantwoord.

Kalibratie en betrouwbaarheid worden gezamenlijk beoordeeld

Kalibratie betekent dat van alles waaraan u een waarschijnlijkheid van zeventig procent toekent, ook daadwerkelijk bijna zeventig procent uitkomt. Betrouwbaarheid, door statistici resolutie genoemd, is de mate waarin u bereid bent af te wijken van de basisverwachting wanneer u over specifieke informatie beschikt. Een voorspeller die bij elke vraag vijftig procent antwoordt, is perfect gekalibreerd maar volkomen nutteloos. De Brier score weegt beide eigenschappen tegelijk: gebrekkige kalibratie verhoogt de score, terwijl verdiende betrouwbaarheid deze verlaagt.

Het onderverdelen van het fictieve logboek op basis van de opgegeven waarschijnlijkheid laat zien hoe een kalibratiecheck eruitziet. In Python is dat één regel per categorie, hits = [o for p, o in rows if p >= 0.8], gevolgd door het gemiddelde van hits.

  • 10% tot 30% opgegeven, gemiddelde 20%: 1 van de 3 gebeurde, 33%.
  • 40% tot 50% opgegeven, gemiddelde 45%: 0 van de 2 gebeurde, 0%.
  • 60% tot 70% opgegeven, gemiddelde 65%: 1 van de 2 gebeurde, 50%.
  • 80% tot 95% opgegeven, gemiddelde 88%: 3 van de 3 gebeurde, 100%.

Tien voorspellingen zijn bij lange na niet voldoende om conclusies te trekken uit deze categorieën. Voor kalibratie zijn honderden afgewikkelde vragen per categorie nodig. De rest van deze pagina maakt gebruik van een voorspellingslogboek met miljoenen van dergelijke datapunten.

De marktvoorspelling beoordelen

Elke beursgenoteerde optie bevat een getal dat fungeert als een uitgesproken waarschijnlijkheid. Delta meet de koersbeweging van de optie bij een verandering van één dollar in het onderliggende aandeel. Voor een contract dat uiteindelijk in the money (met waarde bij expiratie) of waardeloos afloopt, ligt de absolute waarde van de delta dicht bij de door de markt impliciete waarschijnlijkheid dat het contract in the money eindigt. Dit komt voort uit hetzelfde model dat de implied volatility van AAPL bepaalt. Elk contract expireert, waardoor al deze voorspellingen worden getoetst.

Onderstaand overzicht neemt alle SPY-opties die ongeveer een maand voor expiratie zijn geobserveerd, van januari tweeduizend vijfentwintig tot en met mei tweeduizend zesentwintig, verdeelt deze in categorieën op basis van de opgegeven delta en telt hoe vaak het contract in the money eindigde.

QuerySPY option deltas afgezet tegen de frequentie waarmee deze contracten in-the-money expireerden
De exacte SQL achter elk getal
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

Vergelijk de twee reeksen met elkaar. In de laagste categorie gaf de markt een gemiddelde van 5.2% aan en eindigden die contracten 3.7% van de tijd in the money. In de hoogste categorie ging een opgegeven 94% gepaard met 96.5% dat in the money eindigde. Over alle 10 categorieën heen ligt de gerealiseerde frequentie in de buurt van de opgegeven waarde. Dat is de essentie van een kalibratietabel: deze legt het verschil bloot tussen wat een voorspeller zegt en wat er daadwerkelijk gebeurt, per categorie, in plaats van dit te verhullen in één enkel gemiddelde.

Verslaat de markt de kop-of-munt-kans?

Nu de score zelf. Dezelfde constructie, diverse bekende namen; de Brier score van elke naam staat naast de vlakke baseline van vijftig procent, berekend over exact dezelfde contracten.

QueryBrier score van de door de markt aangegeven waarschijnlijkheid, per underlying
De exacte SQL achter elk getal
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

NVDA behaalt een score van 0.1122 over 28.54 thousand beoordeelde contracten, tegenover de 0.25 van de vlakke baseline over dezelfde set. De zwakste van de 6 namen, SPY, komt nog steeds uit op 0.1375. Opties zijn hier geen tovermiddel. Deep out of the money-contracten hebben een delta van bijna 0,02 en lopen meestal waardeloos af; dat is een eenvoudige voorspelling om goed te hebben, en die eenvoud is verwerkt in het cijfer. Dit is de voornaamste reden waarom een Brier score op zichzelf bijna niets zegt.

Dezelfde voorspeller scoort verschillend op diverse vragen

Splits de identieke methode op basis van de looptijd van de vraag en de score varieert daaronder.

QueryBrier score van de markt over verschillende expiry horizons, SPY
De exacte SQL achter elk getal
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

De delta van de markt scoorde 0.1084 op contracten met 1 to 7 days looptijd en 0.1218 op contracten met 121 to 250 days looptijd. Dezelfde voorspeller, dezelfde methode, twee verschillende sets vragen. De vlakke baseline van vijftig procent bevindt zich op 0.25 in de eerste rij en 0.25 in de laatste, wat het het enige vaste referentiepunt maakt over elke horizon. Elke vergelijking tussen twee voorspellers moet plaatsvinden op basis van dezelfde vragen over hetzelfde tijdvenster, anders vergelijkt men de moeilijkheidsgraad van de vragen in plaats van de vaardigheid.

Waarom correcte scoringregels van belang zijn

Mean absolute error, het gemiddelde van de absolute afstand tussen uw waarschijnlijkheid en de uitkomst, klinkt als een redelijk alternatief, maar beoordeelt slecht. Stel dat u oprecht gelooft dat een gebeurtenis zeventig procent waarschijnlijk is. Geeft u zeventig procent op, dan is uw verwachte absolute fout 0,7 x 0,3 + 0,3 x 0,7 = 0,42. Geeft u in plaats daarvan honderd procent op, dan daalt deze naar 0,7 x 0 + 0,3 x 1 = 0,30. Bij absolute fout kost het eerlijke getal u geld, en een metriek die u beloont voor het overdrijven van uw vertrouwen meet geen voorspellend vermogen.

De Brier score heeft dit gebrek niet. Geloof in zeventig procent en geef zeventig procent op, dan is uw verwachte score 0,7 x 0,09 + 0,3 x 0,49 = 0,21. Geeft u honderd procent op, dan stijgt deze naar 0,30. Geeft u zestig procent op, dan stijgt deze naar 0,22. Het minimum ligt exact op het getal waarin u gelooft. Een regel met die eigenschap wordt 'proper' genoemd, en dat is de reden waarom Brier de standaard werd in voorspellingstoernooien.

De log score is de andere gangbare 'proper' regel: neem de natuurlijke logaritme van de waarschijnlijkheid die u toekende aan de uitkomst die daadwerkelijk plaatsvond, en draai vervolgens het teken om. Eén procent opgeven voor iets dat gebeurt kost 4,6, en nul procent opgeven kost oneindig. Bij de verzonnen tien voorspellingen komt de log score uit op 0,483 tegenover 0,693 voor de vlakke baseline. Brier blijft tussen nul en één, wat natuurlijker leest als scorekaart. De log score is onbegrensd, wat geschikt is voor beoordelingen waarbij de uiterste waarden het risico dragen.

Wat dit betekent voor event contracts

Een event contract dat één dollar uitkeert als iets gebeurt en nul dollar als dat niet zo is, verhandelt tegen een prijs die al een waarschijnlijkheid uitdrukt. Tweeënzestig cent is een prognose van tweeënzestig procent, nog voordat de spread en kosten in mindering zijn gebracht. Onze gids over event contract-prijzen als waarschijnlijkheden behandelt die omrekening, en hoe event contracts afwikkelen beschrijft wat "het is gebeurd" betekent in de bewoordingen van het contract zelf.

Die prijs is een prognose met een publieke staat van dienst en een afwikkelingsdatum, wat het de benchmark maakt die uw eigen logboek moet zien te verslaan. Beoordeel uw prognoses op dezelfde vragen over hetzelfde tijdsbestek. Een trader wiens Brier score hoger uitvalt dan de prijs, heeft geen meetbaar voordeel op die vragenset, hoe goed het narratief bij de trade ook is. Dezelfde test is van toepassing op sportweddenschappen zodra u de vig uit de quoteringen verwijdert, en op rentemarkten, waar Fed rate odds u een gedateerde waarschijnlijkheid bieden voor een vraag met een bekende afwikkelingsdag.

Hoe deze panels de markt beoordelen

Delta is afkomstig uit het dagelijkse overzicht van optie-greeks voor elk contract. Alleen contracten met volume op de observatiedag en een geconvergeerde volatiliteit worden meegenomen. De uitkomst wordt afgelezen van de slotkoers van de onderliggende waarde op de expiratiedatum van het contract: een call geldt als in the money wanneer die slotkoers boven de strike ligt, een put wanneer deze eronder ligt. De feitelijke afwikkeling verloopt via een uitoefenbesluit na het slot, dus contracten die binnen enkele centen van de strike liggen, kunnen afwijken van deze vereenvoudiging. Elk contract in deze panels is reeds geëxpireerd, en de buckets met een langere horizon putten noodzakelijkerwijs uit eerdere observatiedata in het venster. Een aandelensplitsing die valt tussen de observatiedatum en de expiratie zou de strike en de afwikkelingsprijs op verschillende schalen plaatsen; dit is een extra reden waarom elke bucket het aantal waarnemingen vermeldt.

Delta benadert een risiconeutrale waarschijnlijkheid in plaats van een reële waarschijnlijkheid. De twee verschillen door de risicopremie die in optieprijzen is verwerkt, en een kalibratietabel is het instrument dat dat verschil meet in plaats van het weg te cijferen.

Veelgestelde vragen

Is een lagere Brier score beter?

Ja. De Brier score is een foutmeting; 0 is een perfect resultaat en 1 is het slechtst mogelijke resultaat, wat wordt behaald door honderd procent toe te kennen aan alles wat niet is gebeurd. Alles onder 0,25 is beter dan de score die u zou krijgen door op elke vraag vijftig procent te antwoorden.

Wat is een goede Brier score?

Er bestaat geen universeel goed getal, aangezien de score afhangt van de moeilijkheidsgraad van de vragen. Een weersvoorspeller met 0,10 voor de regen van morgen en een politiek analist met 0,18 voor nipte verkiezingen kunnen niet met elkaar worden vergeleken. Vergelijk scores alleen tussen voorspellers die dezelfde vragen beantwoorden over dezelfde periode.

Wat betekent een Brier score van 0,25?

Dit is de score van een voorspeller die overal vijftig procent op antwoordt, aangezien elke gekwadrateerde afwijking dan 0,25 is, ongeacht de uitkomst. Het is de standaard benchmark zonder informatie voor een reeks ja-nee-vragen, hoewel een scheve vragenset het basispercentage als benchmark nodig heeft.

Hoe verschilt de Brier score van de log score?

Beide zijn correcte scoring rules, wat betekent dat ze elk worden geminimaliseerd wanneer u de waarschijnlijkheid opgeeft die u daadwerkelijk gelooft. De Brier score kwadrateert de afwijking en blijft tussen 0 en 1. De log score straft zelfverzekerde missers veel zwaarder af, en een opgegeven 0 procent voor iets dat wel gebeurt, kost oneindig veel.

Kan option delta worden gelezen als een waarschijnlijkheid?

De absolute waarde van delta ligt dicht bij de door de markt geïmpliceerde waarschijnlijkheid dat de optie in-the-money eindigt, en het is een risiconeutrale waarschijnlijkheid in plaats van een reële. De bovenstaande panels beoordelen dit als een prognose: de opgegeven delta op de ene as, het aandeel van die contracten dat daadwerkelijk in-the-money eindigde op de andere.


Elk panel hier wordt geleverd met de exacte SQL eronder, zodat de beoordeling regel voor regel controleerbaar is. Om uw eigen prognoselogboek te scoren tegen dat van de markt voor dezelfde vragen, kunt u op de Strasmore terminal om de cijfers in begrijpelijke taal vragen.

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