Strasmore Research
학습 Matt Connor작성자 Matt Connor

브라이어 점수 Brier score 계산 및 평가 방법

브라이어 점수는 실제 결과와 확률 예측 사이의 평균 제곱 오차를 측정하는 지표입니다. 점수가 낮을수록 예측 정확도가 높음을 의미하며 모든 사건에 오십 퍼센트 확률을 제시할 경우 점수는 영 점 이오가 됩니다.

브라이어 점수(Brier score)의 이해

브라이어 점수는 실제 발생한 결과와 비교하여 확률 예측의 정확도를 평가하는 지표입니다. 산출 방식은 다음과 같습니다. 먼저 제시한 확률에서 실제 결과값(사건 발생 시 1, 미발생 시 0)을 뺍니다. 그 차이를 제곱한 뒤, 수행한 모든 예측에 대해 평균을 냅니다. 점수가 낮을수록 우수한 예측을 의미합니다. 0점은 완벽한 예측을 뜻하며, 모든 사안에 대해 50%의 확률을 제시할 경우 0.25점이 산출됩니다.

Brier score란 무엇인가?

예측은 확률에 관한 주장이며, 단일 확률값 자체만으로는 옳고 그름을 판단할 수 없습니다. 어떤 사건의 발생 확률을 30%로 예측했는데 실제로 그 사건이 일어났다고 가정해 봅시다. 그렇다면 예측이 틀린 것일까요? 아직은 알 수 없습니다. 1950년 기상 예보관들을 위해 글을 썼던 Glenn Brier는 단일 예측을 평가하는 것을 거부함으로써 이 문제를 해결했습니다. Brier score는 전체 예측 기록을 한꺼번에 평가합니다.

다음은 열 개의 예측으로 구성된 가상의 기록입니다. 이 숫자들은 시장 데이터가 아니며, 산술적 계산을 보여주기 위해 임의로 설정되었습니다.

  • 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 score는 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)) 체결(prints) 0.165 0.25

왜 0.25가 넘어야 할 기준점인가

모든 사안에 대해 50%의 확률을 제시한다고 가정하면, 결과가 어떻게 나오든 각 제곱 오차는 0.25가 됩니다. 이 고정된 0.25는 예/아니오 질문 세트에 대한 정보가 전혀 없는 상태의 벤치마크이며, 스킬 점수(skill score)는 이를 하나의 수치로 변환합니다. 즉, 1에서 (본인의 점수를 벤치마크 점수로 나눈 값)을 뺀 결과입니다. 임의로 설정한 0.165의 로그 값은 0.34라는 스킬 점수로 산출됩니다.

잘못된 점수 산정을 방지하기 위한 한 가지 주의사항이 있습니다. 평가 대상 사건이 전체의 10% 확률로만 발생한다면, 개별 질문에 대해 아무것도 모르는 상태에서 매번 10%라고 답해도 0.09라는 점수가 나옵니다. 따라서 편향된 질문 세트에서 0.25 미만의 점수는 실력을 입증하는 근거가 되지 못합니다. 진정한 의미의 벤치마크는 실제로 답변한 질문들의 기저율(base rate)입니다.

보정(Calibration)과 신뢰도는 함께 평가됩니다

보정이란 70%라고 예측한 모든 사건 중 실제 70%가 발생하는 것을 의미합니다. 통계학자들이 해상도(resolution)라고 부르는 신뢰도는 특정 정보를 알게 되었을 때 기본 확률(base rate)에서 얼마나 벗어날 의지가 있는지를 나타냅니다. 모든 질문에 50%라고 답하는 예측가는 보정은 완벽하지만 전혀 쓸모가 없습니다. 브라이어 점수(Brier score)는 이 두 가지 속성을 동시에 평가합니다. 보정이 어긋나면 점수가 높아지고, 정당한 신뢰도를 확보하면 점수가 낮아집니다.

작성된 로그를 명시된 확률별로 구간화(bucketing)하면 보정 확인이 어떤 모습인지 알 수 있습니다. 파이썬에서는 구간당 한 줄의 코드로 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%.

열 건의 예측으로는 해당 구간에서 어떠한 의미도 도출할 수 없습니다. 보정을 확인하려면 구간당 수백 건의 해결된 질문이 필요합니다. 이 페이지의 나머지 부분에서는 수백만 건의 데이터가 포함된 예측 로그를 사용합니다.

시장 자체의 예측 평가

모든 상장 옵션에는 명시된 확률처럼 작동하는 수치가 존재합니다. 델타(Delta)는 기초자산인 주가가 1달러 변동할 때 옵션 가격이 얼마나 변하는지를 측정하며, 만기 시 내가격(in the money, 가치가 있는 상태)으로 종료되거나 무가치하게 소멸하는 계약의 경우 델타의 절댓값은 해당 옵션이 내가격으로 종료될 것이라는 시장의 내재 확률에 근접합니다. 이는 AAPL 내재 변동성을 결정하는 것과 동일한 표면에서 도출됩니다. 모든 계약은 만기를 맞이하므로, 이러한 모든 예측은 평가를 받게 됩니다.

아래 패널은 2025년 1월부터 2026년 5월까지 만기 약 한 달 전 관측된 모든 SPY 옵션을 가져와 명시된 델타별로 분류하고, 해당 계약이 실제로 내가격으로 종료된 빈도를 집계한 것입니다.

조회SPY 옵션 델타와 해당 계약의 내가격(ITM, In-the-money) 마감 빈도 비교
모든 수치 뒤에 숨겨진 정확한 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개 구간에 걸쳐 실현된 빈도는 시장이 제시한 수치와 유사한 수준을 보입니다. 이것이 바로 보정 테이블(calibration table)의 역할입니다. 보정 테이블은 예측자가 말하는 내용과 실제 발생하는 결과 사이의 간극을 단일 평균치 속에 숨기지 않고 구간별로 드러냅니다.

시장은 동전 던지기를 이기는가?

이제 점수 자체를 살펴본다. 동일한 구성으로, 잘 알려진 몇몇 종목의 Brier score를 정확히 동일한 계약을 대상으로 산출한 50% 기준선(baseline)과 나란히 배치했다.

조회기초자산별 시장 내재 확률의 브라이어 점수(Brier score)
모든 수치 뒤에 숨겨진 정확한 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

NVDA 점수는 28.54 thousand개의 평가된 계약에 대해 0.1122를 기록했으며, 동일한 조건의 평탄한 기준선은 0.25를 기록했다. 6개 종목 중 가장 성과가 낮은 SPY조차 0.1375를 기록했다. 여기서 옵션이 마법을 부리는 것은 아니다. 외가격(out of the money)이 심한 계약은 델타(delta)가 0.02에 가까워 대부분 가치 없이 만기를 맞이하는데, 이는 예측하기 쉬운 영역이며 이러한 용이함이 수치에 반영되어 있다. 이것이 바로 Brier score만 단독으로 제시되었을 때 아무런 의미를 갖지 못하는 주된 이유다.

동일한 예측가라도 질문에 따라 점수가 달라진다

동일한 방법론을 질문의 만기까지 남은 기간에 따라 구분하면 그에 따른 점수 변동을 확인할 수 있다.

조회만기 시점별 시장의 브라이어 점수, SPY
모든 수치 뒤에 숨겨진 정확한 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에 위치하며, 이는 모든 기간에 걸쳐 유일한 고정 참조점이 된다. 두 예측가를 비교하려면 반드시 동일한 기간 동안 동일한 질문을 대상으로 평가해야 한다. 그렇지 않으면 예측가의 실력이 아닌 질문의 난이도를 비교하는 결과가 된다.

적절한 스코어링 규칙이 중요한 이유

평균 절대 오차(Mean absolute error, 예측 확률과 실제 결과 사이의 단순 거리 평균)는 합리적인 대안처럼 보이지만, 평가 방식에 결함이 있습니다. 어떤 사건이 발생할 확률을 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로 상승합니다. 최솟값은 본인이 믿는 수치와 정확히 일치합니다. 이러한 속성을 가진 규칙을 '적절하다(proper)'고 하며, 이것이 Brier 스코어가 예측 토너먼트에서 기본 지표로 자리 잡은 이유입니다.

Log score(로그 스코어)는 또 다른 일반적인 적절한 규칙입니다. 실제 발생한 결과에 부여한 확률의 자연로그 값을 취한 뒤 부호를 반대로 바꿉니다. 발생한 사건에 1%의 확률을 제시하면 4.6의 비용이 발생하며, 0%를 제시하면 무한대의 비용이 발생합니다. 가상의 10개 예측 사례에서 로그 스코어는 0.483으로, 평탄한 기준선(flat baseline)의 0.693보다 낮게 나타납니다. Brier 스코어는 0과 1 사이의 값을 유지하여 스코어카드로 읽기에 더 자연스럽습니다. 로그 스코어는 상한선이 없으며, 이는 꼬리 위험(tails)이 중요한 평가 상황에 적합합니다.

이벤트 컨트랙트가 갖는 의미

특정 사건 발생 시 1달러를 지급하고 발생하지 않으면 0달러를 지급하는 이벤트 컨트랙트는 그 가격 자체가 확률을 나타냅니다. 62센트라는 가격은 스프레드(spread)와 수수료를 제외하기 전, 62%의 발생 확률을 의미합니다. 확률로서의 이벤트 컨트랙트 가격에 관한 당사의 가이드는 이러한 변환 방식을 다루며, 이벤트 컨트랙트의 결제 방식은 컨트랙트상에서 '사건 발생'이 구체적으로 무엇을 의미하는지 설명합니다.

해당 가격은 공개된 실적과 결제일을 가진 예측치이며, 이는 투자자 본인의 기록이 넘어서야 할 벤치마크가 됩니다. 동일한 기간 동안 동일한 질문에 대해 본인의 예측을 점수화하십시오. 브라이어 점수(Brier score)가 시장 가격보다 높게 나온 트레이더는, 거래에 수반된 논리가 아무리 훌륭하더라도 해당 질문 세트에서 측정 가능한 우위를 점하지 못한 것입니다. 이러한 검증 방식은 베팅 배당률에서 수수료(vig)를 제거한 후의 스포츠 배당률이나, Fed 금리 확률이 알려진 결제일에 대한 질문에 대해 날짜가 지정된 확률을 제공하는 금리 시장에도 동일하게 적용됩니다.

이 패널들이 시장을 평가하는 방법

델타(Delta)는 각 컨트랙트의 일일 옵션 그릭스(options greeks) 기록에서 산출됩니다. 관측일에 거래량이 존재하고 변동성(volatility) 값이 수렴된 컨트랙트만을 포함합니다. 결과는 컨트랙트 만기일의 기초자산 종가를 기준으로 판독합니다. 콜옵션은 종가가 행사가격(strike price)보다 높을 때, 풋옵션은 낮을 때 인더머니(in the money)로 간주합니다. 실제 결제는 장 마감 후 행사 결정 과정을 거치므로, 행사가격과 근소한 차이로 마감된 컨트랙트는 이러한 단순화된 기준에 따라 결제될 수 있습니다. 이 패널에 포함된 모든 컨트랙트는 이미 만기가 도래한 상태이며, 장기 구간의 데이터는 관측 기간 내 더 이른 시점의 관측일로부터 산출됩니다. 관측일과 만기일 사이에 주식 분할이 발생하면 행사가격과 결제 가격의 척도가 달라질 수 있으므로, 각 구간마다 표본 수를 명시하는 이유가 여기에 있습니다.

델타는 실제 확률이 아닌 위험중립 확률(risk-neutral probability)을 근사합니다. 이 둘은 옵션 가격에 내재된 위험 프리미엄(risk premium)만큼 차이가 나며, 이를 가정으로 무시하는 대신 그 차이를 측정하는 도구가 바로 보정 테이블(calibration table)입니다.

자주 묻는 질문(FAQ)

Brier score가 낮을수록 더 좋은가요?

그렇습니다. Brier score는 오차 측정치이므로 0은 완벽한 기록을 의미하며, 1은 발생하지 않은 모든 사건에 대해 100% 확률을 제시했을 때 얻게 되는 최악의 점수입니다. 0.25 미만의 점수는 모든 질문에 50%라고 답했을 때 얻는 점수보다 우수한 성적입니다.

좋은 Brier score란 무엇인가요?

질문의 난이도에 따라 점수가 달라지므로 보편적으로 좋은 점수란 존재하지 않습니다. 내일 비가 올 확률을 0.10으로 예측한 기상 예보관과 박빙의 선거 결과를 0.18로 예측한 정치 분석가를 서로 비교할 수는 없습니다. 동일한 기간 동안 동일한 질문에 답한 예측가들 사이에서만 점수를 비교하십시오.

Brier score 0.25는 무엇을 의미하나요?

모든 질문에 50%라고 답한 예측가의 점수입니다. 결과와 상관없이 모든 오차의 제곱이 0.25가 되기 때문입니다. 이는 예/아니오 질문 세트에 대한 표준적인 '정보 없음' 벤치마크이지만, 질문의 구성이 한쪽으로 치우친 경우에는 해당 질문의 기본 발생률(base rate)을 벤치마크로 삼아야 합니다.

Brier score는 log score와 어떻게 다른가요?

둘 다 적절한 채점 규칙(proper scoring rules)으로, 자신이 실제로 믿는 확률을 제시할 때 점수가 최소화됩니다. Brier score는 오차를 제곱하며 0과 1 사이의 값을 가집니다. 반면 log score는 확신을 가지고 틀렸을 때 훨씬 더 가혹하게 처벌하며, 실제로 발생한 사건에 대해 0% 확률을 제시할 경우 무한대의 페널티를 받게 됩니다.

옵션 델타(delta)를 확률로 해석할 수 있나요?

델타의 절댓값은 해당 옵션이 인더머니(in the money, ITM)로 만기될 것이라는 시장의 내재 확률과 유사합니다. 이는 실제 확률이 아닌 위험중립 확률(risk-neutral probability)입니다. 위 패널들은 이를 예측치로 평가합니다. 한 축에는 제시된 델타를, 다른 축에는 실제로 인더머니로 만기된 계약의 비중을 나타냅니다.


여기에 있는 모든 패널은 하단에 정확한 SQL을 포함하고 있어, 라인별로 평가 과정을 검증할 수 있습니다. 동일한 질문에 대해 시장의 예측과 본인의 예측 로그를 비교하려면, Strasmore 터미널에서 평이한 영어로 수치를 요청하십시오.

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