Strasmore Research
Apprendre Matt ConnorPar Matt Connor

Score de Brier : évaluer une prévision

Le score de Brier mesure l’erreur quadratique moyenne des prévisions probabilistes. Plus il est faible, mieux c’est, et 0,25 correspond à répondre toujours 50 %.

Le score de Brier évalue une prévision probabiliste par rapport à ce qui s’est effectivement produit. Prenez la probabilité annoncée, soustrayez le résultat (1 si l’événement s’est produit, 0 dans le cas contraire), mettez cette différence au carré, puis calculez la moyenne des carrés pour l’ensemble de vos prévisions. Plus le score est faible, meilleur est le résultat : 0 correspond à un bilan parfait, tandis que 0,25 est le score obtenu en répondant « 50 % » à chaque question.

Qu’est-ce qu’un score de Brier ?

Une prévision est une affirmation de probabilité. Une probabilité ne peut jamais être correcte ou incorrecte à elle seule. Vous avez estimé à 30 % la probabilité qu’un événement se produise, et l’événement s’est produit. Aviez-vous tort ? Pas encore. En 1950, Glenn Brier, qui écrivait pour les prévisionnistes météorologiques, a contourné ce problème en refusant d’évaluer une prévision isolée. Le score évalue l’ensemble des prévisions en une seule fois.

Voici un relevé fictif de dix prévisions. Aucun de ces chiffres ne provient d’un marché. Ils sont inventés pour montrer le calcul.

  • Probabilité annoncée de 90 %, événement réalisé. Écart au carré : 0,01.
  • Probabilité annoncée de 80 %, événement réalisé. Écart au carré : 0,04.
  • Probabilité annoncée de 70 %, événement non réalisé. Écart au carré : 0,49.
  • Probabilité annoncée de 60 %, événement réalisé. Écart au carré : 0,16.
  • Probabilité annoncée de 50 %, événement non réalisé. Écart au carré : 0,25.
  • Probabilité annoncée de 40 %, événement non réalisé. Écart au carré : 0,16.
  • Probabilité annoncée de 30 %, événement réalisé. Écart au carré : 0,49.
  • Probabilité annoncée de 20 %, événement non réalisé. Écart au carré : 0,04.
  • Probabilité annoncée de 10 %, événement non réalisé. Écart au carré : 0,01.
  • Probabilité annoncée de 95 %, événement réalisé. Écart au carré : 0,0025.

La somme des dix écarts au carré est égale à 1,6525. En divisant par dix, on obtient un score de Brier de 0,165. C’est tout le calcul. Il peut être exécuté avec python3, déjà fourni sur tout Mac ou système Linux. Rien à installer et aucune bibliothèque nécessaire.

  • 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

Pourquoi 0,25 est le seuil à dépasser

Si vous attribuez 50 % à chaque événement, chaque erreur au carré vaut 0,25, quel que soit le résultat. Ce 0,25 fixe constitue la référence sans information pour tout ensemble de questions à réponse oui ou non. Le skill score la transforme en une seule valeur : 1 moins votre score divisé par celui de la référence. Le log fictif à 0,165 correspond à un skill score de 0,34.

Une réserve suffit à invalider une grande partie des évaluations erronées. Si les événements évalués ne se produisent que 10 % du temps, indiquer systématiquement 10 % donne un score de 0,09, même sans rien savoir des questions individuelles. Un score inférieur à 0,25 ne prouve donc pas l’existence d’un skill sur un ensemble de questions déséquilibré. La référence pertinente est le taux de base des questions auxquelles vous avez effectivement répondu.

Calibration et confiance s’évaluent ensemble

La calibration signifie que, sur l’ensemble des événements auxquels vous avez attribué une probabilité de 70 %, près de 70 % se produisent. La confiance, que les statisticiens appellent la résolution, désigne l’ampleur de l’écart par rapport au taux de base que vous êtes prêt à prendre lorsque vous disposez d’une information. Un prévisionniste qui répond 50 % à chaque question est parfaitement calibré, mais totalement inutile. Le score de Brier évalue ces deux propriétés simultanément : la mauvaise calibration l’augmente, tandis qu’une confiance justifiée le réduit.

Regrouper le journal fictif par probabilité annoncée montre à quoi ressemble un contrôle de calibration. En Python, cela correspond à une ligne par tranche, hits = [o for p, o in rows if p >= 0.8], puis à la moyenne de hits.

  • Probabilité annoncée de 10 % à 30 %, moyenne de 20 % : 1 cas sur 3 s’est produit, soit 33 %.
  • Probabilité annoncée de 40 % à 50 %, moyenne de 45 % : aucun des 2 cas ne s’est produit, soit 0 %.
  • Probabilité annoncée de 60 % à 70 %, moyenne de 65 % : 1 cas sur 2 s’est produit, soit 50 %.
  • Probabilité annoncée de 80 % à 95 %, moyenne de 88 % : les 3 cas sur 3 se sont produits, soit 100 %.

Dix prévisions sont très loin de suffire pour tirer une conclusion de ces tranches. La calibration nécessite des centaines de questions résolues par tranche. Le reste de cette page utilise un journal de prévisions qui en contient des millions.

Évaluer les prévisions du marché

Chaque option cotée comporte un chiffre qui se comporte comme une probabilité annoncée. Le delta mesure l’ampleur de la variation du prix de l’option pour une variation d’un dollar de l’action sous-jacente. Pour un contrat qui arrive dans la monnaie (et vaut donc quelque chose à l’échéance) ou expire sans valeur, la valeur absolue du delta est proche de la probabilité implicite du marché que le contrat arrive dans la monnaie. Ce chiffre provient de la même surface que celle qui détermine la volatilité implicite d’AAPL. Tous les contrats arrivent à échéance. Chaque prévision peut donc être évaluée.

Le graphique ci-dessous recense toutes les options SPY observées environ un mois avant leur échéance, de janvier 2025 à mai 2026. Il les répartit par niveau de delta annoncé et comptabilise la fréquence à laquelle chaque contrat est arrivé dans la monnaie.

RequêteDeltas des options SPY comparées à la fréquence à laquelle ces contrats ont fini dans la monnaie
Le SQL exact derrière chaque chiffre
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

Comparez les deux séries. Dans le compartiment le plus bas, le marché affichait une moyenne de 5.2%, et ces contrats sont arrivés dans la monnaie dans 3.7% des cas. Dans le compartiment le plus élevé, un niveau annoncé de 94% correspondait à 96.5% de contrats arrivés dans la monnaie. Sur l’ensemble des 10 compartiments, la fréquence réalisée se situe dans la même zone que la fréquence annoncée. C’est précisément le rôle d’une table de calibration : elle met en évidence, compartiment par compartiment, l’écart entre ce qu’annonce une prévision et ce qui se produit, au lieu de le masquer dans une seule moyenne.

Le marché bat-il le pile ou face ?

Passons maintenant au score lui-même. La construction reste la même, avec plusieurs noms bien connus. Le score de Brier de chacun est comparé à la référence uniforme de 50 %, calculée sur exactement les mêmes contrats.

RequêteScore de Brier de la probabilité déclarée par le marché, par sous-jacent
Le SQL exact derrière chaque chiffre
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 obtient un score de 0.1122 sur 28.54 thousand contrats évalués, contre 0.25 pour la référence uniforme sur le même ensemble. Même le moins performant des 6 noms, SPY, atteint 0.1375. Les options ne sont pas magiques ici. Les contrats très out of the money affichent des deltas proches de 0,02 et arrivent le plus souvent à expiration sans valeur. Il s’agit donc d’une prévision facile à réussir, et cette facilité est intégrée au chiffre. C’est la principale raison pour laquelle un score de Brier pris isolément n’apporte presque aucune information.

Le même prévisionniste obtient des scores différents selon les questions

La même méthode produit des résultats différents selon l’horizon auquel la question se dénoue, et le score varie en conséquence.

RequêteScore de Brier du marché selon les horizons d’échéance, SPY
Le SQL exact derrière chaque chiffre
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

Le delta du marché a obtenu 0.1084 sur les contrats dont l’échéance était de 1 to 7 days et 0.1218 sur ceux dont l’échéance était de 121 to 250 days. Même prévisionniste, même méthode, deux ensembles de questions différents. La référence constante de 50 % se situe à 0.25 sur la première ligne et à 0.25 sur la dernière. Elle constitue donc le seul repère fixe pour tous les horizons. Toute comparaison entre deux prévisionnistes doit porter sur les mêmes questions et la même période. Sinon, elle mesure la difficulté des questions plutôt que la compétence.

Pourquoi les proper scoring rules sont importantes

L’erreur absolue moyenne, c’est-à-dire la moyenne de l’écart brut entre votre probabilité et le résultat, semble être une alternative raisonnable. Pourtant, elle évalue mal les prévisions. Supposons que vous estimiez réellement à 70 % la probabilité qu’un événement se produise. En indiquant 70 %, votre erreur absolue attendue est de 0,7 x 0,3 + 0,3 x 0,7 = 0,42. En indiquant plutôt 100 %, elle tombe à 0,7 x 0 + 0,3 x 1 = 0,30. Avec l’erreur absolue, le chiffre honnête vous pénalise. Une métrique qui vous incite à surestimer votre confiance ne mesure pas la qualité d’une prévision.

Le score de Brier ne présente pas cette faille. Si vous estimez la probabilité à 70 % et indiquez 70 %, votre score attendu est de 0,7 x 0,09 + 0,3 x 0,49 = 0,21. Si vous indiquez 100 %, il monte à 0,30. Si vous indiquez 60 %, il monte à 0,22. Le minimum se situe exactement au niveau de la probabilité que vous estimez. Une règle qui possède cette propriété est dite propre (« proper »). C’est la raison pour laquelle le score de Brier est devenu la référence des tournois de prévision.

Le log score est l’autre règle propre courante. Il consiste à prendre le logarithme naturel de la probabilité que vous aviez attribuée au résultat qui s’est produit, puis à inverser le signe. Attribuer 1 % à un événement qui se produit coûte 4,6, tandis qu’attribuer 0 % coûte l’infini. Sur les dix prévisions fictives, le log score ressort à 0,483, contre 0,693 pour la référence uniforme. Le score de Brier reste compris entre 0 et 1, ce qui le rend plus intuitif dans un tableau de suivi. Le log score n’est pas borné, ce qui convient aux évaluations où le risque se concentre dans les extrêmes.

Ce que cela signifie pour les event contracts

Un event contract qui verse 1 dollar si un événement se produit et 0 dollar dans le cas contraire se négocie à un prix qui intègre déjà une probabilité. Soixante-deux cents correspondent à une prévision de 62 %, avant déduction du spread et des frais. Notre guide sur les prix des event contracts comme probabilités explique cette conversion. Celui consacré à la façon dont les event contracts sont réglés précise ce que signifie « l’événement s’est produit » selon les propres termes du contrat.

Ce prix est une prévision assortie d’un historique public et d’une date de règlement. Il constitue donc le benchmark que votre propre journal de suivi doit dépasser. Évaluez vos prévisions sur les mêmes questions et sur la même période. Un trader dont le score de Brier est supérieur à celui du prix ne présente aucun edge mesuré sur cet ensemble de questions, quelle que soit la qualité du récit associé au trade. Le même test s’applique aux cotes sportives, une fois que vous avez retiré la marge des cotes de paris, ainsi qu’aux marchés de taux, où les probabilités de taux de la Fed vous donnent une probabilité datée pour une question dont la date de résolution est connue.

Comment ces tableaux évaluent le marché

Le delta provient de l’historique quotidien des greeks des options pour chaque contrat. Seuls les contrats ayant enregistré un volume le jour d’observation et pour lesquels la résolution de la volatilité a convergé sont inclus. Le résultat est déterminé à partir du cours de clôture du sous-jacent à la date d’expiration du contrat : un call est considéré comme in the money lorsque ce cours est supérieur au strike ; un put, lorsqu’il lui est inférieur. Le règlement effectif passe par une décision d’exercice après la clôture. Les contrats dont le cours est à quelques centimes du strike peuvent donc être réglés différemment de cette simplification. Tous les contrats présentés dans ces tableaux ont déjà expiré. Les tranches correspondant aux horizons les plus longs utilisent nécessairement des dates d’observation plus anciennes dans la période étudiée. Un split d’action intervenant entre la date d’observation et l’expiration placerait le strike et le prix de règlement sur des échelles différentes. C’est une raison supplémentaire pour laquelle chaque tranche indique la taille de son échantillon.

Le delta constitue une approximation de la probabilité risque-neutre, et non de la probabilité dans le monde réel. Les deux diffèrent en raison de la prime de risque intégrée aux prix des options. Une table de calibration mesure cette différence au lieu de la supposer nulle.

Foire aux questions

Un score de Brier plus faible est-il préférable ?

Oui. Le score de Brier mesure une erreur. Un score de 0 correspond donc à un résultat parfait, tandis que 1 est le pire résultat possible. Ce dernier est obtenu en attribuant 100 % à tous les événements qui ne se sont pas produits. Tout score inférieur à 0,25 est meilleur que celui obtenu en répondant 50 % à chaque question.

Quel est un bon score de Brier ?

Il n’existe pas de bon score universel, car le résultat dépend de la difficulté des questions. Un prévisionniste météo affichant 0,10 sur la pluie du lendemain et un prévisionniste politique affichant 0,18 sur des élections serrées ne peuvent pas être comparés. Comparez uniquement les scores de prévisionnistes répondant aux mêmes questions sur la même période.

Que signifie un score de Brier de 0,25 ?

C’est le score d’un prévisionniste qui répond 50 % à toutes les questions. Chaque erreur au carré vaut alors 0,25, quel que soit le résultat. Il s’agit de la référence standard en l’absence d’information pour un ensemble de questions binaires. Pour un ensemble de questions déséquilibré, le taux de base constitue toutefois la référence appropriée.

Quelle est la différence entre le score de Brier et le log score ?

Les deux sont des règles de scoring propres. Cela signifie que leur valeur est minimale lorsque vous indiquez la probabilité que vous estimez réellement. Le score de Brier met l’erreur au carré et reste compris entre 0 et 1. Le log score pénalise beaucoup plus fortement les erreurs commises avec une forte conviction. Attribuer 0 % à un événement qui se produit entraîne un coût infini.

Le delta d’une option peut-il être interprété comme une probabilité ?

La valeur absolue du delta est proche de la probabilité implicite de marché que l’option termine dans la monnaie. Il s’agit toutefois d’une probabilité risque-neutre, et non d’une probabilité dans le monde réel. Les panneaux ci-dessus l’évaluent comme une prévision : le delta indiqué figure sur un axe, et la part des contrats ayant effectivement terminé dans la monnaie sur l’autre.


Chaque panneau est accompagné de la requête SQL exacte qui le sous-tend. L’évaluation peut donc être auditée ligne par ligne. Pour comparer votre propre historique de prévisions à celui du marché sur les mêmes questions, demandez les chiffres en anglais courant sur le terminal Strasmore.

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