איך לחשב ציון Brier להערכת דיוק של תחזיות
ציון Brier מודד את איכות התחזיות ההסתברותיות באמצעות חישוב ממוצע ריבועי השגיאה מול התוצאות בפועל. ציון נמוך מעיד על דיוק גבוה, כאשר 0.25 הוא הציון שמתקבל בניחוש אקראי.
ציון Brier: הערכת דיוק של תחזיות הסתברותיות
ציון Brier מדרג תחזית הסתברותית אל מול התוצאה שהתרחשה בפועל. כדי לחשב אותו, יש לקחת את ההסתברות שצוינה, להחסיר ממנה את התוצאה (1 אם האירוע התרחש, 0 אם לא), להעלות את ההפרש בריבוע, ולאחר מכן לחשב את ממוצע הריבועים עבור כל התחזיות שבוצעו.
ציון נמוך יותר מעיד על ביצועים טובים יותר: 0 הוא ציון מושלם, בעוד ש-0.25 הוא הציון שמתקבל כאשר חוזים "50%" לכל אירוע באשר הוא.
מהו ציון Brier?
תחזית היא טענה בנוגע להסתברות, והסתברות בודדת לעולם אינה יכולה להיות נכונה או שגויה כשלעצמה. הגדרת אירוע כבעל סבירות של שלושים אחוזים והתרחשותו בפועל אינה מעידה בהכרח על טעות. גלן בריר (Glenn Brier), שכתב עבור חזאים בשנת 1950, פתר זאת על ידי סירוב לדרג תחזית בודדת. הציון מדרג את יומן התחזיות כולו בבת אחת.
להלן יומן מומצא של עשר תחזיות. אף אחד מהמספרים הללו אינו מגיע מהשוק; הם הומצאו כדי להדגים את החישוב האריתמטי.
- הסתברות של 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 של 0.165. זהו החישוב כולו, והוא רץ ב-python3 המותקן כברירת מחדל בכל מכשיר Mac או Linux. אין צורך בהתקנות או בספריות חיצוניות.
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))prints0.165 0.25
מדוע 0.25 הוא המספר שצריך לנצח
נניח הסתברות של חמישים אחוז לכל דבר, וכל טעות בריבוע היא 0.25, ללא קשר לתוצאה. אותו 0.25 קבוע הוא מדד הייחוס ללא-מידע עבור כל קבוצת שאלות של כן או לא, וציון המיומנות הופך זאת לנתון אחד: אחד פחות הציון שלך חלקי זה של מדד הייחוס. הלוג המומצא ברמה של 0.165 מניב ציון מיומנות של 0.34.
סייג אחד פוסל רישום ציונים גרוע רב. אם האירועים שאתה מדרג מתרחשים רק עשרה אחוזים מהזמן, הצהרה על עשרה אחוזים קבועים בכל פעם תניב ציון של 0.09, מבלי לדעת דבר על השאלות הפרטניות. ציון הנמוך מ-0.25 אינו מהווה עדות למיומנות בקבוצת שאלות לא מאוזנת. מדד הייחוס ההוגן הוא שיעור הבסיס של השאלות עליהן ענית בפועל.
כיול וביטחון מדורגים יחד
כיול משמעו שמתוך כל מה שהערכת בהסתברות של שבעים אחוזים, קרוב לשבעים אחוזים ממנו אכן מתרחש. ביטחון, שסטטיסטיקאים מכנים רזולוציה, הוא המידה שבה אתה מוכן להתרחק משיעור הבסיס כאשר יש בידך מידע. חוזה שאומר חמישים אחוזים לכל שאלה הוא מכויל באופן מושלם אך חסר תועלת לחלוטין, וציון Brier מתמחר את שתי התכונות הללו בבת אחת: חוסר כיול מעלה את הציון, וביטחון מוצדק מוריד אותו.
חלוקה לקבוצות (Bucketing) של יומן התחזיות המדומיין לפי ההסתברות המוצהרת מראה כיצד נראית בדיקת כיול. ב-Python מדובר בשורה אחת לכל קבוצה, hits = [o for p, o in rows if p >= 0.8], ולאחר מכן הממוצע של hits.
- 10% עד 30% מוצהר, ממוצע 20%: אחד מתוך שלושה התרחש, 33%.
- 40% עד 50% מוצהר, ממוצע 45%: אפס מתוך שניים התרחשו, 0%.
- 60% עד 70% מוצהר, ממוצע 65%: אחד מתוך שניים התרחש, 50%.
- 80% עד 95% מוצהר, ממוצע 88%: שלושה מתוך שלושה התרחשו, 100%.
עשר תחזיות אינן מספיקות בשום אופן כדי להסיק דבר מהקבוצות הללו. כיול דורש מאות שאלות שהוכרעו עבור כל קבוצה. שאר עמוד זה משתמש ביומן תחזיות הכולל מיליוני שאלות כאלו.
דירוג התחזית של השוק עצמו
כל אופציה הנסחרת בבורסה נושאת מספר המתנהג כהסתברות מוצהרת. ה-Delta מודד בכמה ישתנה מחיר האופציה עבור תנועה של דולר אחד בנכס הבסיס, ועבור חוזה שמסתיים בתוך הכסף (בעל ערך במועד הפקיעה) או מחוץ לכסף (חסר ערך), הערך המוחלט של ה-Delta קרוב להסתברות הגלומה בשוק לכך שהאופציה תסיים בתוך הכסף. נתון זה נגזר מאותו משטח תנודתיות שקובע את ה-תנודתיות גלומה של AAPL. כל חוזה פוקע, ולכן כל אחת מהתחזיות הללו מקבלת ציון.
הטבלה מטה בוחנת את כל אופציות ה-SPY שנצפו בערך חודש לפני הפקיעה, מינואר 2025 ועד מאי 2026, מחלקת אותן לקבוצות לפי ה-Delta המוצהר, וסופרת באיזו תדירות החוזה סיים בתוך הכסף.
ה-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יש להשוות בין שתי הסדרות. בקבוצה הנמוכה ביותר, השוק הצהיר על ממוצע של 5.2%, וחוזים אלו סיימו בתוך הכסף ב-3.7% מהמקרים. בקבוצה הגבוהה ביותר, נתון מוצהר של 94% לווה ב-96.5% סיומות בתוך הכסף. לאורך כל 10 הקבוצות, התדירות הממומשת נמצאת בטווח דומה לזו המוצהרת. זוהי כל מהותה של טבלת כיול: היא חושפת את הפער בין מה שהחזאי אומר לבין מה שקורה בפועל, קבוצה אחר קבוצה, במקום להסתיר זאת בתוך ממוצע יחיד.
האם השוק מנצח את הטלת המטבע?
כעת לתוצאות עצמן. באותו מבנה, מספר שמות מוכרים, כאשר ה-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_brierNVDA מציגה תוצאות של 0.1122 על פני 28.54 thousand חוזים מדורגים, לעומת 0.25 של קו הבסיס השטוח על אותה קבוצה זהה. השם החלש ביותר מבין ה-6, הלא הוא SPY, עדיין מגיע ל-0.1375. אופציות אינן קסם בהקשר זה. חוזים מסוג Deep out of the money נושאים דלתא הקרובה ל-0.02 וברובם פוקעים חסרי ערך; זוהי תחזית קלה לביצוע, והקלות הזו מגולמת במספר. זו הסיבה העיקרית לכך ש-Brier score המצוטט בפני עצמו אינו מלמד כמעט דבר.
אותו חוזה מציג ציונים שונים בשאלות שונות
פצלו את אותה שיטה לפי טווח הזמן שנותר עד לפתרון השאלה, ותראו כיצד הציון משתנה בהתאם.
ה-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ה-delta של השוק קיבל ציון של 0.1084 בחוזים עם 1 to 7 days עד לפקיעה, וציון של 0.1218 בחוזים עם 121 to 250 days עד לפקיעה. אותו חוזה, אותה שיטה, שתי קבוצות שונות של שאלות. קו הבסיס השטוח של 50% עומד על 0.25 בשורה הראשונה ועל 0.25 בשורה האחרונה, מה שהופך אותו לנקודת הייחוס הקבועה היחידה לאורך כל טווח זמן. כל השוואה בין שני חוזים חייבת להתבצע על אותן שאלות ובאותו חלון זמן, אחרת מדובר בהשוואת רמת הקושי של השאלות ולא של המיומנות.
מדוע כללי ניקוד תקינים הם קריטיים
טעות מוחלטת ממוצעת (Mean absolute error), המהווה את הממוצע של המרחק הפשוט בין ההסתברות שציינת לבין התוצאה בפועל, נשמעת כחלופה סבירה אך היא מעניקה ציון גרוע. נניח שאתה מאמין באמת ובתמים שהסתברות של אירוע היא שבעים אחוזים. אם תצהיר על שבעים אחוזים, הטעות המוחלטת הצפויה שלך תהיה 0.7 כפול 0.3 ועוד 0.3 כפול 0.7, כלומר 0.42. אם תצהיר על מאה אחוזים במקום זאת, היא תרד ל-0.7 כפול 0 ועוד 0.3 כפול 1, כלומר 0.30. תחת מדד של טעות מוחלטת, המספר הכנה עולה לך ביוקר, ומדד שמתגמל אותך על הפרזה בביטחון אינו מודד חיזוי.
לציון Brier אין פרצה כזו. אם אתה מאמין בשבעים אחוזים ומצהיר על שבעים אחוזים, הציון הצפוי שלך הוא 0.7 כפול 0.09 ועוד 0.3 כפול 0.49, כלומר 0.21. אם תצהיר על מאה אחוזים, הציון יעלה ל-0.30. אם תצהיר על שישים אחוזים, הוא יעלה ל-0.22. נקודת המינימום נמצאת בדיוק על המספר שבו אתה מאמין. כלל בעל תכונה זו נקרא "תקין" (proper), וזו הסיבה ש-Brier הפך לסטנדרט בטורנירי חיזוי.
ציון לוגריתמי (log score) הוא הכלל התקין הנפוץ האחר: לוקחים את הלוגריתם הטבעי של ההסתברות שהקצית לתוצאה שהתרחשה, ואז הופכים את הסימן. הצהרה על אחוז אחד לגבי אירוע שקרה עולה 4.6, והצהרה על אפס אחוזים עולה אינסוף. בחישוב על עשרה תחזיות מומצאות, הציון עומד על 0.483 לעומת 0.693 עבור קו בסיס שטוח. ציון Brier נשאר בין 0 ל-1, מה שנקרא באופן טבעי יותר ככרטיס ניקוד. הציון הלוגריתמי אינו חסום, מה שמתאים לדירוג שבו לזנבות ההתפלגות יש סיכון משמעותי.
מה המשמעות עבור חוזי אירוע (event contracts)
חוזה אירוע שמשלם דולר אחד אם אירוע מסוים מתרחש ואפס דולרים אם לא, נסחר במחיר המגלם כבר את ההסתברות להתרחשותו. מחיר של שישים ושניים סנט מהווה תחזית של 62%, עוד לפני ניכוי ה-spread והעמלות. המדריך שלנו בנושא מחירי חוזי אירוע כהסתברויות מסביר את ההמרה הזו, והמדריך בנושא כיצד חוזי אירוע נפרעים מפרט מה המשמעות של "האירוע התרחש" על פי הגדרות החוזה.
מחיר זה הוא תחזית בעלת תיעוד ציבורי ותאריך פקיעה, מה שהופך אותו למדד הייחוס שעל יומן המסחר האישי שלך לעקוף. דרג את התחזיות שלך על אותן שאלות ובאותו טווח זמן. סוחר שציון ה-Brier שלו גבוה מזה של מחיר השוק, אינו מחזיק ביתרון מדיד באותה קבוצת שאלות, ללא קשר לאיכות הנרטיב הנלווה לעסקה. אותו מבחן תקף גם ליחסי הימורי ספורט לאחר שמנקים את ה-vig מיחסי ההימורים, וכן לשוקי הריבית, שבהם הסתברויות ריבית ה-Fed מספקות הסתברות מוגדרת בזמן לשאלה בעלת יום הכרעה ידוע.
כיצד פאנלים אלו מדרגים את השוק
ה-Delta נגזרת מתיעוד ה-greeks היומי של האופציות עבור כל חוזה. נכללים רק חוזים שרשמו נפח מסחר ביום התצפית ושעבורם נמצא פתרון לתנודתיות (volatility solve). התוצאה נקראת משער הסגירה של נכס הבסיס ביום פקיעת החוזה: אופציית Call נחשבת in the money כאשר מחיר הסגירה גבוה ממחיר המימוש, ואופציית Put כאשר הוא נמוך ממנו. פירעון בפועל מתבצע לאחר החלטת מימוש שלאחר הסגירה, לכן חוזים שנסגרו בטווח של סנטים בודדים ממחיר המימוש עשויים להיפרע באופן שונה מהפשטה זו. כל חוזה בפאנלים אלו כבר פקע, ודליי הזמן הארוכים יותר נשענים בהכרח על תאריכי תצפית מוקדמים יותר בתוך הטווח. פיצול מניות (share split) המתרחש בין תאריך התצפית לבין הפקיעה עלול להציב את מחיר המימוש ואת מחיר הפירעון על סקאלות שונות; זו סיבה נוספת לכך שכל קבוצת נתונים (bucket) מציינת את גודל המדגם שלה.
ה-Delta מהווה קירוב להסתברות ניטרלית לסיכון (risk-neutral probability) ולא להסתברות ריאלית. השתיים נבדלות זו מזו בפרמיית הסיכון הגלומה במחירי האופציות, וטבלת כיול (calibration table) היא הכלי המודד הבדל זה במקום להניח את היעדרו.
שאלות נפוצות
האם ציון Brier נמוך יותר הוא טוב יותר?
כן. ציון Brier הוא מדד שגיאה, לכן 0 הוא שיא מושלם ו-1 הוא התוצאה הגרועה ביותר, המתקבלת מהצהרה על הסתברות של 100% לכל אירוע שלא התרחש. כל ציון הנמוך מ-0.25 עדיף על הציון שהיה מתקבל ממתן תשובה של 50% לכל שאלה.
מהו ציון Brier טוב?
אין מספר אוניברסלי שנחשב לטוב, שכן הציון תלוי ברמת הקושי של השאלות. לא ניתן לדרג זה מול זה חזאי מזג אוויר עם ציון 0.10 על תחזית גשם למחר וחזאי פוליטי עם ציון 0.18 על בחירות צמודות. השווה ציונים רק בין חזאים שענו על אותן שאלות באותו טווח זמן.
מה משמעות ציון Brier של 0.25?
זהו הציון של חזאי שאומר 50% לכל דבר, שכן כל סטייה בריבוע היא 0.25 ללא קשר לתוצאה. זהו מדד הייחוס הסטנדרטי ל"חוסר מידע" עבור קבוצת שאלות של כן או לא, אם כי קבוצת שאלות לא מאוזנת דורשת את שיעור הבסיס כמדד ייחוס במקומו.
במה שונה ציון Brier מציון log?
שניהם כללי ניקוד תקינים (proper scoring rules), כלומר כל אחד מהם ממוזער כאשר אתה מצהיר על ההסתברות שאתה באמת מאמין בה. Brier מעלה בריבוע את השגיאה ונשאר בטווח שבין 0 ל-1. ציון ה-log מעניש שגיאות בביטחון עצמי גבוה בצורה חמורה הרבה יותר, והצהרה על 0% למשהו שקורה בפועל עולה באינסוף.
האם ניתן לקרוא ל-delta של אופציה כהסתברות?
הערך המוחלט של ה-delta קרוב להסתברות הגלומה בשוק לכך שהאופציה תפקע בתוך הכסף (in the money), וזוהי הסתברות ניטרלית לסיכון ולא הסתברות ריאלית. הפאנלים שלעיל מדרגים זאת כתחזית: ה-delta המוצהרת על ציר אחד, ושיעור החוזים שבאמת פקעו בתוך הכסף על הציר השני.
כל פאנל כאן מגיע עם שאילתת ה-SQL המדויקת שמתחתיו, כך שהדירוג ניתן לביקורת שורה אחר שורה. כדי לדרג יומן תחזיות משלך מול זה של השוק על אותן שאלות, בקש את הנתונים בשפה פשוטה בטרמינל Strasmore.