Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/HelenDiMo/pildora-bootcamp-preprocesamiento/llms.txt

Use this file to discover all available pages before exploring further.

Una vez entrenados ambos modelos, el siguiente paso es comparar su rendimiento lado a lado, interpretar qué significa la diferencia de accuracy en el contexto de este dataset y extraer criterios prácticos para decidir cuál desplegar en producción. Esta página cubre cómo construir la comparativa visualmente, cómo leer cada escenario posible de resultados y qué factores más allá de la accuracy deben guiar la elección en un entorno real.

Generación de la comparativa

El siguiente código, extraído de la Sección 7 de la aplicación Streamlit, recoge las accuracies ya calculadas de ambos modelos y las representa en una gráfica de barras:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score

df_comp = pd.DataFrame({
    "Modelo": ["Random Forest", "XGBoost"],
    "Accuracy": [rf_acc, xgb_acc]
})

fig, ax = plt.subplots(figsize=(4, 3))
ax.bar(["Random Forest", "XGBoost"], [rf_acc, xgb_acc], color=["steelblue", "#ff7f0e"])
ax.set_ylim(0, 1)
ax.set_ylabel("Accuracy")
ax.set_title("Comparativa de modelos")
plt.show()
rf_acc y xgb_acc son los valores calculados previamente con accuracy_score en las secciones 5 y 6 respectivamente. El eje y se fija entre 0 y 1 para mantener la escala consistente independientemente de los valores exactos obtenidos.

Interpretación de resultados

El resultado de la comparativa cae en uno de tres escenarios. Expande el que corresponda a tu ejecución:
XGBoost tiende a obtener una accuracy superior cuando existen relaciones no lineales complejas, ruido leve en los datos o interacciones fuertes entre variables. El proceso secuencial de boosting captura sutilezas morfológicas — como la relación entre la longitud y la profundidad del pico de cada especie — que un ensemble paralelo puede pasar por alto.En este escenario, los árboles sucesivos de XGBoost han corregido iterativamente los casos mal clasificados por los anteriores, acumulando una capacidad predictiva superior. Considera validar con cross_val_score para confirmar que la ventaja es consistente y no un artefacto del split concreto.
Random Forest tiende a ganar en datasets pequeños y bien separados con fronteras de decisión estables, como ocurre frecuentemente con Palmer Penguins. El ensemble por promediado es suficiente para clasificar correctamente las tres especies sin necesidad de la complejidad adicional del boosting secuencial.En este escenario, la robustez inherente de Random Forest — que no requiere un ajuste crítico de learning_rate ni max_depth — resulta ser una ventaja. El modelo es más estable y menos propenso al sobreajuste cuando los datos son limpios y las clases están bien diferenciadas.
Cuando ambos modelos alcanzan la misma accuracy, el dataset tiene fronteras de clase limpias que cualquiera de las dos arquitecturas captura óptimamente. Ni el boosting ni el promediado tienen una ventaja significativa porque el problema es suficientemente sencillo.En este caso, la elección entre modelos debe basarse en criterios secundarios: velocidad de inferencia, facilidad de despliegue, requisitos de explicabilidad o tiempo de entrenamiento disponible. Consulta la guía de decisión para producción a continuación.

Guía de decisión para producción

Más allá de la accuracy sobre este dataset concreto, otros factores determinan qué modelo es más adecuado para un entorno productivo:
CriterioRandom ForestXGBoost
Tamaño del datasetPequeño-medianoMediano-grande
Velocidad de inferenciaMás rápidoLigeramente más lento
Ajuste de hiperparámetrosRobusto, menos necesarioMás sensible, más importante
ExplicabilidadFeature importances simplesSHAP values recomendados
DespliegueMuy simple (joblib)Requiere joblib o ONNX para portabilidad óptima

Validación cruzada recomendada

Antes de tomar una decisión definitiva, valida ambos modelos con validación cruzada estratificada de 5 folds para obtener estimaciones más robustas. Dado que train_random_forest y train_xgboost aceptan las etiquetas de especie originales ('Adelie', 'Chinstrap', 'Gentoo'), puedes pasar y directamente sin ninguna transformación previa:
from sklearn.model_selection import cross_val_score

rf_cv = cross_val_score(rf_pipeline, X, y, cv=5)
print(f"RF  CV accuracy: {rf_cv.mean():.4f} ± {rf_cv.std():.4f}")

xgb_cv = cross_val_score(xgb_pipeline, X, y, cv=5)
print(f"XGB CV accuracy: {xgb_cv.mean():.4f} ± {xgb_cv.std():.4f}")
La desviación estándar entre los 5 folds es tan informativa como la media: una desviación baja (< 0.02) indica que el modelo es estable; una desviación alta sugiere que el rendimiento depende fuertemente de qué observaciones caen en el conjunto de entrenamiento.
En el dataset Palmer Penguins, ambos modelos alcanzan con frecuencia una accuracy entre el 97 % y el 100 %. Esto es completamente esperado para un dataset tan pequeño y limpio. El valor real del ejercicio no está en el número exacto — está en interiorizar el pipeline completo: preprocesamiento, split estratificado, encapsulación en Pipeline y evaluación rigurosa. El mismo flujo escala directamente a datasets de millones de filas.

Build docs developers (and LLMs) love