8 Modelo Random Forest

Objetivos de Aprendizaje

Al finalizar la lectura de este documento el estudiante estará en capacidad de:

  • Explicar en sus propias palabras la utilidad de un algoritmo de Random Forest.
  • Aplicar un algoritmo de clasificación de Random Forest en R.
  • Calcular métricas de la bondad de ajuste de un modelo de clasificación estimado por medio de un algoritmo de Random Forest.
  • Encontrar los pronósticos de clasificación de un algoritmo de clasificación de Random Forest.

8.1 Introducción

Hasta ahora, hemos visto 4 métodos para realizar la tarea de clasificación, dos correspondientes al campo estadístico (Modelo Logit en el Capítulo 3) y Naive Bayes en el Capítulo 5) y dos al campo de la inteligencia artificial (\(kNN\) en el Capítulo 6 y Árboles de clasificación en el Capítulo 7). Ahora exploraremos otro método que parte de la idea vista en el capítulo anterior sobre los árboles de clasificación.

Random Forest es una técnica de aprendizaje automático que se basa en la combinación de múltiples árboles de decisión durante el proceso de entrenamiento. Cada árbol de decisión en el bosque se entrena de manera independiente utilizando una muestra aleatoria de los datos de entrenamiento y una selección aleatoria de las características. Luego, para realizar una predicción, el Random Forest promedia las predicciones de todos los árboles individuales56. Es decir, esta aproximación se basa en la idea que “combinar la sabiduría de muchos árboles” (¡cientos o miles!) es mejor que un solo árbol para obtener una predicción más confiable. La idea detrás de esta aproximación es que la diversidad entre los árboles puede llevar a descubrir patrones más sutiles.

A pesar de que un bosque puede contener cientos de árboles, “cultivar” un bosque de árboles de decisión es quizás incluso más fácil que crear un solo árbol altamente afinado. En la siguiente sección discutiremos la intuición detrás del algoritmo.

8.2 Detalles del algoritmo

Para construir un modelo de Random Forest se emplea una técnica denominada bagging. El bagging es una técnica de ensamblaje que combina múltiples modelos de aprendizaje automático entrenados en diferentes conjuntos de datos de entrenamiento para mejorar la precisión y la robustez del modelo final. En este contexto, el bagging se utiliza para combinar los resultados de múltiples árboles de decisión entrenados en conjuntos de datos de entrenamiento diferentes. El proceso de bagging implica entrenar múltiples árboles de decisión con diferentes muestras de datos de entrenamiento y luego “promediar” las predicciones de todos los árboles para obtener la predicción final del Bosque Aleatorio. Al combinar los resultados de múltiples árboles de decisión entrenados en conjuntos de datos diferentes, el bagging ayuda a reducir el overfitting y a mejorar su capacidad para generalizar a individuos que no se han observado aún.

Esta técnica implica que los árboles de decisión se entrenan en subconjuntos de muestras aleatorias. Las muestras aleatorias se construyen empleando la técnica de bootstraping en la que se crean muestras de datos aleatorias con reemplazo del conjunto de datos original. En la Figura 8.1 se presenta una ilustración de cómo funciona la técnica de bootstraping. Partimos de una muestra de tamaño \(n\) (recuadro superior gris de la Figura 8.1); cada individuo está representado por un circulo de diferente color. Posteriormente se generan muchas muestras (\(Nb\)) aleatorias (cada una de tamaño \(n\)) a partir de la muestra original. En cada una de las muestras de bootstrapping típicamente se repiten algunos individuos (punto de colores) porque se emplea un re-muestreo con reposición57.


Figura 8.1: Muestras generadas por bootstraping

Muestras generadas por bootstraping


Emplear las muestras de bootstraping ayuda a reducir la posible “relación” entre los diferentes árboles que se generen y a mejorar la diversidad del bosque. Luego, todos los árboles “votan” y la mayoría será la clase a la que pertenece la observación.

Además del re-muestreo por bootstrap, el Random Forest también utiliza una selección aleatoria de variables (en este contexto se emplea más comúnmente el término características) en cada nodo de cada árbol. Esto ayuda a garantizar que cada árbol se especialice en diferentes aspectos de los datos, lo que nuevamente mejora la diversidad del bosque.

Una gran ventaja del bagging frente a los árboles individuales es que disminuye la variación del modelo. Los árboles individuales son muy propensos al overfitting y son muy sensibles al ruido en los datos. Si los árboles individuales no están correlacionados, combinarlos con el bagging los hará más robustos sin aumentar el sesgo.

8.3 Implementación en R

Para realizar un ejemplo práctico en R (R Core Team, 2023) emplearemos la misma base de datos que empleamos en los capítulos anteriores. Recuerda que la pregunta de negocio que queremos responder en este caso es: ¿se puede construir un modelo que pueda predecir si un cliente adquirirá o no el producto bancario?

Carga el working space que guardaste en el Capítulo 7. Para el detalle del pre-procesamiento de la muestra ver el Capítulo 3.

Podemos emplear la función randomForest() del paquete randomForest (Liaw & Wiener, 2002). Esta función en su forma más básica solo requiere de la fórmula y la base de datos.

Hay que recordar que, debido a la naturaleza aleatoria del bosque, los resultados pueden variar ligeramente cada vez que crea el bosque. Por eso es importante emplear una semilla para la generación de números aleatorios con la función set.seed() para fijar la semilla. Adicionalmente, recordemos que en el objeto formula_tree tenemos la fórmula en la que la variable y depende de todas las características disponibles. En este caso el código será:

#Cargar Paquete
library(randomForest)
#Fijar la semilla del número aleatorio
set.seed(123456)
# Entrenar el modelo de Random Forest empleando la fórmula que 
# incluye todas las variables explicativas en la base de datos

RF_res <- randomForest(formula = y ~ ., data= datos_dummies_est)

RF_res
## 
## Call:
##  randomForest(formula = y ~ ., data = datos_dummies_est) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 7
## 
##         OOB estimate of  error rate: 10.3%
## Confusion matrix:
##        no  yes class.error
## no  28550  635  0.02175775
## yes  2760 1005  0.73306773

Ahora, generemos las predicciones para la muestra de evaluación a partir del modelo de Random Forest que acabamos de entrenar. Para esto podemos emplear la función predict().

# Generar las predicciones fuera de muestra a partir del modelo Random Forest

pred_RF_res <- predict(RF_res, newdata = datos_dummies_eval, type = "class")

Ahora evaluemos el comportamiento fuera de muestra del modelo Random Forest empleando la función confusionMatrix(), como lo hemos realizado en los capítulos anteriores.

mo_RF <- confusionMatrix(pred_RF_res, y_eval, positive = "yes")
mo_RF
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   no  yes
##        no  7217  652
##        yes  146  223
##                                           
##                Accuracy : 0.9031          
##                  95% CI : (0.8965, 0.9094)
##     No Information Rate : 0.8938          
##     P-Value [Acc > NIR] : 0.002826        
##                                           
##                   Kappa : 0.3154          
##                                           
##  Mcnemar's Test P-Value : < 2.2e-16       
##                                           
##             Sensitivity : 0.25486         
##             Specificity : 0.98017         
##          Pos Pred Value : 0.60434         
##          Neg Pred Value : 0.91714         
##              Prevalence : 0.10622         
##          Detection Rate : 0.02707         
##    Detection Prevalence : 0.04479         
##       Balanced Accuracy : 0.61751         
##                                           
##        'Positive' Class : yes             
## 

Ahora podemos comparar esta aproximación con lo obtenido con los otros modelos empleados hasta ahora. En el Cuadro 8.1 se presentan las métricas de todos las aproximaciones estudiadas hasta ahora.

Cuadro 8.1: Métricas de comparación para todos los modelos de clasificación
Accuracy Sensitivity Specificity Precision F1
Modelo Logit 0.846 0.618 0.873 0.366 0.460
Naive Bayes 0.854 0.472 0.899 0.357 0.407
kNN 0.897 0.167 0.984 0.551 0.256
RT_gini_500obs 0.907 0.203 0.991 0.727 0.318
RT_gini_podado 0.909 0.254 0.986 0.689 0.371
Random Forest 0.903 0.255 0.980 0.604 0.359
Fuente: elaboración propia.

En este caso el Random Forest no presenta un mejor comportamiento que los árboles individuales, a excepción de la métrica de Especificidad. Una de las limitaciones de esta aproximación es que no podemos graficar el bosque.

Finalmente, guarda el espacio de trabajo para ser empleado en el siguiente capítulo.

8.4 Comentarios Finales

En este capítulo hemos explorado el método de aprendizaje supervisado comúnmente empleado en las tareas de clasificación llamado Random Forest, que es el entrenamiento en diferentes muestras de árboles de decisión. Ya sabemos que a priori es imposible saber si este método será mejor que el estadístico u otros de aprendizaje de máquina y por eso es común que se empleen diferentes aproximaciones y se comparen. No te dejes confundir por el resultado específico obtenido en el ejercicio de este capítulo. Este resultado es específico a esta muestra y la semilla aleatoria empleada.

Las aplicaciones de estos métodos de clasificación son muchas en el mundo de los negocios y definitivamente estos modelos son necesarios en la caja de herramientas de un científico de datos.

Referencias

Liaw, A., & Wiener, M. (2002). Classification and regression by randomForest. R News, 2(3), 18–22. https://CRAN.R-project.org/doc/Rnews/
R Core Team. (2023). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/

  1. En el caso de la clasificación, se utiliza un voto mayoritario.↩︎

  2. Note que si no se repitieran los individuos (puntos de color) de la muestra original, entonces tendríamos la muestra original. Esto no tendría sentido, pues el resultado del árbol sería el mismo.↩︎