Resumen
El episodio 186 de enCoders construye un Random Forest desde cero para entender su intuición, usando el dataset de cáncer de mama de scikit-learn (569 filas, 30 variables numéricas) y código generado por GPT y revisado por Matías. Se parte del concepto de split (cortar un conjunto por un umbral), se formaliza el "orden" con la entropía y se compara cada corte con el information gain ponderado. Con eso se arma el algoritmo de mejor corte y, aplicado recursivamente con criterios de parada, un árbol de decisión. Un árbol profundo sin restricciones se sobreajusta (train 1.0 y test mucho peor). Random Forest lo corrige promediando muchos árboles entrenados con bootstrap y con un subconjunto aleatorio de features, con voto por mayoría. En el ejemplo el bosque mejora al árbol solo (accuracy 0.92 → ~0.94), y sklearn rinde algo mejor que la implementación propia. La conclusión central es que entender la teoría detrás (la medida de desorden y la separación) permite tomar decisiones sobre hiperparámetros en lugar de limitarse a invocar la librería. El episodio incluye además consejos de carrera y una pregunta sobre máster vs. diplomado.
Capítulos
- 00:00IntroPresentación del episodio 186: Random Forest from scratch, para revisar cómo funciona por debajo y qué detalles se pasan por alto al programarlo.
- 00:28Por qué hacerlo from scratchMatías dice que es un ejercicio valioso para quien quiere ser data scientist porque se entienden cosas sutiles. Todo el código lo escribió GPT (unas 600 líneas) y él lo verificó; quiere abrir una sección de algoritmos clásicos from scratch.
- 03:00Cómo se armó el capítuloPartió de un artículo de GitHub sobre random forest from scratch que no le convenció. Le pidió a GPT otro orden, le exigió código completo con comentarios y ejemplos, y fue ejecutando y comprobando cada parte.
- 05:46Machine learning vs IAUn aclaración de Rodo: machine learning es cuando un algoritmo aprende de los datos, desde la regresión lineal hasta las redes neuronales. IA es más amplio, e incluso una serie de if/else cuenta como IA pero no como ML.
- 07:22Dataset de cáncer de mamaDataset de scikit-learn con 569 filas y 30 features numéricas (radio, textura, perímetro, smoothness) y clasificación tumor benigno/maligno. Comentan la convención de poner 1 al caso positivo y notan que en este dataset está al revés (0 es maligno).
- 12:27Qué hay que aprender primero?Para llegar al random forest primero hay que aprender a hacer árboles, y el concepto clave de los árboles es el split. Se prepara la pizarra.
- 13:36Qué es un splitCon un arreglo de valores y etiquetas, un umbral (por ejemplo 4,5 o 3) separa los datos en un grupo izquierdo (menor o igual) y uno derecho. Para este corte la variable debe ser numérica.
- 18:26Split en datos realesSe corta la columna del radio de las primeras 20 filas con la media (13,91). Queda un lado casi todo de unos y otro más mezclado, con distribución original de 6 ceros y 14 unos.
- 22:55Intuición del mejor corteSe busca un corte que deje los ceros de un lado y los unos del otro. Rodo explica el corte como un punto en la recta numérica, que en más variables se vuelve un plano.
- 26:46Entropía para medir desordenHace falta formalizar "harto" con una medida: la entropía, que es baja cuando hay una sola clase y alta cuando hay mezcla. Para dos clases se define con p y 1−p, y por convención 0·log 0 se toma como 0.
- 35:13De entropía a information gainCon las 30 columnas surge la pregunta de qué corte y qué umbral usar. Se propone comparar la entropía antes y después del corte: cuánto se ordenó.
- 37:01Entropía e intuiciónSe mide la entropía de la distribución original (6 ceros, 14 unos) y la de cada pedazo tras el corte. El valor "antes menos después" será grande si se ordenó mucho.
- 38:38Information gain ponderadoCada grupo se pondera por su cantidad de elementos para que un corte que deja un solo dato perfecto no engañe. La fórmula es entropía del padre menos el promedio ponderado de las de los hijos.
- 40:30Buscar el mejor corteSe prueban todos los umbrales de todas las columnas y se queda el de mayor information gain. Perfecto significa entropía 0 en ambos lados, y el gain iguala la entropía del padre.
- 44:22Implementar entropía y gainMuestran el código: la entropía cuenta unos, divide por el total y aplica la fórmula, con ejemplos (puro cero da 0, mixto da 1). La función de gain recibe la impureza como parámetro, así sirve también con Gini.
- 48:16MemesCorte del stream y repaso de memes de la comunidad: la filtración del código de Claude Code, el de "ingeniería es todo no lineal" y otros sobre random forest y deep learning.
- 48:45Consejos carrera dataCasos de Robert (business/data analyst con 5 años) y Nicolás (busca su primer trabajo). Rodo propone diferenciarse con una especialidad y ganar experiencia haciendo análisis gratis para negocios pequeños, midiendo el impacto.
- 57:39Máster vs diplomadoUn geólogo con PhD pregunta si estudiar un máster o un diplomado en estadística y data science. Ambos conductores lo desaconsejan por tiempo y costo, y sugieren autoestudio (como el curso gratis de Stanford en YouTube) o un postdoc.
- 01:02:12Vida personal y herramientasMatías cuenta que estuvo hospitalizado por una infección estomacal. Rodo comenta que depura con agentes en código grande y que juega Ades.
- 01:04:37Algoritmo best splitEl mejor corte se obtiene recorriendo cada feature y cada valor único como umbral, calculando el information gain y quedándose con el máximo. En el ejemplo chico (40 filas, 4 features) el mejor es la columna 0 con umbral 14.
- 01:08:23Recursión y árbol decisiónSe repite el mejor split sobre cada caja resultante, lo que forma un árbol binario de decisiones. Queda abierto hasta dónde cortar.
- 01:10:42Criterios paradaSe limita con la profundidad máxima (max depth) y con un mínimo de datos por nodo. Con un solo dato no se puede seguir cortando.
- 01:15:03Predicción en hojasUn dato nuevo baja por los if/else hasta una hoja, y se predice la clase mayoritaria (el ejemplo de los pañales, con un corte en 4 años y otro a los 90).
- 01:16:22Nodos y hojasSe programa con una clase Nodo (feature, umbral, hijo izquierdo, hijo derecho y un valor solo en las hojas). El valor se define por voto mayoritario.
- 01:18:26Paradas y recursiónLa función que hace crecer el árbol se llama a sí misma y se detiene por profundidad, por pureza o por pocos datos. Son más de cien líneas, y Matías cree que a mano le habría tomado 6 o 7 horas.
- 01:19:48Probando el árbolCon max depth 10 y mínimo 5 por split, el árbol propio logra accuracy 0.91 en test. Llega un raid de Aníbal.
- 01:21:51GBM y árboles ensembleRodo resume lo visto y Matías responde sobre LightGBM, XGBoost y GBM: son métodos basados en árboles pero se construyen distinto, con boosting de gradiente.
- 01:23:33Overfitting y variablesUn árbol sin control memoriza el dataset en vez de aprender el patrón. Sirve para explorar qué variables importan, porque las de los primeros cortes suelen ser las más informativas.
- 01:26:16Ejemplo de sobreajusteSe comparan un árbol poco profundo y uno muy profundo: el profundo logra accuracy 1.0 en train pero baja en test. Los límites se eligen con búsqueda de hiperparámetros.
- 01:28:48Bootstrap y baggingSe entrenan muchos árboles, cada uno con una muestra con reemplazo del dataset, y se promedian. Con 455 filas, un árbol vio unas 294 únicas y dejó unas 161 fuera (out of bag), cerca de un tercio.
- 01:34:23Features aleatoriasCada árbol solo puede usar un subconjunto aleatorio de columnas, típicamente la raíz del total (raíz de 30, unas 5 o 6). Así los árboles son distintos entre sí.
- 01:36:17Votación y fitLa predicción final es el voto mayoritario de los árboles. El fit repite bootstrap, selección de features y entrenamiento del árbol tantas veces como árboles haya.
- 01:37:54Cuántos árboles usarMás árboles reducen el overfitting al promediar, pero con ganancias decrecientes y más tiempo de cómputo. Rodo explica que el promedio neutraliza el ruido, y que el overfitting también viene de los datos.
- 01:43:33Resultados y sklearnCon 20 árboles y profundidad 10, el random forest propio supera al árbol solo (0.92). Con sklearn bastan unas 20 líneas y rinde un poco mejor, posiblemente por usar probabilidades y manejar mejor los empates.
- 01:45:43Cuándo elegir Random ForestMatías lo prefiere como primera aproximación por su simpleza, buen rendimiento e importancia de variables directa. Los métodos de gradiente rinden algo más pero requieren más tuneo, y entre un modelo simple y uno apenas mejor elige el simple.
- 01:50:29Por qué entender teoríaQuien solo invoca 20 líneas de código no puede justificar decisiones sobre hiperparámetros. El código lo puede escribir un LLM, pero hay que saber leerlo y evaluarlo.
- 01:52:41CierreMatías quiere traer más algoritmos clásicos (regresión logística, XGBoost, SVM, clustering, redes básicas) y considera la entropía y la separación como la idea central. Cierra diciendo que en las empresas muchas veces basta un clasificador clásico.