Se desarrolla el algoritmo Gradient Boosting Machine paso a paso con el caso de German Credit Data, empleando los métodos de "early stopping": OOB (out-of-bag estimation) y CV (v-fold cross validation).
Algoritmos empleados: Gradient Boosting Machine (GBM)
El método de boosting, junto con bagging y random forest, es lo que se conoce como métodos de emsemble o métodos combinados. Esto es, utilizan múltiples algoritmos de aprendizaje posibilitando una mejora de las predicciones que los obtenidos mediante algoritmos individuales, como son los árboles de decisión en este caso.
Su extensa utilización dentro del ámbito del machine learning se debe a que uno de los aspectos más negativos de los árboles de decisión es su alta varianza, es decir, son muy sensibles a variabilidad propia de los grupos de entrenamiento, pudiendo reportar resultados muy diferentes en función de las características de las muestras. Una manera de reducir esta varianza es emplear los métodos de emsemble. Sin embargo, estos métodos sufren, a su vez, de una problemática: son difícilmente interpretables, si los comparamos con los árboles de decisión.
La diferencia fundamental entre random forest (visto en otro post) y el gradient boosting machine (GBM) es que los primeros construyen un conjunto de árboles de decisión independientes, mientras que el GBM la construcción de árboles se realiza de manera sucesiva, es decir, cada árbol va mejorando al anterior.
El GBM se fundamenta en la idea de training weak models (entrenamiento de modelos débiles), esto es, mientras que random forest o bagging generan árboles muy profundos, GBM genera árboles que suelen tener entre 1 y 6 niveles de profundidad. Algunas ventajas de este procedimiento son:
La velocidad en la ejecución del algoritmo.
Posibilitar un learn slowly, aprendizaje lento y progresivo, paso a paso.
Facilitar la detección del sobreajuste (overfitting) para el proceso cuando es detectado.
Uno de los aspectos más atractivos del GBM es su alta flexibilidad para ajustar (tuning) los parámetros. Estos son:
n.trees: número de árboles óptimo para el mejor ajuste del modelo.
Profundidad de los árboles.
bag.fraction: proporción de observaciones a ser muestreada en cada árbol
n.minobsinnode: número mínimo de observaciones en cada nodo terminal.
interaction.depth: nodos máximos por árbol.
shrinkage: es el learning rate que controla la velocidad del procesamiento del algoritmo. Valores reducidos permiten controlar el sobreajuste, pero incrementan el tiempo de procesamiento para encontrar el resultado final.
Se recomienda leer:
Boehmke,B.C. Gradient Boosting Machines.
Hernández, F. Gradient Boost.
Ridgeway,G. Generalized Boosted Models: A guide to the gbm package.
Características del caso
El caso empleado en este análisis es el 'German Credit Data', que puede descargarse el dataset original desde UCI. Este dataset ha sido previamente trabajado en cuanto a:
análisis descriptivo
limpieza de anomalías, missing y outliers
peso predictivo de las variables mediante random forest
discretización de las variables continuas para facilitar la interpretación posterior
Por lo que finalmente se emplea en este caso un dataset preparado para iniciar el análisis, que puede descargarse de GitHub.
El objetivo del caso es predecir la probabilidad de que un determinado cliente puede incluir un crédito bancario. La explicación de esta conducta estará basada en toda una serie de variables predictoras que se explicarán posteriormente.
Proceso
1. Entorno
El primer punto tratará sobre la preparación del entorno, donde se mostrará la descarga de las librerías empleadas y la importación de datos.
2. Análisis descriptivo
Se mostrarán y explicarán las funciones empleadas en este paso, dividiéndolas en tres grupos: Análisis inicial, Tipología de datos y Análisis descriptivo (gráficos).
3. Preparación de la modelización
Particiones del dataset en dos grupos: training (70%) y test (30%)
4. Modelización
Por motivos didácticos, se dividirá la modelización de los dos algoritmos en una sucesión de pasos.
Para ver el código en R y los resultados:
En HTML: RPubs
En pdf: GitHub
Comments