- Brier Score | Medir la calibración de probabilidadesの概要を押さえ、評価対象と読み取り方を整理します。
- Python 3.13 のコード例で算出・可視化し、手順と実務での確認ポイントを確認します。
- 図表や補助指標を組み合わせ、モデル比較や閾値調整に活かすヒントをまとめます。
1. Definición #
En una clasificación binaria el Brier Score se expresa como \mathrm{Brier} = \frac{1}{n} \sum_{i=1}^{n} (p_i - y_i)^2, donde \(p_i\) es la probabilidad predicha de la clase positiva y \(y_i\) es la etiqueta real (0 o 1). En problemas multiclase se calcula el error cuadrático por clase y se promedia.
2. Implementación y visualización en Python 3.13 #
python --version # p. ej. Python 3.13.0
pip install scikit-learn matplotlib
El siguiente script entrena una regresión logística sobre el conjunto Breast Cancer, imprime el Brier Score y dibuja un diagrama de fiabilidad. La figura se guarda en static/images/eval/classification/brier-score/reliability_curve.png, lista para regenerarse con generate_eval_assets.py.
import matplotlib.pyplot as plt
from pathlib import Path
from sklearn.calibration import CalibrationDisplay
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import brier_score_loss
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, stratify=y, random_state=42
)
pipeline = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=2000, solver="lbfgs"),
)
pipeline.fit(X_train, y_train)
proba = pipeline.predict_proba(X_test)[:, 1]
score = brier_score_loss(y_test, proba)
print(f"Brier Score: {score:.3f}")
fig, ax = plt.subplots(figsize=(5, 5))
CalibrationDisplay.from_predictions(y_test, proba, n_bins=10, ax=ax)
ax.set_title("Diagrama de fiabilidad (Breast Cancer Dataset)")
fig.tight_layout()
output_dir = Path("static/images/eval/classification/brier-score")
output_dir.mkdir(parents=True, exist_ok=True)
fig.savefig(output_dir / "reliability_curve.png", dpi=150)
plt.close(fig)

Cuanto más se aleja de la diagonal, más sobre- o infra-confianza muestran las probabilidades.
3. Interpretación del puntaje #
- Probabilidades perfectamente calibradas producen 0.
- Un modelo que siempre devuelve 0.5 en un conjunto balanceado se queda en 0.25.
- Cuanto más pequeño sea el valor, mejor: el error cuadrático penaliza especialmente las probabilidades alejadas del resultado real.
4. Diagnóstico con diagramas de fiabilidad #
El diagrama de fiabilidad agrupa las predicciones por bins, coloca la probabilidad media predicha en el eje x y la tasa real de positivos en el eje y.
- Puntos por debajo de la diagonal → el modelo es sobreconfidente (probabilidades demasiado altas).
- Puntos por encima de la diagonal → el modelo es subconfidente.
- Tras aplicar técnicas de calibración (Platt scaling, isotonic regression, etc.), vuelva a calcular el Brier Score y el gráfico para confirmar la mejora.
Resumen #
- El Brier Score mide el error cuadrático medio de las probabilidades; valores menores indican mejor calibración.
- En Python 3.13, rier_score_loss más el diagrama de fiabilidad proporcionan una comprobación rápida.
- Combínelo con ROC-AUC y métricas Precision/Recall para evaluar tanto la capacidad de ranking como la calidad de la probabilidad.