Caso práctico I — Hackathon de HPO: 100 min de trabajo + examen de 30

Caso práctico I (Bloque I — Deep Learning) — Hackathon de HPO: dirigir a la IA y responder por lo que construye

Asignatura: Deep Learning para Business Analytics — Comillas (ICADE). Profesor: Eduardo C. Garrido-Merchán · ecgarrido@comillas.edu. Curso: 2026–2027. Bloque: I — Deep Learning (Temas 0–3, semanas 1–7). Modalidad: dos sesiones. La sesión A son 100 minutos de trabajo en el aula con IA permitida y dudas al profesor permitidas. La sesión B, en la clase siguiente, son los 30 primeros minutos: examen escrito y conceptual sobre lo que hicisteis, con los ordenadores cerrados y sin IA. Las cinco preguntas están publicadas en el §8. No hay entrega en Moodle: el código se queda con vosotros y el profesor lo revisa en pantalla al cierre de la sesión A. Agrupación: sesión A en grupos de tres, formados para este caso y sin relación con los grupos del proyecto final; el examen de la sesión B es individual. Peso: caso práctico evaluado con la rúbrica del §10.


1. Contexto de negocio

La mayoría de los problemas de analítica de una empresa no llegan como imágenes ni como texto: llegan como una tabla. Filas que son clientes, préstamos, empleados, pisos o transacciones; columnas que son variables numéricas y categóricas; y una columna objetivo que hay que predecir. ¿Se dará de baja este cliente? ¿Impagará este préstamo? ¿Cuánto vale este piso? Este es el pan de cada día de un equipo de Business Analytics.

El reflejo del sector para datos tabulares ha sido siempre el modelo clásico: regresión logística, árboles, gradient boosting (XGBoost, LightGBM). La dirección os hace dos preguntas: ¿merece la pena afinar una red neuronal para un problema tabular? y, si la usamos, ¿cómo se elige su configuración sin ir a ciegas? Una red tiene decenas de hiperparámetros (profundidad, anchura, tasa de aprendizaje, dropout, weight decay, tamaño de batch, optimizador, early stopping) y la distancia entre una configuración mediocre y una buena es enorme. La disciplina que convierte ese caos en método se llama optimización de hiperparámetros (HPO).

Hay una segunda capa, y es la que estructura el caso. En 2026 el código de este caso lo escribe una IA en cinco minutos. Lo que una empresa os paga es entender qué se ha construido y responder por ello delante de un comité que no lee código: qué se buscó, qué salió, qué significa y si conviene llevarlo a producción. El caso reproduce esa situación literalmente: la IA construye en la sesión A, vosotros explicáis en la B.

2. Objetivo

Dirigir a una IA para que construya una red neuronal (MLP) sobre un problema tabular real y una búsqueda de hiperparámetros sistemática; compararla contra un baseline clásico honesto; y después, en un examen a mano y con el ordenador cerrado, explicar qué hiperparámetros se buscaron y qué controla cada uno, qué dicen los valores que salieron, cómo era la red, qué la regularizaba y en qué consistían los datos.

El examen no pide código ni cuentas: pide entender. La nota vive casi entera ahí. Un grupo que gane el leaderboard y no sepa explicar qué hace el dropout que puso suspende el caso.

3. Estructura del caso: dos sesiones

Sesión A — el hackathon (100 minutos de trabajo, la clase completa).

Tramo Reloj Qué se hace
Reglas, grupos y dataset 0–5 Se cierran los grupos de tres, se elige el dataset del §4 y se reparte el trabajo
Construcción y búsqueda 5–50 Preprocesado, baseline, MLP, espacio de búsqueda, primeros trials
Descanso 50–60
Búsqueda y análisis 60–100 Se agota el presupuesto de trials, se lee el log, se hace el análisis de sensibilidad
Cierre y visto bueno 100–110 Se congela la mejor configuración, se evalúa el test una sola vez y se enseña el cuaderno al profesor

IA permitida y fomentada durante toda la sesión. El profesor responde dudas de contenido, no solo de entorno: preguntad todo lo que queráis, porque esta es la única sesión en la que hay red.

Entre sesiones — estudio libre. Tenéis el código, el log y los días que haya hasta la clase siguiente. Estudiadlo como queráis, con IA incluida. El §6 dice exactamente qué hay que dominar.

Sesión B — el examen (primeros 30 minutos de la clase siguiente). Ordenadores cerrados y guardados, sin apuntes, sin IA. Cinco preguntas conceptuales, 10 puntos, 30 minutos, publicadas íntegras en el §8 desde el primer día. No se pide escribir código ni hacer cuentas: se pregunta qué elegisteis, qué significa lo que salió y por qué. Terminado el examen, la clase continúa con el temario normal.

4. Datos y métrica

La métrica es la misma para toda la clase: AUC-ROC sobre validación durante la búsqueda, y AUC-ROC sobre test una única vez al cierre de la sesión A. Se usa AUC y no accuracy porque las cuatro tablas de abajo están desequilibradas y un clasificador que diga siempre “no” acierta mucho sin predecir nada.

El dataset lo elige cada grupo, entre estas cuatro opciones, en los primeros cinco minutos de la sesión A. Los cuatro son tabulares, de clasificación binaria, de dominio empresarial, de descarga libre sin cuenta ni registro y de tamaño cómodo en un portátil. Los cuatro tienen su propia trampa, y esa trampa es exactamente la pregunta 5(c) del examen. Elegid uno y comprometeos con él: cambiar de tabla a mitad de sesión es tirar el presupuesto de trials.

Opción Dataset Filas Predictoras Qué se predice Positivos
A Telco Customer Churn 7.043 20 (categóricas y numéricas) Que el cliente se dé de baja 26,5 %
B Bank Marketing (UCI) 41.188 20 (10 categóricas + 10 numéricas) Que el cliente contrate un depósito a plazo 11,3 %
C Adult / Census Income (UCI) 48.842 14 (8 categóricas + 6 numéricas) Que la renta anual supere los 50.000 USD 23,9 %
D Default of Credit Card Clients (UCI) 30.000 23 (numéricas, varias son códigos) Que el cliente impague el mes siguiente 22,1 %

Opción A — Telco Customer Churn. Una fila por cliente de una operadora de telecomunicaciones, con su antigüedad, su cargo mensual, su tipo de contrato y los servicios que tiene contratados. Es la tabla sobre la que está hecha la demo del profesor del §13, así que es la opción de menor fricción. Licencia CC0. Descarga directa: https://raw.githubusercontent.com/IBM/telco-customer-churn-on-icp4d/master/data/Telco-Customer-Churn.csv (también en https://www.kaggle.com/datasets/blastchar/telco-customer-churn). La trampa: TotalCharges llega como texto porque once clientes nuevos tienen la celda en blanco, de modo que pd.to_numeric(..., errors="coerce") la convierte y deja once NaN que hay que imputar o eliminar.

Opción B — Bank Marketing. Una fila por llamada de una campaña telefónica de un banco portugués, con datos del contactado, el historial de la campaña y cinco indicadores macroeconómicos del mes. Fichero bank-additional/bank-additional-full.csv dentro de https://archive.ics.uci.edu/static/public/222/bank+marketing.zip (zip anidado, y el CSV usa ; como separador). Licencia CC BY 4.0. La trampa es la mejor de las cuatro: la columna duration, la duración de la llamada en segundos, es una fuga de información. Solo se conoce después de colgar, y si dura cero segundos la respuesta es “no” por construcción; la propia documentación de UCI dice que hay que descartarla para tener un modelo realista. Un grupo que la deje dentro verá un AUC altísimo que no significa nada, y explicarlo vale la pregunta 5(c) entera. Trampa secundaria: los ausentes no vienen como NaN sino como la categoría unknown (8.597 filas solo en default), y con un 11 % de positivos es la tabla más desequilibrada del cuarteto.

Opción C — Adult / Census Income. Una fila por persona censada en Estados Unidos en 1994, con edad, nivel educativo, ocupación, estado civil y horas trabajadas. Ficheros adult.data y adult.test dentro de https://archive.ics.uci.edu/static/public/2/adult.zip; vienen sin cabecera, así que los nombres de columna hay que ponerlos a mano desde adult.names. Licencia CC BY 4.0. Las trampas son tres y con una explicada basta: los ausentes están codificados como ? en workclass (2.799), occupation (2.809) y native-country (857); fnlwgt es el peso muestral de la encuesta, no un atributo de la persona, y meterlo como predictora no tiene sentido; education y education-num son la misma variable dos veces, una como texto y otra como número. Además, las etiquetas de adult.test traen un punto final (>50K.) y su primera línea es basura, de modo que unir los dos ficheros sin limpiar produce cuatro clases en lugar de dos.

Opción D — Default of Credit Card Clients. Una fila por titular de tarjeta de un banco taiwanés en 2005, con su límite de crédito, seis meses de estado de pago, seis de facturación y seis de importes pagados. Fichero default of credit card clients.xls dentro de https://archive.ics.uci.edu/static/public/350/default+of+credit+card+clients.zip. Licencia CC BY 4.0. Es un Excel con dos filas de cabecera, así que se lee con pd.read_excel(..., header=1), y la columna ID hay que tirarla. La trampa: aquí todo llega como número, pero no todo es numérico. SEX, EDUCATION, MARRIAGE y los seis PAY_* son códigos categóricos, y escalarlos como si fueran continuos le dice a la red que “casado” está a media distancia entre dos cosas que no forman una escala. Encima EDUCATION trae los códigos 0, 5 y 6, que la documentación no define, y MARRIAGE un 0 igualmente indocumentado: categorías fantasma que hay que decidir qué hacer con ellas.

Partición: la que queráis. Aquí no hay código que copiar. Lo único que se exige es que sea honesta y que sepáis defenderla en la pregunta 5(b):

import numpy as np, random, torch
SEED = 20262027
random.seed(SEED); np.random.seed(SEED); torch.manual_seed(SEED)

Un 60 / 20 / 20 estratificado es una elección perfectamente razonable y es la que usa la demo del profesor. Si preferís 70 / 15 / 15, o 5-fold sobre un 80 % con el 20 % restante apartado como test, adelante: lo que se puntúa en el examen es que sepáis decir por qué elegisteis eso y para qué sirve cada parte.

5. Sesión A — Construcción, HPO y entrega (100 min)

Con 100 minutos hay margen para hacer las cosas bien y, sobre todo, para entenderlas mientras se hacen. El cierre es firme: pasado el minuto 110 no se acepta código.

El profesor mantiene un leaderboard en la pizarra con el AUC de validación de cada grupo, en una columna por dataset, actualizado en vivo. Solo se comparan entre sí los grupos que hayan elegido la misma tabla: un AUC de 0,79 en Bank Marketing y uno de 0,85 en Telco no miden lo mismo. Sirve de incentivo y pesa cero en la nota: lo que puntúa es el §10. Lo que hayáis construido al cierre es lo que tendréis que defender a mano en la sesión B.

6. Entre sesiones — qué hay que dominar

Estudiad como queráis, con IA incluida: nadie os va a preguntar cómo estudiasteis. Aviso, y va en serio: memorizar una respuesta redactada por una IA no funciona aquí, porque las preguntas van sobre vuestras decisiones y vuestros resultados, y porque todas piden mecanismo, no definición. La diferencia entre un aprobado y un sobresaliente es si sabéis decir qué le pasa al modelo cuando movéis algo.

Esta es la lista, y se corresponde una a una con las cinco preguntas del §8:

No hace falta memorizar cifras exactas ni líneas de código. Hace falta poder explicárselo a alguien que no programa.

7. Sesión B — El examen del caso (30 min)

Primeros 30 minutos de la clase siguiente. Ordenadores cerrados y guardados. Se responde a mano, en solitario, sin apuntes, sin IA y sin el log delante. Este examen es el entregable evaluado del caso.

Cinco preguntas, 10 puntos, publicadas íntegras en el §8 desde el primer día. No hay preguntas sorpresa, no se pide escribir código, no se pide hacer cuentas y no hacen falta cifras exactas: los números que se piden son los órdenes de magnitud que recordéis. Todas preguntan por vuestras decisiones y vuestros resultados, así que no hay nada que se pueda traer escrito de casa: lo que se puede traer es haber entendido lo que hicisteis.

Las respuestas son breves. Se valora la precisión conceptual, no la extensión: media cara bien escrita puntúa más que dos caras de relleno.

8. La hoja del examen — las cinco preguntas

Esto es exactamente lo que se reparte en la sesión B. Los tiempos orientativos van entre paréntesis.


Pregunta 1 — Los hiperparámetros que elegisteis. (2,5 puntos · ~7 min)

(a) ¿Qué hiperparámetros metisteis en la búsqueda? Nombradlos.

(b) Para cada uno, explicad qué controla dentro del modelo o del entrenamiento: qué cambia en la red o en el proceso cuando ese valor sube y qué cambia cuando baja.

(c) ¿Por qué esos y no otros? ¿Qué dejasteis fijo y con qué criterio?


Pregunta 2 — La interpretación de los valores obtenidos. (2,5 puntos · ~7 min)

(a) ¿Qué valores salieron en la configuración ganadora? Interpretadlos: ¿qué os está diciendo el dataset sobre el modelo que necesita? Por ejemplo, un dropout alto o una red estrecha no son un accidente, dicen algo sobre cuántos datos hay y cuánta señal tienen.

(b) ¿Qué configuraciones salieron claramente mal, y por qué creéis que fallaron?

(c) Comparado con el baseline clásico, ¿mereció la pena la red? Contestad sí o no y justificadlo en dos líneas.


Pregunta 3 — La arquitectura. (2 puntos · ~6 min)

(a) ¿Cuál era la arquitectura de vuestra red? Describidla: tipo de red, cuántas capas, de qué tamaño, qué activación y qué salida.

(b) ¿Qué habría pasado si hubierais usado una red bastante más compleja (muchas más capas o mucho más anchas) sobre estos mismos datos? Hablad de lo que le pasa al ajuste, a la generalización y al tiempo de búsqueda.

(c) ¿Y si hubiera sido demasiado pequeña?


Pregunta 4 — La regularización. (1,5 puntos · ~5 min)

(a) ¿Qué técnica o técnicas de regularización usasteis?

(b) Explicad qué hace la que más peso tuvo: qué le impide al modelo hacer, y por qué eso ayuda a que funcione mejor con datos que nunca ha visto.

(c) ¿Qué pasa si se regulariza demasiado?


Pregunta 5 — El conjunto de datos. (1,5 puntos · ~5 min)

(a) ¿Cuál de las cuatro tablas elegisteis y en qué consistía? Qué representa una fila, qué tipo de columnas hay y qué se está prediciendo.

(b) ¿Cómo repartisteis los datos y para qué sirve cada parte? ¿Por qué no basta con partir en dos?

(c) ¿Qué trampa o peculiaridad de esos datos hubo que tratar antes de entrenar?


Quien haya hecho alguno de los bonus del §5.8 tendrá que poder defenderlo dentro de estas mismas preguntas: los hiperparámetros extra entran en la 1, la comparación entre random search y búsqueda bayesiana entra en la 2 y la CNN entra en la 3.

9. Tabla Concepto → Aplicación → Entradas → Salidas → KPI

Tabla de referencia del caso, para orientar el trabajo de la sesión A. No se pregunta en el examen.

Concepto Aplicación Entradas Salidas KPI
Red tabular (MLP) Clasificación binaria sobre la tabla elegida en el §4 Features numéricas + categóricas Probabilidad de la clase positiva AUC-ROC
Baseline clásico Referencia de honestidad Misma tabla Logística y GBM AUC-ROC de referencia
HPO Elegir la configuración con método Espacio de cuatro hiperparámetros + validación Hiperparámetros finales Δ AUC vs. configuración inicial; nº de trials
Comprensión de lo construido Responder por lo que la IA escribió Script, log de búsqueda y curva de sensibilidad Explicación conceptual de decisiones y resultados Las cinco preguntas del §8

10. Rúbrica

La nota del caso se reparte así:

Componente Peso Qué se valora
Examen de la sesión B (hoja del §8, sobre 10 puntos) 85 % Las cinco preguntas, con el desglose de abajo.
Visto bueno del §5.7 en el aula 15 % El profesor lo comprueba en pantalla al cierre de la sesión A: el cuaderno corre de principio a fin, las semillas están fijadas, el test se evaluó una sola vez, los cuatro hiperparámetros tienen su rango explícito, busqueda.csv tiene ≥ 30 configuraciones, hay curva de sensibilidad y prompts.md está completo y en orden.
Bonus del §5.8 hasta +1 punto sobre la nota final del caso Más de cuatro hiperparámetros (0,25); búsqueda bayesiana comparada con random search sobre el mismo espacio y presupuesto (0,5); CNN sobre un dataset sencillo de imágenes con los mismos cuatro hiperparámetros de disciplina (0,5). Solo se cuentan si lo obligatorio está completo y si se saben defender en el examen.

Desglose de los 10 puntos del examen:

Pregunta Puntos Criterio de corrección
1. Los hiperparámetros 2,5 Los nombra (0,5); explica qué controla cada uno en términos de qué le pasa al modelo si sube y si baja (1,5); justifica la elección y dice qué quedó fijo (0,5).
2. Interpretación de los valores 2,5 Da los valores ganadores, aunque sea en orden de magnitud, y los interpreta como información sobre el dataset (1,25); diagnostica lo que fue mal con un mecanismo, no con una etiqueta (0,75); se moja sobre si la red mereció la pena frente al baseline (0,5).
3. La arquitectura 2,0 Describe la red que usó (0,75); efectos de una red mucho más compleja sobre ajuste, generalización y coste de búsqueda (0,75); efecto de quedarse corto, underfitting (0,5).
4. La regularización 1,5 Nombra la técnica (0,25); explica el mecanismo y por qué mejora el comportamiento con datos no vistos (0,75); dice qué pasa si se regulariza de más (0,5).
5. El conjunto de datos 1,5 Qué tabla eligió, qué es una fila, qué columnas y qué se predice (0,5); cómo la partió y para qué sirve cada parte, con el argumento de por qué no bastan dos bloques (0,5); la trampa de esa tabla y cómo la trató (0,5).

Criterio transversal de corrección: describir no es explicar. Un valor correcto sin mecanismo se lleva la mitad de su parte; un mecanismo bien contado con el valor olvidado se lleva la parte entera.

Condición de aprobación: un examen que no sepa decir qué hiperparámetros se buscaron y qué controla cada uno (pregunta 1) ni describir el conjunto de datos y para qué sirve cada parte de la partición (pregunta 5) suspende el caso, con independencia del leaderboard y del AUC de test.

Esta rúbrica se desvía de la rúbrica común del curso (que rige en los casos II y III y en el proyecto final) porque este caso no tiene memoria escrita, ni slides, ni defensa oral: se trabaja en clase y se evalúa con un examen.

11. Política de IA

Sesión A: IA permitida y fomentada, sin restricciones de herramienta. Escribid con ella el preprocesado, el MLP, el bucle de HPO y el análisis del log, y usadla además para que os explique cada decisión que ha tomado. Cuanto más produzca, más habrá que entender, que es de lo que va el caso. Requisito único: prompts.md completo y a la vista en el visto bueno del §5.7.

Entre sesiones: IA permitida sin límite para estudiar, repasar y pediros explicaciones de vuestro propio código.

Sesión B: IA prohibida, ordenadores cerrados y guardados, sin apuntes. Usarla o consultar apuntes supone un cero en el caso (regla C de la política de IA del Día 01).

La decisión de qué tabla usar y qué cuatro hiperparámetros buscar, y la comprensión de qué hace cada uno, son vuestras y se responden a mano.

12. Fechas y logística

13. Ayudas

Durante la sesión A el profesor responde cualquier duda, de entorno o de contenido: es la sesión con red y hay que aprovecharla. Entre sesiones, el foro primero y el profesor después. Para la búsqueda, empezad simple: random search sobre cuatro hiperparámetros bien elegidos y entendidos rinde más en el examen que una búsqueda bayesiana de cien trials que no sabéis leer.

La demo del profesor: casos/demo_hpo/. Está publicada con el enunciado y es el mejor punto de partida. El corazón es demo_hpo.ipynb, un cuaderno Jupyter ejecutado y lleno de figuras que explica la búsqueda de hiperparámetros paso a paso sobre la opción A, Telco. Si vuestro grupo eligió otra tabla, todo lo que viene abajo os sirve igual: cambia el read_csv y el preprocesado, y el resto es idéntico.

  1. Qué es una evaluación: las curvas de entrenamiento y validación de una configuración buena y una mala, y dónde para el early stopping.
  2. El paisaje: la superficie de AUC sobre (tasa de aprendizaje, dropout) calculada a la fuerza bruta con 169 entrenamientos, para ver lo que un buscador nunca llega a ver.
  3. Rejilla contra sorteo: por qué el grid search desperdicia el presupuesto.
  4. Random search y su log.
  5. El mecanismo de la búsqueda bayesiana: las densidades de configuraciones buenas y malas, y cómo salen de ahí las propuestas.
  6. Las dos, cara a cara: convergencia y mapa del progreso a los 5, 10 y 20 trials.
  7. Cómo se lee un log: coordenadas paralelas y curvas de sensibilidad.
  8. El bonus de la CNN: filtros aprendidos, matriz de confusión y errores.

El mismo cuaderno está en demo_hpo.pdf, resuelto y paginado, por si preferís leerlo sin ejecutar nada. Además están demo_hpo.py (todo el código, ejecutable con python demo_hpo.py --trials 30 --seeds 3 --paisaje 13 --bonus-cnn), los CSV de las búsquedas, resultado.txt y todas las figuras sueltas en PNG.

Copiad su estructura, no sus resultados: el trabajo de la sesión A es vuestro y el examen pregunta por vuestras decisiones.