Как посчитать Brier score в SQL

Закрепи формулу brier score в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать brier score в Telegram

Зачем Brier score

Brier score — MSE между предсказанными вероятностями и binary labels. В отличие от log loss, не штрафует так сильно за уверенно неверные. Удобен для калибровки: чем ниже Brier, тем точнее модель предсказывает реальную частоту события.

Формула

brier = (1/N) × Σ (p_i − y_i)²
  • y_i ∈ {0, 1}
  • p_i ∈ [0, 1]

Range: [0, 1]. 0 — perfect (всегда p=y). Random binary — 0.25.

Brier score в SQL

SELECT
    AVG(POWER(predicted_proba - actual_label, 2)) AS brier_score,
    COUNT(*) AS n
FROM model_predictions
WHERE prediction_date >= CURRENT_DATE - INTERVAL '30 days';

Для multi-class — сумма quadratic loss по классам.

Brier skill score

Нормализация vs baseline (всегда p = base_rate):

BSS = 1 − brier_model / brier_baseline
WITH base AS (
    SELECT AVG(actual_label) AS p_base, COUNT(*) AS n FROM model_predictions
),
metrics AS (
    SELECT
        AVG(POWER(predicted_proba - actual_label, 2)) AS brier_model,
        AVG(POWER(p_base - actual_label, 2)) AS brier_baseline
    FROM model_predictions
    CROSS JOIN base
)
SELECT
    brier_model,
    brier_baseline,
    1 - brier_model / NULLIF(brier_baseline, 0) AS bss
FROM metrics;

BSS > 0 — модель лучше baseline. BSS < 0 — хуже.

Закрепи формулу brier score в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать brier score в Telegram

Калибровка

Brier декомпозируется на калибровку и resolution. Простой чек калибровки — reliability diagram через бакеты:

WITH bins AS (
    SELECT
        WIDTH_BUCKET(predicted_proba, 0, 1, 10) AS bin,
        AVG(predicted_proba) AS mean_pred,
        AVG(actual_label) AS actual_rate,
        COUNT(*) AS n
    FROM model_predictions
    GROUP BY WIDTH_BUCKET(predicted_proba, 0, 1, 10)
)
SELECT
    bin,
    n,
    mean_pred,
    actual_rate,
    actual_rate - mean_pred AS calibration_gap
FROM bins
ORDER BY bin;

Хорошая калибровка: mean_pred ≈ actual_rate в каждом бакете.

Частые ошибки

Ошибка 1. Считать Brier на predicted class. Brier требует probability. На 0/1 теряется смысл.

Ошибка 2. Сравнивать Brier на разных datasets. Brier зависит от base rate. На imbalanced data Brier естественно ниже — не значит, что модель лучше.

Ошибка 3. Brier vs log loss. Log loss штрафует «уверенно неверные» сильнее. Brier — мягче. Для жёсткой калибровки — log loss.

Ошибка 4. Не делить на N в decomposition. В классической формуле — среднее. Не SUM.

Ошибка 5. Использовать на multi-class без обобщения. Multi-class Brier = (1/N) × Σ_i Σ_k (p_ik − y_ik)². В SQL — через JOIN one-hot encoding.

Связанные темы

FAQ

Brier vs log loss?

Brier — MSE. Log loss — cross-entropy. Brier мягче на extreme misses.

Какой Brier хороший?

Зависит от base rate. BSS > 0.2 — заметное улучшение vs baseline.

Brier для regression?

Нет, только для probability classification. Для regression — MSE/RMSE.

Brier и калибровка — одно и то же?

Не совсем. Brier = калибровка + resolution + uncertainty. Декомпозиция (Murphy) показывает каждую часть.

Brier на validation или test?

Test. Validation — для подбора гиперпараметров.