Contenido del curso

- 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:

  1. 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).
  2. 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

Se propone un proyecto integrador donde el estudiante debe elegir una técnica de ensamble (AdaBoost, Gradient Boosting o XGBoost) para resolver un problema real de optimización, detección o predicción. Se proporcionan conjuntos de datos de acceso público. El proyecto incluye preprocesamiento, entrenamiento, ajuste de hiperparámetros, evaluación e interpretación de resultados. Se entrega un informe y una presentación resumiendo el enfoque y conclusiones.
Calificación
0 0

No hay comentarios por ahora.