Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Scikit-learn desde cero, Unidad 9 — Selección y ajuste de modelos, 9.2 — Comparación de modelos ·

Métricas comparables

Métricas comparables

Introducción

Cuando trabajamos con modelos de machine learning, una parte crucial es evaluar su rendimiento. Sin embargo, para que la evaluación sea útil y comparable entre diferentes modelos o configuraciones, es vital asegurarnos de que las métricas utilizadas sean adecuadas e integrables. En este artículo, exploraremos cómo seleccionar y comparar métricas en scikit-learn para obtener resultados confiables y reproducibles.

Explicación principal con ejemplos

Importando librerías

Para comenzar, asegúrate de importar las bibliotecas necesarias:

from sklearn.model_selection import cross_val_score, KFold
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

Generando un conjunto de datos sintético

Vamos a generar un conjunto de datos de clasificación para demostrar el proceso:

X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

Definición de modelos e instantiación de métricas

Definimos los modelos que deseamos comparar y las métricas que vamos a evaluar:

models = {
    "Logistic Regression": LogisticRegression(),
    "Random Forest": RandomForestClassifier(n_estimators=100, random_state=42),
}

metrics = ["accuracy", "precision", "recall", "f1"]

Evaluación de modelos con validación cruzada

Vamos a evaluar cada modelo utilizando validación cruzada y las métricas definidas:

results = {}

kf = KFold(n_splits=5, shuffle=True, random_state=42)

for name, model in models.items():
    scores = cross_val_score(model, X, y, cv=kf, scoring="accuracy")
    results[name] = {}
    for metric in metrics:
        results[name][metric] = cross_val_score(model, X, y, cv=kf, scoring=metric)

Imprimir resultados

Finalmente, imprimimos los resultados obtenidos para compararlos:

for model_name, scores_dict in results.items():
    print(f"Modelo: {model_name}")
    for metric, score in scores_dict.items():
        print(f"  Métrica: {metric} - Promedio: {score.mean():.4f}, Desviación estándar: {score.std():.4f}")

Errores típicos / trampas

  1. Evaluando con la misma muestra de entrenamiento y prueba: Esto puede inflar artificialmente los resultados del modelo, ya que se entrena y evalúa en datos conocidos.
  1. Usando métricas no adecuadas para el problema: Por ejemplo, usar la precisión (precision) en problemas imbalanced donde falso negativo tiene un costo mayor que falso positivo.
  1. No normalizando los resultados para comparar entre conjuntos de datos diferentes: Si estás evaluando modelos en conjuntos de datos con diferentes tamaños o distribuciones, asegúrate de normalizar las métricas obtenidas.

Checklist accionable

  1. Verifica que las variables de entrada y salida sean adecuadas para el problema.
  2. Utiliza validación cruzada (cross-validation) para obtener una evaluación más precisa y robusta del modelo.
  3. Asegúrate de utilizar las mismas métricas para todos los modelos en comparación.
  4. Normaliza las métricas obtenidas para comparar entre conjuntos de datos diferentes o con tamaños distintos.
  5. Evalúa la importancia de las variables y realiza selección de características si es necesario.

Cierre

Siguientes pasos

  1. Profundizar en el machine learning: Explora modelos más avanzados y técnicas como boosting, bagging, y deep learning.
  2. Aprender sobre MLOps: Asegúrate de que tus modelos estén bien documentados y versionados para una producción segura.
  3. Participa en proyectos reales: Practica la aplicación de estos conocimientos en proyectos prácticos para mejorar tus habilidades técnicas.

Siguiendo estas recomendaciones, podrás evaluar de manera efectiva los modelos de machine learning utilizando scikit-learn y asegurarte de que las métricas utilizadas sean comparables e integrables entre diferentes configuraciones.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).