Los Random Forest (o bosques aleatorios) son un algoritmo de aprendizaje automático supervisado basado en árboles de decisión, pero mejorado gracias a la combinación de muchos árboles. Su objetivo es hacer predicciones más precisas, robustas y menos propensas al sobreajuste que un único árbol.
🌳 ¿Cómo funciona un Random Forest?
- Creación de múltiples árboles de decisión (forest):
- En lugar de construir un solo árbol, el Random Forest construye muchos árboles (por ejemplo, 100 o 500).
- Cada árbol se entrena con una muestra aleatoria del conjunto de datos original (con reemplazo, es decir, bootstrap).
- Selección aleatoria de características:
- Cuando un árbol va a hacer una división en un nodo, no mira todas las características, sino que selecciona un subconjunto aleatorio.
- Esto aumenta la diversidad entre los árboles y mejora la generalización.
- Votación o promedio de predicciones:
- Para clasificación, cada árbol "vota" por una clase, y gana la clase más votada.
- Para regresión, se promedia la predicción de todos los árboles.
🎯 Ejemplo simple (clasificación)
Supongamos que quieres predecir si un cliente comprará o no un producto.
- Entrenas 100 árboles, cada uno con diferentes subconjuntos de datos y características.
- Un cliente nuevo llega. Cada árbol da su predicción (sí o no).
- El resultado final será el que tenga más votos.
⚖️ Ventajas del Random Forest
✅ Reduce el sobreajuste comparado con un solo árbol
✅ Funciona bien en la mayoría de los problemas (clasificación y regresión)
✅ Puede manejar datos faltantes y variables categóricas o numéricas
✅ Da una medida de importancia de las variables (feature_importances_)
⚠️ Desventajas
❌ Menos interpretables que un solo árbol
❌ Consumen más recursos (RAM/tiempo)
❌ El entrenamiento puede ser más lento con muchos árboles o muchos datos
🔧 Parámetros clave en Scikit-learn
from sklearn.ensemble import RandomForestClassifier
modelo = RandomForestClassifier(
n_estimators=100, # número de árboles
max_depth=None, # profundidad máxima del árbol
max_features='sqrt', # número de features aleatorios por split
bootstrap=True, # si usar muestreo con reemplazo
random_state=42
)