📉 MÓDULO 4: "Métricas que Importan: Más Allá de la Precisión"

Objetivo:

Entender que la precisión no lo es todo. Aprender a elegir, calcular e interpretar métricas apropiadas basadas en el problema—especialmente en contextos desbalanceados como la detección de fraude.


4.1 La Trampa de la Precisión

Imagina un conjunto de datos de fraude:

  • 99% transacciones legítimas
  • 1% transacciones fraudulentas

Un modelo que siempre predice "NO FRAUDE" tendrá 99% de precisión... ¡pero es inútil! Detecta CERO fraudes.


4.2 Matriz de Confusión: Tu Mejor Amiga

La matriz de confusión muestra:

  • Verdaderos Positivos (TP): Fraudes correctamente detectados.
  • Falsos Negativos (FN): Fraudulentas que el modelo etiquetó como legítimas (¡error grave!).
  • Falsos Positivos (FP): Legítimas marcadas como fraude (molestia al cliente).
  • Verdaderos Negativos (TN): Legítimas correctamente identificadas.
from sklearn.metrics import confusion_matrix
import seaborn as sns

y_pred = modelo.predict(X_test)
cm = confusion_matrix(y_test, y_pred)

sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
            xticklabels=['Legítimo', 'Fraude'],
            yticklabels=['Legítimo', 'Fraude'])
plt.title("Matriz de Confusión")
plt.ylabel("Real")
plt.xlabel("Predicho")
plt.show()

4.3 Precisión, Exhaustividad y Puntuación F1

➤ Precisión

De todas las transacciones que marqué como fraude, ¿cuántas eran realmente fraude?

Precisión = TP / (TP + FP)

✅ Importante cuando el costo de falsos positivos es alto (ej., bloquear una tarjeta legítima).


➤ Exhaustividad (Sensibilidad, Tasa de Verdaderos Positivos)

De todos los fraudes reales, ¿cuántos detecté?

Exhaustividad = TP / (TP + FN)

CRÍTICA en detección de fraude. Quieres minimizar FN (fraudes no detectados).


➤ Puntuación F1

Media armónica de precisión y exhaustividad. Útil cuando buscas equilibrio.

F1 = 2 * (Precisión * Exhaustividad) / (Precisión + Exhaustividad)
from sklearn.metrics import precision_score, recall_score, f1_score

print("Precisión:", precision_score(y_test, y_pred))
print("Exhaustividad:   ", recall_score(y_test, y_pred))
print("Puntuación F1: ", f1_score(y_test, y_pred))

4.4 AUC-ROC: El Estándar de Oro para Clasificación Binaria

La curva ROC muestra el equilibrio entre Tasa de Verdaderos Positivos (Exhaustividad) y Tasa de Falsos Positivos en varios umbrales de decisión.

AUC (Área Bajo la Curva) es un número entre 0 y 1:

  • 0.5 = modelo aleatorio
  • 1.0 = modelo perfecto
from sklearn.metrics import roc_auc_score, roc_curve

y_proba = modelo.predict_proba(X_test)[:, 1]  # probabilidad de clase positiva
auc = roc_auc_score(y_test, y_proba)
print("AUC-ROC:", auc)

# Graficar curva
fpr, tpr, thresholds = roc_curve(y_test, y_proba)
plt.plot(fpr, tpr, label=f'Curva ROC (AUC = {auc:.2f})')
plt.plot([0,1], [0,1], 'k--', label='Clasificador Aleatorio')
plt.xlabel('Tasa de Falsos Positivos')
plt.ylabel('Tasa de Verdaderos Positivos')
plt.title('Curva ROC')
plt.legend()
plt.grid()
plt.show()

Ventaja de AUC: Invariante al desbalance de clases. Perfecto para fraude.


4.5 Reporte Completo de Clasificación

Scikit-learn proporciona un resumen profesional:

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred,
      target_names=['Legítimo', 'Fraude']))

Salida típica:

              precision    recall  f1-score   support

   Legítimo       0.99      1.00      0.99     19800
     Fraude       0.85      0.50      0.63       200

    accuracy                           0.99     20000
   macro avg       0.92      0.75      0.81     20000
weighted avg       0.99      0.99      0.99     20000

📝 Ejercicio 4.1: Evaluación Profunda en un Conjunto de Datos Desbalanceado

Conjunto de datos: fraud_preprocessed.csv (preprocesado del módulo anterior)

Tareas:

  1. Entrenar un modelo de Regresión Logística.
  2. Calcular y mostrar la matriz de confusión.
  3. Calcular precisión, exhaustividad, puntuación F1 y AUC-ROC.
  4. Interpretar resultados: ¿Es bueno el modelo? ¿Qué métrica importa más aquí y por qué?
  5. Ajustar el umbral de decisión (por defecto 0.5) para mejorar la exhaustividad (aunque la precisión empeore). Usar predict_proba y un umbral de 0.3.
  6. Comparar métricas antes y después del ajuste de umbral.

💡 Notas Adicionales:

  • En fraude, exhaustividad > precisión. Prefieres revisar manualmente algunos casos legítimos (FP) a dejar pasar un fraude (FN).
  • AUC-ROC es tu mejor aliado para comparar modelos en conjuntos de datos desbalanceados.
  • Nunca uses la precisión como métrica principal en problemas desbalanceados.
  • Scikit-learn tiene precision_recall_curve para graficar el equilibrio precisión-exhaustividad (útil cuando los negativos son la mayoría).

Course Info

Course: AI-course1

Language: ES

Lesson: Module4