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
- 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.
- 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.
- 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
- Verifica que las variables de entrada y salida sean adecuadas para el problema.
- Utiliza validación cruzada (cross-validation) para obtener una evaluación más precisa y robusta del modelo.
- Asegúrate de utilizar las mismas métricas para todos los modelos en comparación.
- Normaliza las métricas obtenidas para comparar entre conjuntos de datos diferentes o con tamaños distintos.
- Evalúa la importancia de las variables y realiza selección de características si es necesario.
Cierre
Siguientes pasos
- Profundizar en el machine learning: Explora modelos más avanzados y técnicas como boosting, bagging, y deep learning.
- Aprender sobre MLOps: Asegúrate de que tus modelos estén bien documentados y versionados para una producción segura.
- 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.