Construir árboles de decisión interpretables
Entender impureza de Gini y entropía
Comparar árboles vs redes neuronales
Aprender cuándo importa la interpretabilidad
Construye y visualiza árboles de decisión interactivamente
Construye árboles de clasificación/regresión mediante división binaria recursiva. Selecciona divisiones maximizando ganancia de información (impureza Gini o reducción de entropía). Maneja features categóricos/numéricos, estrategias de poda, trade-offs interpretabilidad vs accuracy.
Árbol de decisión es juego de 20 preguntas: cada nodo pregunta binariamente dividiendo datos en grupos homogéneos. Gini/Entropía miden "pureza" – meta son nodos hoja puros (una clase).
Árboles son interpretables pero propensos a sobreajuste. Controla mediante max_depth, min_samples_split. Métodos ensemble (Random Forest, XGBoost) sacrifican interpretabilidad por accuracy.
Gini: cómputo más rápido, entropía: mejor fundamento teórico. Resultados prácticamente similares. Gini default en scikit-learn.
Pre-poda: detener crecimiento temprano (max_depth, min_samples). Post-poda: crecer árbol completo, luego cortar ramas mediante complejidad de costo.
Suma de ganancia de información ponderada por muestras en cada división de nodo. Identifica features más predictivos.
Bancos usan árboles de decisión para aprobación de préstamos: ingreso > $X? → puntaje crédito > Y? → aprobar/rechazar. Interpretable para reguladores.
Diagnosticar enfermedad mediante árbol de síntomas: fiebre? → tos? → viaje reciente? → diagnóstico malaria/gripe/COVID.
Filtro de correo: contiene "urgente"? → muchas exclamaciones? → link sospechoso? → spam/no spam.
Max depth 1 = subajuste (línea recta). Max depth 10 = sobreajuste (ondulada). Max depth 3-5 = justo.
Mismos datos, cambiar criterio. Ver si puntos de división difieren (usualmente muy similar).
❌ Sin poda (demasiado profundo)
¿Por Qué? Memoriza datos de entrenamiento, falla en datos nuevos. Siempre configura max_depth o min_samples_split.
❌ Ignorar desbalance de clases
¿Por Qué? Clase mayoritaria domina divisiones. Usa class_weight o resampling.