Programa de Prácticas en Ingeniería de ML

Bloque 3: Evaluación de Modelos Orientada al Negocio

Una métrica agregada puede ser engañosa. En un problema con un 95 % de observaciones de la clase negativa, un modelo que predice siempre esa clase obtiene un 95 % de exactitud sin ninguna capacidad predictiva. Los errores de un modelo tienen costes distintos según su tipo, y la elección de la métrica y del umbral de decisión debe derivarse de esos costes.

Principio Metodológico: El Conjunto de Prueba no se Utiliza para Tomar Decisiones

Seleccionar un umbral, una métrica o una configuración observando el conjunto de prueba convierte ese conjunto en parte del entrenamiento, y la métrica final deja de ser una estimación fiable del rendimiento en producción. Todas las decisiones de este bloque se toman sobre una partición de validación extraída del conjunto de entrenamiento. El conjunto de prueba se utiliza una única vez, para el reporte final.

Prerrequisitos

Material de Referencia

  1. Métricas de clasificación: Estudie el módulo de clasificación del Google Machine Learning Crash Course. El material muestra de forma interactiva el efecto del umbral de decisión sobre los tipos de error, la curva ROC y el área bajo la curva (AUC).
  2. Catálogo de métricas: Consulte la sección Metrics and scoring de la guía de usuario de scikit-learn como referencia de las métricas de clasificación y regresión disponibles y de su definición formal.

Actividad Práctica

  1. Cree la rama feat/b03-evaluacion desde main actualizada.
  2. Implemente el script B03_Evaluacion_y_Metricas/evaluacion.py, ejecutable con uv run python -m B03_Evaluacion_y_Metricas.evaluacion. El script importa las funciones del Bloque 2 (from B02_Fundamentos_ML_Clasico.entrenamiento import ...); no duplique su código.
  3. Aplique la misma partición entrenamiento/prueba del Bloque 2. A continuación, divida X_train en entrenamiento y validación con train_test_split (test_size=0.25, random_state=42 y, en clasificación, estratificada). Repita el preprocesado manual del Bloque 2 calculando sus parámetros solo sobre la nueva partición de entrenamiento y reentrene el modelo de referencia y el Random Forest.
  4. Defina por escrito el coste de cada tipo de error en el contexto del problema asignado: qué implica un falso positivo y un falso negativo (clasificación), o un error por exceso y por defecto (regresión).
  5. Evalúe los modelos sobre la partición de validación:
    • Clasificación:
      1. Genere la matriz de confusión y calcule precisión, sensibilidad (recall) y F1-Score.
      2. Genere las curvas ROC y Precisión-Sensibilidad con sus áreas bajo la curva. En presencia de desequilibrio de clases, priorice la curva Precisión-Sensibilidad, ya que la curva ROC puede ofrecer una visión optimista.
      3. Seleccione el umbral de decisión a partir de las probabilidades (predict_proba) según el criterio de coste del paso 4. El umbral por defecto de 0,5 solo es aceptable si se justifica.
    • Regresión:
      1. Calcule MAE, RMSE y R².
      2. Realice un análisis de residuos: residuos frente a valores predichos, distribución de los residuos y error por segmentos relevantes del problema.
      3. Justifique la elección entre MAE y RMSE según la tolerancia del negocio a errores de gran magnitud.
  6. Con la configuración ya fijada (métrica y, en clasificación, umbral), evalúe una única vez el modelo sobre el conjunto de prueba y compárelo con el modelo de referencia.
  7. Genere todas las figuras con Plotly Express.

Contenido Obligatorio del Pull Request

Informe técnico con los siguientes apartados:

Criterios de Aceptación

Transición al Bloque 4

Dos resultados de este bloque condicionan el siguiente. Primero, la métrica priorizada será el criterio (scoring) de la validación cruzada. Segundo, el paso 3 ha exigido repetir manualmente el preprocesado para una nueva partición; con validación cruzada, esa repetición sería necesaria en cada pliegue. El Bloque 4 elimina esta fuente de errores encapsulando preprocesado y modelo en un único objeto.