Strasmore Research
Edukasi Matt ConnorOleh Matt Connor

Brier Score: Cara Menilai Prakiraan

Brier score menilai prakiraan probabilitas sebagai mean squared error terhadap hasil aktual. Nilai lebih rendah lebih baik, dan 0,25 adalah hasil dari selalu menyatakan 50%.

Brier score menilai prakiraan probabilitas berdasarkan hasil yang benar-benar terjadi. Kurangi hasil aktual—1 jika peristiwa terjadi dan 0 jika tidak—dari probabilitas yang Anda nyatakan. Kuadratkan selisih tersebut, lalu hitung rata-rata kuadratnya untuk seluruh prakiraan yang dibuat. Nilai yang lebih rendah lebih baik: 0 adalah catatan sempurna, sedangkan 0,25 adalah skor yang diperoleh jika Anda menyatakan “50%” untuk semua hal.

Apa yang dimaksud dengan Brier score?

Forecast merupakan pernyataan tentang probabilitas. Satu probabilitas tidak dapat dinilai benar atau salah dengan sendirinya. Anda menyatakan bahwa suatu peristiwa memiliki kemungkinan 30%, lalu peristiwa itu terjadi. Apakah Anda salah? Belum tentu. Glenn Brier, yang menulis untuk peramal cuaca pada 1950, mengatasi masalah ini dengan tidak menilai satu forecast secara terpisah. Brier score menilai seluruh catatan forecast sekaligus.

Berikut catatan fiktif berisi sepuluh forecast. Tidak satu pun angka ini berasal dari pasar. Semuanya dibuat untuk menunjukkan perhitungannya.

  • Dinyatakan 90%, peristiwa terjadi. Selisih kuadrat 0.01.
  • Dinyatakan 80%, peristiwa terjadi. 0.04.
  • Dinyatakan 70%, peristiwa tidak terjadi. 0.49.
  • Dinyatakan 60%, peristiwa terjadi. 0.16.
  • Dinyatakan 50%, peristiwa tidak terjadi. 0.25.
  • Dinyatakan 40%, peristiwa tidak terjadi. 0.16.
  • Dinyatakan 30%, peristiwa terjadi. 0.49.
  • Dinyatakan 20%, peristiwa tidak terjadi. 0.04.
  • Dinyatakan 10%, peristiwa tidak terjadi. 0.01.
  • Dinyatakan 95%, peristiwa terjadi. 0.0025.

Sepuluh selisih kuadrat tersebut berjumlah 1.6525. Bagi dengan sepuluh, maka Brier score adalah 0.165. Itulah seluruh perhitungannya. Perhitungan ini dapat dijalankan dengan python3 yang sudah tersedia secara bawaan pada mesin Mac atau Linux. Tidak perlu menginstal apa pun dan tidak memerlukan library.

  • 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

Mengapa 0.25 menjadi angka pembanding

Jika Anda menyatakan probabilitas 50% untuk setiap hal, setiap kesalahan kuadrat bernilai 0.25, apa pun yang terjadi. Nilai tetap 0.25 itu merupakan benchmark tanpa informasi untuk kumpulan pertanyaan ya atau tidak. Skill score mengubahnya menjadi satu angka: 1 dikurangi skor Anda dibagi skor benchmark. Log rekaan dengan skor 0.165 menghasilkan skill score sebesar 0.34.

Ada satu catatan penting yang dapat mengungkap banyak pencatatan skor yang keliru. Jika peristiwa yang Anda nilai hanya terjadi 10% dari waktu, menyatakan 10% secara tetap setiap kali menghasilkan skor 0.09, meskipun Anda sama sekali tidak mengetahui pertanyaan individual tersebut. Skor di bawah 0.25 bukan bukti adanya skill pada kumpulan pertanyaan yang distribusinya timpang. Benchmark yang tepat adalah base rate dari pertanyaan yang benar-benar Anda jawab.

Kalibrasi dan keyakinan dinilai secara bersamaan

Kalibrasi berarti bahwa dari semua hal yang Anda nyatakan memiliki probabilitas 70%, hampir 70% benar-benar terjadi. Keyakinan, yang oleh ahli statistik disebut resolusi, menunjukkan seberapa jauh Anda bersedia menyimpang dari base rate ketika mengetahui sesuatu. Peramal yang menjawab 50% untuk setiap pertanyaan memiliki kalibrasi sempurna, tetapi sama sekali tidak berguna. Brier score menilai kedua aspek tersebut sekaligus: kalibrasi yang buruk menaikkan nilainya, sedangkan keyakinan yang terbukti benar menurunkannya.

Mengelompokkan log simulasi berdasarkan probabilitas yang dinyatakan menunjukkan seperti apa pemeriksaan kalibrasi. Dalam Python, prosesnya cukup dilakukan dengan satu baris per bucket, hits = [o for p, o in rows if p >= 0.8], lalu menghitung rata-rata hits.

  • Probabilitas yang dinyatakan 10% hingga 30%, rata-rata 20%: 1 dari 3 terjadi, atau 33%.
  • Probabilitas yang dinyatakan 40% hingga 50%, rata-rata 45%: 0 dari 2 terjadi, atau 0%.
  • Probabilitas yang dinyatakan 60% hingga 70%, rata-rata 65%: 1 dari 2 terjadi, atau 50%.
  • Probabilitas yang dinyatakan 80% hingga 95%, rata-rata 88%: 3 dari 3 terjadi, atau 100%.

Sepuluh forecast masih jauh dari cukup untuk menarik kesimpulan dari bucket tersebut. Kalibrasi membutuhkan ratusan pertanyaan yang hasilnya sudah diketahui di setiap bucket. Bagian selanjutnya di halaman ini menggunakan log forecast yang berisi jutaan pertanyaan.

Evaluasi prakiraan pasar itu sendiri

Setiap opsi yang tercatat memiliki angka yang berperilaku seperti probabilitas yang dinyatakan. Delta mengukur seberapa besar harga opsi bergerak untuk setiap kenaikan satu dolar pada saham dasar. Untuk kontrak yang berakhir in the money (bernilai saat jatuh tempo) atau tidak bernilai sama sekali, nilai absolut delta mendekati probabilitas tersirat pasar bahwa kontrak tersebut berakhir in the money. Angka itu berasal dari permukaan yang sama dengan yang menentukan volatilitas tersirat AAPL. Setiap kontrak berakhir, sehingga setiap prakiraan tersebut dapat dievaluasi.

Panel di bawah ini mencakup setiap opsi SPY yang teramati sekitar satu bulan sebelum jatuh tempo, dari Januari 2025 hingga Mei 2026. Opsi-opsi tersebut dikelompokkan berdasarkan delta yang dinyatakan, lalu dihitung seberapa sering kontraknya berakhir in the money.

QueryDelta opsi SPY dibandingkan dengan frekuensi kontrak tersebut berakhir in the money
SQL tepat di balik setiap angka
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

Bandingkan kedua seri tersebut. Pada kelompok terendah, pasar menyatakan rata-rata 5.2%, dan kontrak-kontrak itu berakhir in the money 3.7% dari seluruh waktu. Pada kelompok tertinggi, angka yang dinyatakan sebesar 94% disertai frekuensi berakhir in the money sebesar 96.5%. Di seluruh 10 kelompok, frekuensi terealisasi berada di kisaran yang sama dengan angka yang dinyatakan. Itulah fungsi tabel kalibrasi: menunjukkan kesenjangan antara perkiraan dan hasil aktual, kelompok demi kelompok, alih-alih menyembunyikannya dalam satu rata-rata.

Apakah pasar mengungguli lemparan koin?

Kini kita melihat skornya. Konstruksinya sama: beberapa nama perusahaan yang dikenal luas, dengan Brier score masing-masing ditempatkan di samping baseline datar 50% yang dihitung dari kontrak yang persis sama.

QueryBrier score probabilitas yang dinyatakan pasar sendiri, berdasarkan underlying
SQL tepat di balik setiap angka
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 score 0.1122 pada 28.54 thousand kontrak yang telah dinilai, dibandingkan dengan 0.25 milik baseline datar pada kumpulan kontrak yang identik. Di antara 6 nama tersebut, yang terlemah, yaitu SPY, masih mencatat 0.1375. Options bukanlah sesuatu yang ajaib dalam hal ini. Kontrak yang jauh out of the money memiliki delta mendekati 0,02 dan sebagian besar berakhir tanpa nilai. Ini merupakan prakiraan yang mudah untuk benar, dan tingkat kemudahan tersebut sudah tercermin dalam angka itu. Inilah alasan utama Brier score yang dikutip sendirian hampir tidak memberi informasi.

Peramal yang sama menghasilkan skor berbeda pada pertanyaan yang berbeda

Pisahkan metode yang identik berdasarkan seberapa jauh waktu penyelesaian pertanyaan, lalu lihat bagaimana skor berubah.

QueryBrier score pasar berdasarkan horizon expiry, SPY
SQL tepat di balik setiap angka
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 pasar mencatat skor 0.1084 pada kontrak dengan sisa waktu 1 to 7 days dan 0.1218 pada kontrak dengan sisa waktu 121 to 250 days. Peramal dan metode yang digunakan sama, tetapi kelompok pertanyaannya berbeda. Baseline datar sebesar 50% berada di 0.25 pada baris pertama dan 0.25 pada baris terakhir. Karena itu, baseline tersebut menjadi satu-satunya acuan tetap di semua horizon. Perbandingan antara dua peramal harus menggunakan pertanyaan yang sama dalam periode yang sama. Jika tidak, yang dibandingkan adalah tingkat kesulitan pertanyaan, bukan kemampuan peramal.

Mengapa proper scoring rules penting

Mean absolute error, yaitu rata-rata selisih absolut antara probabilitas yang Anda berikan dan hasil aktual, terdengar seperti alternatif yang masuk akal, tetapi memberikan penilaian yang buruk. Misalkan Anda benar-benar meyakini suatu peristiwa memiliki probabilitas 70%. Jika Anda menyatakan 70%, expected absolute error Anda adalah 0.7 x 0.3 + 0.3 x 0.7 = 0.42. Jika Anda menyatakan 100%, nilainya turun menjadi 0.7 x 0 + 0.3 x 1 = 0.30. Dalam absolute error, angka yang jujur justru merugikan Anda. Metrik yang memberi imbalan karena melebih-lebihkan keyakinan tidak mengukur kualitas forecasting.

Brier score tidak memiliki celah tersebut. Jika Anda meyakini probabilitas 70% dan menyatakan 70%, expected score Anda adalah 0.7 x 0.09 + 0.3 x 0.49 = 0.21. Jika Anda menyatakan 100%, nilainya naik menjadi 0.30. Jika Anda menyatakan 60%, nilainya naik menjadi 0.22. Nilai minimum tepat berada pada angka yang Anda yakini. Aturan dengan sifat ini disebut proper. Inilah alasan Brier menjadi standar dalam forecasting tournament.

Log score adalah proper rule umum lainnya. Caranya, ambil natural log dari probabilitas yang Anda berikan untuk hasil yang benar-benar terjadi, lalu ubah tandanya. Menyatakan 1% untuk sesuatu yang terjadi menghasilkan penalti 4.6, sedangkan menyatakan 0% menghasilkan penalti tak terhingga. Pada sepuluh forecast fiktif tersebut, nilainya mencapai 0.483, dibandingkan 0.693 untuk baseline tetap. Brier berada di antara 0 dan 1, sehingga lebih mudah dibaca sebagai scorecard. Log score tidak memiliki batas atas, sehingga sesuai untuk penilaian ketika risiko terutama berada di bagian ekor distribusi.

Maknanya bagi kontrak peristiwa

Kontrak peristiwa yang membayar $1 jika sesuatu terjadi dan $0 jika tidak terjadi diperdagangkan pada harga yang sudah menyatakan probabilitas. Harga enam puluh dua sen berarti forecast 62%, sebelum spread dan biaya dikeluarkan. Panduan kami tentang harga kontrak peristiwa sebagai probabilitas membahas konversi tersebut, sedangkan cara kontrak peristiwa diselesaikan menjelaskan arti “hal itu terjadi” menurut ketentuan kontrak.

Harga tersebut merupakan forecast dengan rekam jejak publik dan tanggal settlement. Karena itu, harga tersebut menjadi benchmark yang harus dilampaui oleh catatan forecast Anda sendiri. Nilai forecast Anda pada pertanyaan yang sama dan dalam periode yang sama. Trader dengan Brier score yang lebih tinggi daripada Brier score harga tidak memiliki edge terukur pada kumpulan pertanyaan tersebut, sebaik apa pun narasi yang menyertai trade. Pengujian yang sama berlaku untuk odds olahraga setelah Anda menghapus vig dari odds taruhan, serta untuk pasar suku bunga, ketika odds suku bunga Fed memberi Anda probabilitas bertanggal untuk pertanyaan dengan hari resolusi yang sudah diketahui.

Bagaimana panel ini menilai pasar

Delta berasal dari catatan Greeks options harian untuk setiap kontrak. Hanya kontrak dengan volume pada hari observasi dan hasil perhitungan volatilitas yang konvergen yang disertakan. Hasilnya ditentukan dari harga penutupan underlying pada tanggal kedaluwarsa kontrak: call dihitung in the money jika harga penutupan tersebut berada di atas strike, sedangkan put dihitung in the money jika berada di bawah strike. Settlement aktual dilakukan melalui keputusan exercise setelah penutupan. Karena itu, kontrak yang harganya terpaku dalam selisih beberapa sen dari strike dapat diselesaikan secara berbeda dari penyederhanaan ini. Semua kontrak dalam panel ini telah kedaluwarsa. Bucket dengan horizon lebih panjang secara alami mengambil tanggal observasi yang lebih awal dalam periode tersebut. Stock split yang terjadi antara tanggal observasi dan kedaluwarsa akan membuat strike dan harga settlement berada pada skala yang berbeda. Ini menjadi alasan tambahan mengapa setiap bucket mencantumkan jumlah sampelnya.

Delta mendekati probabilitas risk-neutral, bukan probabilitas dunia nyata. Keduanya berbeda karena risk premium yang tertanam dalam harga options. Tabel kalibrasi mengukur perbedaan tersebut, alih-alih menganggapnya tidak ada.

FAQ

Apakah Brier score yang lebih rendah lebih baik?

Ya. Brier score mengukur kesalahan, sehingga 0 menunjukkan catatan sempurna dan 1 adalah hasil terburuk yang mungkin, yaitu ketika seseorang menyatakan probabilitas 100% untuk semua hal yang ternyata tidak terjadi. Nilai di bawah 0.25 lebih baik daripada skor yang diperoleh jika menjawab 50% untuk setiap pertanyaan.

Berapa Brier score yang baik?

Tidak ada angka baik yang berlaku universal karena skor bergantung pada tingkat kesulitan pertanyaannya. Prakira cuaca dengan skor 0.10 untuk hujan esok hari dan prakirawan politik dengan skor 0.18 untuk pemilu ketat tidak dapat dibandingkan secara langsung. Bandingkan skor hanya antaraprakirawan yang menjawab pertanyaan yang sama dalam periode yang sama.

Apa arti Brier score 0.25?

Itu adalah skor prakirawan yang menyatakan 50% untuk semua hal. Setiap kesalahan kuadrat kemudian bernilai 0.25, apa pun hasil akhirnya. Nilai ini merupakan benchmark standar tanpa informasi untuk serangkaian pertanyaan ya atau tidak. Namun, kumpulan pertanyaan yang distribusinya tidak seimbang memerlukan base rate sebagai benchmark.

Apa perbedaan Brier score dan log score?

Keduanya merupakan proper scoring rules. Artinya, masing-masing mencapai nilai minimum ketika probabilitas yang dinyatakan sama dengan probabilitas yang benar-benar diyakini. Brier score menguadratkan kesalahan dan nilainya tetap berada antara 0 dan 1. Log score memberikan penalti yang jauh lebih besar untuk kesalahan dengan keyakinan tinggi. Pernyataan 0% untuk sesuatu yang benar-benar terjadi menghasilkan biaya tak terhingga.

Apakah delta option dapat dibaca sebagai probabilitas?

Nilai absolut delta mendekati probabilitas tersirat pasar bahwa option berakhir in the money. Namun, ini merupakan probabilitas risk-neutral, bukan probabilitas dunia nyata. Panel di atas menilainya sebagai prakiraan: delta yang dinyatakan ditampilkan pada satu sumbu, sedangkan proporsi kontrak yang benar-benar berakhir in the money ditampilkan pada sumbu lainnya.


Setiap panel di sini dilengkapi SQL yang persis sama di bawahnya, sehingga proses penilaiannya dapat diaudit baris demi baris. Untuk menilai catatan prakiraan Anda sendiri terhadap prakiraan pasar atas pertanyaan yang sama, mintalah angkanya dalam bahasa biasa melalui terminal Strasmore.

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