Práctica guiada — Semana 11: Árboles de Clasificación

Introducción al Business Analytics · 06278-ECO

Autor/a

PhD. Eduard F. Martínez-González

1 Contexto de negocio

Una entidad financiera quiere automatizar la evaluación de solicitudes de crédito. Tienen un historial de 300 solicitudes con características del solicitante y saben si cada una fue “Aprobada” o “Rechazada” por el comité de crédito. Quieren un modelo que, dadas las características de una solicitud nueva, prediga automáticamente la decisión correcta.

Nuestro trabajo: Entrenar un árbol de clasificación, obtener sus predicciones en el conjunto de prueba, y construir la matriz de confusión para evaluar qué tan bien predice el modelo.

Tu entregable al final de la clase: La matriz de confusión completa con los valores de TP, FP, TN, FN, las tres métricas calculadas (accuracy, precisión, recall), la comparación con el baseline, y una interpretación escrita de máximo 3 líneas.


2 Paso 1 — Preparar el entorno


3 Paso 2 — Cargar los datos

Trabajamos con el dataset credito_icesi, que contiene solicitudes de crédito de una entidad financiera colombiana.

Variables del dataset:

  • ingreso_m — Ingreso mensual en millones de pesos
  • historial — Historial crediticio (1 = positivo, 0 = negativo)
  • deuda_actual — Deuda vigente en millones de pesos
  • antiguedad_lab — Años de antigüedad laboral
  • edad — Edad del solicitante en años
  • decisionVariable de resultado: "Aprobado" si el crédito fue aprobado, "Rechazado" si fue rechazado

4 Paso 3 — Explorar la variable de resultado

Antes de entrenar, siempre revisamos cuántos casos hay de cada categoría. Esto nos permite calcular el baseline al final.

¿Qué es el baseline?

El baseline es el resultado que obtendríamos con el modelo más simple posible: predecir siempre la categoría más frecuente. Si el 58% de las solicitudes son “Aprobado”, un modelo que siempre predice “Aprobado” tendría 58% de accuracy sin aprender nada.

Nuestro árbol debe superar ese porcentaje. Si no lo hace, no está aprendiendo nada útil. Anota este porcentaje — lo necesitarás en el entregable final.


5 Paso 4 — Dividir en entrenamiento y prueba

El árbol aprende con los datos de entrenamiento. Evaluamos con los datos de prueba — solicitudes que el modelo nunca vio durante el entrenamiento.

¿Por qué dividir los datos?

El árbol memoriza patrones del conjunto de entrenamiento. Si medimos el error en esos mismos datos, el modelo parece perfecto. El conjunto de prueba simula solicitudes futuras y mide la capacidad real de predecir. Esto es el train/test split que vimos en la Semana 9.


6 Paso 5 — Entrenar el árbol de clasificación

¿Cómo leer el output de texto del árbol?

Cada línea es un nodo. Se lee de arriba hacia abajo:

  • El primer nodo (sin sangría) es el nodo raíz: la primera pregunta que hace el modelo. Recuerda el diagrama de la teoría — en el ejemplo de los 8 solicitantes era ¿Ingreso ≥ 3.5M?. Aquí el árbol eligió otra variable de corte basándose en los 225 datos de entrenamiento.
  • El símbolo * al final de una línea indica que es una hoja: allí termina esa rama y el árbol da una predicción.
  • La columna yval muestra la predicción de ese nodo (Aprobado o Rechazado).
  • Los números entre paréntesis muestran cuántas observaciones de entrenamiento cayeron en ese nodo y cómo se distribuyen entre las categorías.

Identifica: ¿Cuál es la primera variable que usa el árbol para dividir? ¿Coincide con la intuición del analista de crédito de la teoría?


7 Paso 6 — Visualizar el árbol

¿Qué muestra el gráfico?

  • Cada nodo interno muestra la pregunta que divide: la variable y el umbral de corte.
  • Cada hoja (nodo terminal) muestra la predicción: “Aprobado” o “Rechazado”.
  • use.n = TRUE agrega el conteo de observaciones de entrenamiento que cayeron en cada nodo.

Compara este gráfico con los diagramas SVG de la teoría (profundidad 1 y profundidad 2). ¿El árbol que entrenaste aquí tiene más o menos niveles que el ejemplo de la teoría? ¿Cuántas hojas tiene?


8 Paso 7 — Predecir en el conjunto de prueba

El árbol ya aprendió. Ahora predice sobre las solicitudes que nunca vio durante el entrenamiento.

Advertencia

¿Ves filas donde real y prediccion difieren? Esos son los errores del modelo. Algunos son FP (predijo Aprobado, era Rechazado) y otros son FN (predijo Rechazado, era Aprobado). La matriz de confusión del siguiente paso los cuenta todos.


9 Paso 8 — Construir la matriz de confusión

Este es el paso central de la clase. Usamos table() para cruzar los valores reales con las predicciones.

Cómo leer esta tabla:

La estructura es filas = valor real y columnas = predicción del modelo — igual que los diagramas de la teoría.

Posición Nombre Significado
Fila “Aprobado”, Col “Aprobado” TP Predijo Aprobado y era Aprobado — acierto
Fila “Aprobado”, Col “Rechazado” FN Predijo Rechazado pero era Aprobado — se perdió un buen cliente
Fila “Rechazado”, Col “Aprobado” FP Predijo Aprobado pero era Rechazado — riesgo de impago
Fila “Rechazado”, Col “Rechazado” TN Predijo Rechazado y era Rechazado — acierto

Tu tarea: Extrae los cuatro números de la tabla y anótalos. Los usarás en el paso siguiente y en el entregable.


10 Paso 9 — Extraer TP, FP, TN, FN

Advertencia

¿Por qué tabla["Aprobado", "Aprobado"] y no tabla[1,1]?

Usar los nombres de las categorías es más seguro: si R ordena las filas o columnas alfabéticamente de forma distinta a lo que esperamos, tabla[1,1] puede no ser el TP. Los nombres siempre apuntan a la celda correcta.


11 Paso 10 — Calcular las métricas

¿Cómo interpretar los tres números juntos?

  • Accuracy: de todas las solicitudes del test, ¿en qué fracción acertó el modelo? Si es 82%, acierta 8 de cada 10.
  • Precisión: de las que predijo “Aprobado”, ¿cuántas realmente lo eran? Una precisión alta protege a la entidad de aprobar malos créditos.
  • Recall: de las que realmente eran “Aprobado”, ¿cuántas detectó? Un recall alto minimiza los buenos clientes rechazados.

Ahora piensa: ¿cuál error es más costoso para esta entidad financiera — el FP o el FN?


12 Paso 11 — Comparar con el baseline

Antes de concluir que el modelo es bueno, lo comparamos con el modelo más simple posible: predecir siempre la categoría más frecuente del conjunto de prueba.

Advertencia

¿El árbol mejora el baseline?

Compara la accuracy del árbol (Paso 10) con la del baseline (el max() que acabas de calcular). Si el árbol no supera ese número, no aprendió nada útil: cualquier persona que siempre diga “Aprobado” lo haría igual de bien.

Si sí lo supera: ¿cuántos puntos porcentuales ganamos? ¿Vale la complejidad del modelo?


13 Tu entregable: la matriz completa

Actividad en clase — Entrega individual

Con los resultados de los pasos anteriores, completa esta tabla a mano o en el espacio indicado por el profesor.


Matriz de confusión (conjunto de prueba):

Predicción: Aprobado Predicción: Rechazado
Real: Aprobado TP = _____ FN = _____
Real: Rechazado FP = _____ TN = _____

Métricas calculadas:

Métrica Fórmula Resultado
Accuracy (TP + TN) / (TP + FN + FP + TN) ______%
Precisión TP / (TP + FP) ______%
Recall TP / (TP + FN) ______%

Baseline:

  • Categoría más frecuente en el test: __________________
  • Proporción: ______%
  • ¿El árbol supera el baseline? ☐ Sí ☐ No
  • Diferencia de accuracy: ______ puntos porcentuales

Interpretación (máximo 3 líneas):

Responde: ¿Qué error comete más el modelo — FP o FN? ¿Qué significa ese error en términos del negocio de la entidad financiera? ¿Recomendarías usar este modelo tal como está?





13.1 Checklist

Al finalizar esta práctica, debes poder:

13.2 Preguntas de comprensión

1. En el Paso 5 entrenaste con maxdepth = 3. Si cambias a maxdepth = 1, ¿esperas que la accuracy en test suba o baje? ¿Y si usas maxdepth = 8? ¿Qué concepto de la teoría explica ambos casos?

Ver respuesta Con maxdepth = 1 el árbol hace una sola pregunta — igual que el ejemplo de profundidad 1 de la teoría. Es muy simple: probablemente baja la accuracy en test (subajuste). Con maxdepth = 8 el árbol tiene muchos niveles y puede memorizar los 225 datos de entrenamiento: accuracy alta en train, pero puede bajar en test (sobreajuste). El mejor punto suele estar en un valor intermedio donde el árbol generaliza sin memorizar.

2. Tu tabla de confusión muestra FP = 8 y FN = 3. Una compañera dice: “Prefiero el modelo con FP = 3 y FN = 8 porque aprueba menos créditos malos.” ¿Tienes razón de preocuparte? ¿Qué depende?

Ver respuesta Depende del costo relativo de cada error para la entidad. FP = aprobar a alguien que no pagará → pérdida por impago (costo financiero directo). FN = rechazar a un buen cliente → pérdida de ingresos futuros (costo de oportunidad). Si el costo del impago es mayor que el del cliente perdido, el modelo con FP=3 es preferible aunque tenga más FN. Si rechazar buenos clientes tiene un costo alto (por ejemplo en un mercado competitivo), puede ser mejor tolerar más FP. No hay respuesta universal — es una decisión de negocio.

3. El árbol da 84% de accuracy en test. El baseline es 56%. Un colega dice: “Ganamos 28 puntos porcentuales, el modelo es excelente.” ¿Estás de acuerdo con esa sola afirmación? ¿Qué más revisarías?

Ver respuesta La mejora sobre el baseline es importante y es una buena señal — el modelo sí aprendió algo. Pero la accuracy sola no es suficiente: hay que revisar precisión y recall para saber qué tipo de errores comete. Si el 84% de accuracy se logra aprobando casi todo (recall muy alto, precisión baja), puede estar asumiendo demasiado riesgo de impago. También conviene verificar que la diferencia entre accuracy en train y en test no sea muy grande (señal de sobreajuste) y que el árbol tenga sentido de negocio: ¿la primera variable de corte que eligió es razonable?