Balanced Accuracy

Eval

Balanced Accuracy | Evaluar modelos con datos desbalanceados

Creado: Última actualización: Tiempo de lectura: 2 min
まとめ
  • Balanced Accuracy | Evaluar modelos con datos desbalanceadosの概要を押さえ、評価対象と読み取り方を整理します。
  • Python 3.13 のコード例で算出・可視化し、手順と実務での確認ポイントを確認します。
  • 図表や補助指標を組み合わせ、モデル比較や閾値調整に活かすヒントをまとめます。

1. Definición #

La fórmula se define como el promedio entre la tasa de verdaderos positivos (TPR) y la tasa de verdaderos negativos (TNR): \mathrm{Balanced\ Accuracy} = \frac{1}{2}\left(\frac{TP}{TP + FN} + \frac{TN}{TN + FP}\right) En entornos multiclase se promedia el recall de cada clase siguiendo el mismo criterio.


2. Implementación en Python 3.13 #

python --version        # p. ej. Python 3.13.0
pip install scikit-learn matplotlib

Reutilizamos el clasificador Random Forest del artículo de Accuracy y calculamos ambas métricas. El diagrama de barras se almacena en static/images/eval/classification/accuracy/accuracy_vs_balanced.png, listo para regenerarse con generate_eval_assets.py cuando actualices el cuaderno.

import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, balanced_accuracy_score
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.25, random_state=42, stratify=y
)
pipeline = make_pipeline(
    StandardScaler(),
    RandomForestClassifier(random_state=42, n_estimators=300),
)
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)
acc = accuracy_score(y_test, y_pred)
bal_acc = balanced_accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc:.3f}, Balanced Accuracy: {bal_acc:.3f}")
Comparación Accuracy vs Balanced Accuracy

Balanced Accuracy mantiene el recall de cada clase en igualdad de condiciones.


3. Cuándo preferir Balanced Accuracy #

  • Datos muy desbalanceados – la Accuracy clásica recompensa a la clase mayoritaria, mientras que Balanced Accuracy expone si la clase minoritaria queda sin detectar.
  • Comparación de modelos – en benchmarks con clases raras, Balanced Accuracy evita conclusiones engañosas.
  • Ajuste de umbral – combínala con curvas precision–recall para saber si ambas clases se mantienen visibles en el punto de operación.

4. Métricas complementarias #

MétricaQué mideAdvertencia en datos desbalanceados
AccuracyPorcentaje total de aciertosPuede ignorar por completo a la clase minoritaria
Recall / SensitivityTasa de detección por claseSe reporta clase por clase
Balanced AccuracyMedia del recall por claseHace visibles las pérdidas en clases pequeñas
Macro F1Media armónica de precision y recall (por clase)Útil cuando también importa la precisión

Resumen #

  • Balanced Accuracy promedia el recall de cada clase y es ideal para conjuntos desbalanceados.
  • Con alanced_accuracy_score en Python 3.13 puedes obtenerla en una línea y compararla con la Accuracy tradicional.
  • Acompáñala de precision, recall y F1 para comunicar claramente la calidad de un modelo a todas las partes interesadas.