Métricas de Evaluación de Modelos de Clasificación Binaria

Inteligencia Artificial Tiempo de lectura: 5 min.

Al evaluar modelos de clasificación binaria en Python utilizando scikit-learn, existen varias métricas clave que se utilizan comúnmente para medir el rendimiento del modelo. En este artículo, exploraremos estas métricas y cómo elegir el mejor modelo según las necesidades específicas de tu problema.

1. Exactitud (Accuracy)

La exactitud mide la proporción de instancias clasificadas correctamente sobre el total de instancias. Aunque es una métrica sencilla, puede ser engañosa si las clases están desbalanceadas.

2. Precisión (Precision)

La precisión mide la proporción de predicciones positivas verdaderas entre todas las predicciones positivas. Es útil cuando el costo de falsos positivos es alto.

3. Sensibilidad (Recall o Tasa de Verdaderos Positivos)

La sensibilidad mide la proporción de predicciones positivas verdaderas entre todas las instancias positivas reales. Es importante cuando el costo de falsos negativos es alto.

4. Puntuación F1 (F1 Score)

La puntuación F1 es la media armónica de la precisión y la sensibilidad. Equilibra el compromiso entre precisión y sensibilidad y es útil cuando necesitas una sola métrica para resumir el rendimiento del modelo.

5. Matriz de Confusión (Confusion Matrix)

La matriz de confusión proporciona un desglose detallado de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos.

6. Curva ROC y AUC

La Curva Característica de Operación del Receptor (ROC) es una gráfica de la tasa de verdaderos positivos frente a la tasa de falsos positivos en diferentes ajustes de umbral. El Área Bajo la Curva (AUC) proporciona un único valor escalar que resume la capacidad del modelo para distinguir entre clases.

7. Curva Precisión-Recall y AUC

La curva Precisión-Recall es útil cuando se trata con conjuntos de datos desbalanceados. Representa la precisión frente a la sensibilidad en diferentes ajustes de umbral. El AUC bajo esta curva también se puede calcular.

8. Pérdida Logarítmica (Log Loss)

La pérdida logarítmica (o pérdida de entropía cruzada) mide la incertidumbre de tus predicciones. Una pérdida logarítmica más baja indica un mejor rendimiento del modelo.

¿Cómo Elegir el Mejor Modelo Usando las Métricas?

Elegir el mejor modelo cuando tienes varias métricas de evaluación implica comprender los compromisos entre diferentes métricas y alinearlas con los requisitos específicos de tu problema. Aquí tienes algunos pasos para guiar el proceso:

  • Entiende tu dominio de problema: Si tu conjunto de datos tiene un desbalance significativo de clases, métricas como la exactitud pueden ser engañosas. En tales casos, la precisión, sensibilidad, puntuación F1 y AUC-PR (Área Bajo la Curva Precisión-Recall) son más informativas.
  • Define tus objetivos: Determina la importancia relativa de falsos positivos y falsos negativos. Por ejemplo, en diagnóstico médico, los falsos negativos (no detectar una enfermedad) pueden ser más críticos que los falsos positivos (falsa alarma).
  • Evalúa varias métricas: Examina la matriz de confusión para obtener un desglose detallado de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos. Grafica las curvas ROC-AUC y Precisión-Recall para visualizar los compromisos entre la tasa de verdaderos positivos y falsos positivos (ROC) o precisión y sensibilidad (PR). Si necesitas probabilidades bien calibradas, la pérdida logarítmica puede ser una buena métrica.
  • Considera el impacto empresarial: Cuantifica los costos y beneficios asociados con diferentes tipos de errores. Por ejemplo, en detección de fraude, el costo de un falso positivo puede ser diferente del costo de un falso negativo. Considera cómo el rendimiento del modelo afectará a los usuarios finales.
  • Usa métricas específicas del dominio: A veces, métricas específicas del dominio son más relevantes. Por ejemplo, en recuperación de información, métricas como la Media de la Precisión Promedio (MAP) pueden ser más apropiadas.
  • Validación cruzada: Utiliza la validación cruzada para asegurarte de que el rendimiento del modelo sea consistente en diferentes subconjuntos de los datos. Esto ayuda a identificar modelos que generalizan bien.
  • Complejidad del modelo: Considera el compromiso entre la complejidad del modelo y el rendimiento. Modelos más simples a menudo son más fáciles de interpretar y desplegar, pero pueden no rendir tan bien como modelos más complejos.
  • Métodos de ensamblaje: Si ningún modelo sobresale claramente, considera combinar modelos utilizando técnicas de ensamblaje como bagging, boosting o stacking para combinar las fortalezas de múltiples modelos.

Ejemplo de Proceso de Toma de Decisiones

Aquí tienes un enfoque estructurado para elegir el mejor modelo:

  • Evalúa métricas básicas: Calcula la exactitud, precisión, sensibilidad, puntuación F1, ROC-AUC y pérdida logarítmica para cada modelo. Grafica las curvas ROC y Precisión-Recall.
  • Analiza la matriz de confusión: Examina la matriz de confusión para entender los tipos de errores que cada modelo está cometiendo.
  • Considera el impacto empresarial: Pondera los costos y beneficios de diferentes tipos de errores. Si los falsos negativos son más críticos, prioriza la sensibilidad. Si los falsos positivos son más críticos, prioriza la precisión.
  • Validación cruzada: Realiza validación cruzada para asegurarte de que el rendimiento del modelo sea consistente en diferentes subconjuntos de los datos.
  • Complejidad del modelo: Evalúa el compromiso entre la complejidad del modelo y el rendimiento. Modelos más simples pueden ser preferibles si su rendimiento es razonablemente bueno.
  • Métodos de ensamblaje: Si ningún modelo es claramente superior, considera combinar modelos utilizando técnicas de ensamblaje.

Ejemplo de Cálculo de Métricas

A continuación, se presenta un ejemplo de cómo calcular la mayoría de las métricas estudiadas comparando dos modelos: Random Forest y Gradient Boosting.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, log_loss
import numpy as np

# Generar conjunto de datos sintético
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# Dividir en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Definir modelos
models = {
    "Random Forest": RandomForestClassifier(random_state=42),
    "Gradient Boosting": GradientBoostingClassifier(random_state=42)
}

# Evaluar modelos
results = {}
for name, model in models.items():
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    y_probs = model.predict_proba(X_test)[:, 1]
    
    results[name] = {
        "Accuracy": accuracy_score(y_test, y_pred),
        "Precision": precision_score(y_test, y_pred),
        "Recall": recall_score(y_test, y_pred),
        "F1 Score": f1_score(y_test, y_pred),
        "ROC AUC": roc_auc_score(y_test, y_probs),
        "Log Loss": log_loss(y_test, y_probs)
    }

# Imprimir resultados
for name, metrics in results.items():
    print(f"Modelo: {name}")
    for metric, value in metrics.items():
        print(f"  {metric}: {value:.4f}")
    print()

# Validación cruzada
for name, model in models.items():
    scores = cross_val_score(model, X, y, cv=5, scoring='roc_auc')
    print(f"Modelo: {name}, ROC AUC validación cruzada: {np.mean(scores):.4f} ± {np.std(scores):.4f}")

Resultados y Análisis de las Métricas del Ejemplo

Random Forest

Métrica Valor
Accuracy 0.9000
Precision 0.9485
Recall 0.8598
F1 Score 0.9020
ROC AUC 0.9379
Log Loss 0.3204
ROC AUC (Validación Cruzada) 0.9510 ± 0.0154

Gradient Boosting

Métrica Valor
Accuracy 0.9150
Precision 0.9688
Recall 0.8692
F1 Score 0.9163
ROC AUC 0.9348
Log Loss 0.3167
ROC AUC (Validación Cruzada) 0.9499 ± 0.0181

Comparación y Elección del Modelo

  1. Exactitud (Accuracy): Gradient Boosting tiene una exactitud ligeramente mayor (0.9150) en comparación con Random Forest (0.9000). Esto indica que Gradient Boosting clasifica correctamente un mayor porcentaje de instancias en el conjunto de prueba.
  2. Precisión (Precision): Gradient Boosting tiene una precisión más alta (0.9688) en comparación con Random Forest (0.9485). Esto significa que Gradient Boosting tiene menos falsos positivos, lo cual es importante si el costo de falsos positivos es alto.
  3. Sensibilidad (Recall): Gradient Boosting también tiene una sensibilidad ligeramente mayor (0.8692) en comparación con Random Forest (0.8598). Esto indica que Gradient Boosting detecta un mayor porcentaje de instancias positivas reales.
  4. Puntuación F1 (F1 Score): Gradient Boosting tiene una puntuación F1 más alta (0.9163) en comparación con Random Forest (0.9020). La puntuación F1 es una métrica que equilibra la precisión y la sensibilidad, por lo que Gradient Boosting tiene un mejor equilibrio entre estos dos aspectos.
  5. ROC AUC: Gradient Boosting tiene un ROC AUC ligeramente menor (0.9348) en comparación con Random Forest (0.9379). Sin embargo, la diferencia es mínima y puede considerarse estadísticamente insignificante.
  6. Pérdida Logarítmica (Log Loss): Gradient Boosting tiene una pérdida logarítmica más baja (0.3167) en comparación con Random Forest (0.3204). Esto indica que Gradient Boosting tiene predicciones de probabilidad más precisas.
  7. Validación Cruzada (ROC AUC): Gradient Boosting tiene un ROC AUC de validación cruzada ligeramente menor (0.9499 ± 0.0181) en comparación con Random Forest (0.9510 ± 0.0154). Sin embargo, la diferencia es mínima y la variabilidad en Gradient Boosting es ligeramente mayor.

Elección

Dado que Gradient Boosting tiene una mejor precisión, sensibilidad, puntuación F1 y pérdida logarítmica, y la diferencia en el ROC AUC es mínima, recomendaría elegir Gradient Boosting. Este modelo muestra un mejor rendimiento en términos de precisión y sensibilidad, lo cual es crucial si el costo de falsos positivos y falsos negativos es alto. Además, la validación cruzada también muestra que Gradient Boosting tiene un rendimiento consistente, aunque con una variabilidad ligeramente mayor.

En resumen, Gradient Boosting es el modelo más adecuado en este caso debido a su mejor rendimiento en las métricas clave y su capacidad para manejar mejor los errores de falsos positivos y falsos negativos.

Conclusión

Elegir el mejor modelo implica una combinación de evaluación cuantitativa utilizando métricas y evaluación cualitativa basada en el contexto del problema. Al considerar varias métricas y entender sus implicaciones, puedes tomar una decisión con mayor acertividad.

¿Listo para transformar tu empresa con inteligencia artificial?... El futuro pertenece a las empresas que toman decisiones basadas en datos. El uso de IA en tu organización representa una oportunidad real de reducir costos, aumentar ingresos y superar a la competencia.. Hablemos, el momento estratégico es ahora.