- Proyecto Final: Integración de Técnicas de Ensamble
Proyecto Final: Integración de Técnicas de Ensamble
Objetivo del proyecto: Aplicar una técnica de ensamble de aprendizaje supervisado (AdaBoost, Gradient Boosting o XGBoost) sobre un conjunto de datos real, abarcando desde el preprocesamiento hasta la interpretación de resultados. El estudiante deberá demostrar dominio en la selección, entrenamiento y ajuste de hiperparámetros del modelo, así como en la comunicación de hallazgos mediante un informe técnico y una presentación ejecutiva.
1. Descripción del Problema y Datos
Se proporcionan tres conjuntos de datos de acceso público (elegir uno):
- Predicción de precios de vivienda (California Housing Dataset) – regresión.
- Detección de fraude en tarjetas de crédito (Credit Card Fraud Detection) – clasificación desbalanceada.
- Optimización de rendimiento de estudiantes (Student Performance Dataset) – clasificación multiclase o regresión.
Cada dataset incluye variables numéricas y categóricas, valores nulos y escalas dispares, lo que exige un preprocesamiento riguroso. El problema real puede ser de optimización (minimizar error cuadrático), detección (maximizar recall/AUC) o predicción (precisión equilibrada).
2. Preprocesamiento de Datos
Se deben realizar las siguientes etapas de limpieza y transformación:
- Análisis exploratorio: identificar distribuciones, outliers, correlaciones, valores faltantes.
- Tratamiento de nulos: imputación con mediana/moda o eliminación según el caso.
- Codificación de variables categóricas: one-hot encoding o label encoding.
- Normalización/Estandarización: aplicar StandardScaler o MinMaxScaler a variables numéricas.
- División en entrenamiento, validación y prueba (70/15/15) con estratificación si es clasificación.
# Ejemplo de preprocesamiento con scikit-learn
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)
numeric_features = [...]
categorical_features = [...]
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numeric_features),
('cat', OneHotEncoder(drop='first'), categorical_features)
])
X_train_processed = preprocessor.fit_transform(X_train)
X_val_processed = preprocessor.transform(X_val)
X_test_processed = preprocessor.transform(X_test)
3. Selección de la Técnica de Ensamble
Elegir una de las siguientes tres técnicas, justificando la elección según la naturaleza del problema:
| Técnica | Características principales | Mejor para |
|---|---|---|
| AdaBoost | Ajusta pesos de instancias mal clasificadas; sensible a ruido. | Problemas con pocos datos o donde se desea rapidez. |
| Gradient Boosting | Construye árboles de forma secuencial minimizando pérdida; tiene hiperparámetros como learning_rate, n_estimators, max_depth. | Problemas con conjuntos de tamaño mediano y alta dimensionalidad. |
| XGBoost | Variante optimizada con regularización L1/L2, manejo de valores nulos, escalabilidad y rendimiento superior. | Grandes volúmenes de datos y competiciones (eficiente, preciso). |
Recomendación: Para fraude crediticio (clase desbalanceada) XGBoost es ideal por su parámetro scale_pos_weight. Para predicción de vivienda, Gradient Boosting con árboles poco profundos suele dar buen balance sesgo-varianza.
4. Entrenamiento y Ajuste de Hiperparámetros
Utilizar búsqueda en cuadrícula (GridSearchCV) o búsqueda aleatoria (RandomizedSearchCV) sobre una malla predefinida. Ejemplo para XGBoost:
import xgboost as xgb
from sklearn.model_selection import GridSearchCV
model = xgb.XGBRegressor(objective='reg:squarederror', random_state=42)
param_grid = {
'n_estimators': [100, 200],
'max_depth': [3, 5, 7],
'learning_rate': [0.01, 0.1, 0.3],
'subsample': [0.7, 0.9],
'colsample_bytree': [0.6, 0.9]
}
grid_search = GridSearchCV(estimator=model, param_grid=param_grid,
cv=5, scoring='neg_mean_squared_error', n_jobs=-1)
grid_search.fit(X_train_processed, y_train)
best_params = grid_search.best_params_
best_model = grid_search.best_estimator_
Para clasificación, usar xgb.XGBClassifier con métrica ROC_AUC. Registrar los mejores parámetros y el desempeño en validación.
5. Evaluación del Modelo
Evaluar el modelo final sobre el conjunto de prueba con las métricas adecuadas:
- Regresión: RMSE, MAE, R².
- Clasificación binaria: precisión, recall, F1-score, AUC-ROC, matriz de confusión.
- Clasificación multiclase: exactitud (accuracy), F1 macro/micro, matriz de confusión.
Además, realizar validación cruzada (k=5) para estimar la estabilidad del modelo y comparar con una línea base (ej. árbol simple o regresión logística).
from sklearn.metrics import mean_squared_error, r2_score, classification_report
y_pred = best_model.predict(X_test_processed)
print("RMSE:", mean_squared_error(y_test, y_pred, squared=False))
print("R²:", r2_score(y_test, y_pred))
6. Interpretación de Resultados
Utilizar importancia de características (feature importance) y diagramas de dependencia parcial (partial dependence plots) para explicar el modelo:
- Listar las 10 variables más influyentes con sus puntuaciones.
- Mostrar gráficas de dependencia parcial para las 3 variables principales.
- Comentar si los resultados son coherentes con la intuición del dominio.
# Importancia de características en XGBoost
import matplotlib.pyplot as plt
feature_importances = best_model.feature_importances_
sorted_idx = feature_importances.argsort()[::-1][:10]
plt.figure(figsize=(8,6))
plt.barh(range(10), feature_importances[sorted_idx])
plt.yticks(range(10), [feature_names[i] for i in sorted_idx])
plt.xlabel('Importancia')
plt.title('Top 10 variables - XGBoost')
plt.gca().invert_yaxis()
plt.show()
7. Entregables del Proyecto
El proyecto será presentado mediante dos formatos:
- Informe técnico (máximo 10 páginas, formato PDF):
- Introducción y definición del problema.
- Descripción de los datos y preprocesamiento.
- Metodología: selección del modelo, justificación, hiperparámetros.
- Resultados obtenidos (tablas, gráficas, métricas).
- Interpretación y conclusiones.
- Referencias bibliográficas (formato APA/MLA).
- Presentación ejecutiva (10–12 diapositivas):
- Contexto del problema y datos.
- Pipeline de solución (diagrama de flujo).
- Resultados comparativos (modelo base vs. ensamble).
- Lecciones aprendidas y limitaciones.
8. Rúbrica de Evaluación
| Criterio | Ponderación | Indicadores de logro |
|---|---|---|
| Preprocesamiento y análisis | 20% | Limpieza adecuada, codificación y escalamiento justificados. |
| Selección y entrenamiento del modelo | 30% | Justificación clara, búsqueda de hiperparámetros exhaustiva, uso de validación cruzada. |
| Evaluación e interpretación | 25% | Métricas completas, análisis de importancia de variables, discusión de sesgos. |
| Informe y presentación | 25% | Estructura clara, gráficas limpias, conclusiones útiles para el dominio. |
9. Consejos Adicionales
- Utilizar un notebook Jupyter o un script reproducible para la parte técnica.
- Documentar todas las decisiones en el informe (por qué se eligió una técnica de imputación sobre otra).
- Si el dataset es desbalanceado, aplicar SMOTE o ajustar el peso de las clases.
- Comparar el rendimiento del ensamble con al menos un modelo baseline (árbol de decisión simple, regresión lineal).
- Incluir gráficas de error durante el entrenamiento (curvas de aprendizaje) para analizar overfitting/underfitting.
Nota: Este proyecto integrador no solo evalúa la capacidad técnica, sino también la comunicación de resultados a audiencias no especializadas. El éxito radica en equilibrar la complejidad matemática con la claridad expositiva.
Proyecto Final - Odisea Algorítmica: De la Regresión al Aprendizaje Profundo
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.