Как посчитать Brier score в SQL
Содержание:
Зачем 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_baselineWITH 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 декомпозируется на калибровку и 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.
Связанные темы
- Как посчитать log loss в SQL
- Как посчитать confusion matrix в SQL
- Как посчитать AUC-ROC в SQL
- Как посчитать precision-recall в SQL
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 — для подбора гиперпараметров.