
Sesión 4 — Random Forest: la sabiduría del bosque y la historia del Taller CUTLER
En la Sesión 2 entrenamos un árbol de decisión único, y vimos cómo hacía sus preguntas paso a paso para clasificar tumores. Pero un solo árbol tiene un punto débil: es muy sensible a los datos con los que ha aprendido. Si cambiáramos ligeramente un par de pacientes del entrenamiento, las preguntas del árbol podrían cambiar por completo.
Hoy damos el salto a uno de los algoritmos más potentes y utilizados de la inteligencia artificial: Random Forest (bosque aleatorio).
De un solo médico a un comité de expertos
Si tuvierais que tomar una decisión médica importante, ¿os fiaríais del criterio de un solo doctor, o preferiríais pedir la opinión a un comité de 100 médicos independientes y decidir por mayoría?
Eso es exactamente un Random Forest: un conjunto (ensemble) de decenas o cientos de árboles de decisión independientes que votan entre sí.
La historia de Adele Cutler
Este algoritmo lo publicaron en 2001 Leo Breiman y Adele Cutler, profesora emérita de Estadística en Utah State University y coautora de Random Forest junto con él (la marca “Random Forests” está registrada a nombre de los dos). En su honor, nuestro taller de ciencia de datos en MontesSTEAM / IES Monterroso lleva el nombre de Taller CUTLER: el algoritmo de la Sesión 4 nace directamente del árbol de decisión de la Sesión 2, igual que el nombre del proyecto amplía el del propio árbol.
¿Cómo funciona el “bosque” por dentro?
Para que un comité de 100 expertos funcione, los médicos no pueden ser copias exactas unos de otros — necesitan diversidad. Random Forest consigue esa diversidad con dos reglas de aleatoriedad:
- Pacientes al azar (bagging): cada árbol del bosque se entrena con un subconjunto aleatorio distinto de los pacientes de entrenamiento.
- Mediciones al azar: cuando un árbol va a hacer una pregunta, no mira las 30 mediciones a la vez, sino solo un pequeño grupo elegido al azar.
Cuando llega un paciente nuevo del conjunto de prueba, los 100 árboles emiten su diagnóstico. Si 85 árboles votan “maligno” y 15 votan “benigno”, la decisión final del bosque es maligno.
Entrenando el bosque en scikit-learn
Pasar de un árbol a un bosque de 100 árboles solo requiere cambiar el nombre del modelo:
from sklearn.ensemble import RandomForestClassifier
# 1. Crear el bosque con 100 árboles de decisión
bosque = RandomForestClassifier(n_estimators=100, random_state=42)
# 2. Entrenar a todos los árboles a la vez
bosque.fit(X_train, y_train)
# 3. Evaluar la exactitud en el conjunto de prueba
exactitud_bosque = bosque.score(X_test, y_test)
print(f"Exactitud del Random Forest en el conjunto de prueba: {exactitud_bosque:.2%}")
[COMPLETAR CON VUESTROS DATOS REALES: exactitud del árbol de la Sesión 2 = ___ | exactitud del Random Forest = ___]

Comparando el árbol con el bosque
Recuperamos el informe que aprendimos a generar en la Sesión 3 para ver si el comité de árboles mejora a nuestro médico individual:
from sklearn.metrics import classification_report
y_pred_bosque = bosque.predict(X_test)
print("--- INFORME DEL RANDOM FOREST ---")
print(classification_report(y_test, y_pred_bosque, target_names=cancer.target_names))
Comparad la exhaustividad (recall) de la fila malignant con la que obtuvisteis en la Sesión 3 con el árbol único: ¿ha subido, ha bajado, o se queda igual? No hay una respuesta garantizada de antemano — por eso lo comprobamos con los datos, en vez de darlo por hecho.
[COMPLETAR CON VUESTROS DATOS REALES: recall de malignant con el árbol de la Sesión 3 = ___ | con el Random Forest = ___]

¿Qué mediciones celulares importan más?
Un árbol individual os muestra sus preguntas; un Random Forest os regala algo más: la importancia de las variables (feature importances) — qué porcentaje de responsabilidad ha tenido cada una de las 30 mediciones en los diagnósticos finales.
import pandas as pd
import matplotlib.pyplot as plt
# Crear una serie con la importancia de cada variable
importancias = pd.Series(bosque.feature_importances_, index=cancer.feature_names)
# Dibujar las 5 mediciones más determinantes
plt.figure(figsize=(10, 5))
importancias.nlargest(5).plot(kind='barh', color='skyblue')
plt.title("Las 5 mediciones celulares más críticas según el Random Forest")
plt.xlabel("Importancia relativa")
plt.gca().invert_yaxis() # Poner la más importante arriba
plt.show()
Cuanto más larga es la barra, más ha pesado esa medición en las decisiones del bosque; las importancias de las 30 mediciones suman entre todas el 100%, así que una barra grande quiere decir, literalmente, que esa medición concentra buena parte de esa responsabilidad. Es habitual que mediciones como worst concave points (los puntos cóncavos más pronunciados del núcleo) o worst area encabecen la lista — comprobad cuáles salen en vuestro caso, porque puede variar según los datos.

Qué viene después
Hemos construido un modelo mucho más robusto que un solo árbol, entrenado con las mismas herramientas que se usan en ciencia de datos real. Con esto cerramos el recorrido decidido para este taller — el árbol de la Sesión 2 nos enseñó a clasificar, la Sesión 3 nos enseñó a leer los errores con criterio médico, y hoy hemos visto por qué “muchos árboles votando” da, casi siempre, un resultado más fiable que uno solo.




