Todo lo que necesitas es XGBoost 🚀

XGBoost revolucionó el Machine Learning en 2016 y a día de hoy, ni tan siquiera las redes neuronales han logrado superarlo en aplicaciones con datos tabulares.

Sigue siendo el Rey 👑.

XGBoost is all you need.

En este tutorial, vamos a analizar XGBoost al detalle para que la próxima vez que lo utilices no solo entiendas cómo funciona, sino que aprendas a exprimirlo a tope.

Hablaremos de:

  • Qué hace que XGBoost sea tan especial.
  • Cómo funciona y por qué supera a otros métodos de ensemble.
  • Hiperparámetros clave y cómo afinarlos.
  • Un caso práctico paso a paso en Python que te llevará de la teoría a la acción.

Ya sea que estés empezando en el mundo del Machine Learning o quieras dominar XGBoost para subir de nivel, este tutorial tiene todo lo que necesitas.

¡Acomódate que vamos a exprimir el poder de este algoritmo al máximo!

Boosting en Machine Learning

Ya hemos hablado de las técnicas de ensemble en el podcast y en el tutorial de Random Forest.

Las técnicas de ensemble son una forma de combinar varios modelos para obtener un resultado más preciso que el de cualquier modelo individual. Me gusta verlo como el comodín del público.

Dentro de estas técnicas está el Boosting.

Mientras que otros métodos como Bagging (por ejemplo, Random Forest) se centran en reducir la varianza mediante la combinación de múltiples modelos independientes, Boosting trabaja en cadena.

Cada modelo se entrena para corregir los errores del modelo anterior, poniendo más atención en las observaciones difíciles.

El objetivo es transformar varios modelos débiles en uno muy potente.

¿Y dónde entra XGBoost?

XGBoost es una implementación avanzada de Gradient Boosting que ha ganado popularidad por su rendimiento superior en competiciones de machine learning como Kaggle.

¿Qué es XGBoost?

XGBoost es un modelo de Machine Learning que combina árboles de decisión y técnicas de ensemble.

Así que ya tenemos sus dos características principales:

  • Utiliza el metodo de boosting. Es decir, entrena de manera iterativa varios modelos base, de manera que el objetivo de cada modelo es corregir los errores del anterior.
  • Estos modelos base son árboles de decisión.

XGBoost está basado en el modelo Gradient Boosting pero podríamos decir que es una versión vitaminada (💪), de ahí que XGBoost venga de Extreme Gradient Boosting.

¿Cómo funciona el algoritmo XGBoost?

Para entender cómo funciona XGBoost antes vamos a ver rápidamente el método de Gradient Boosting:

Cómo funciona Gradient Boosting

Te voy a explicar brevemente cómo funciona el algoritmo Gradient Boosting.

Presta atención porque los principios de XGBoost son los mismos 👀.

  1. Tenemos un primero árbol de decisión que comienza haciendo una predicción inicial para todo el conjunto de datos.
  2. Una vez obtenidas las primeras predicciones, comparamos cada predicción con el valor real para evaluar cuánto se equivocó el modelo. El residuo es el "error" que el modelo necesita corregir. Es una forma de guiar el proceso de aprendizaje, ya que los árboles posteriores se entrenan específicamente para reducir esos errores residuales.
    • En problemas de regresión: el residuo es la diferencia entre el valor de la etiqueta y lo que predijo el modelo.
    • En problemas de clasificación, donde el modelo predice probabilidades, el residuo refleja cuánto debe ajustarse esa probabilidad para acercarse al valor real.
      • 1 si la observación pertenece a la clase positiva.
      • 0 si la observación no pertenece a la clase positiva.
  3. Creamos un nuevo árbol de decisión que aprenda a predecir los errores del modelo anterior. Este árbol se enfoca en ajustar las áreas donde el modelo anterior falló.
  4. Combinamos las predicciones del modelo anterior con las del nuevo árbol (ponderadas por una tasa de aprendizaje) para mejorar la predicción global.
  5. Repetimos el cálculo de errores, la construcción de un nuevo árbol, y la actualización de las predicciones hasta alcanzar un número de iteraciones o un nivel de error aceptable.

Diferencias de XGBoost con Gradient Boosting

Ahora que ya sabemos la base sobre la que se construye XGBoost, vamos a por la parte “vitaminada” 🚀:

  • XGBoost incorpora de serie técnicas de regularización L1y L2 para evitar el sobreajuste del modelo. Estas técnicas de regularización añaden un término directamente a la función de coste que es la que el algoritmo intenta optimizar por lo que podríamos decir que XGBoost nace como una versión regularizada de Gradient Boosting para reducir el overfitting.
  • XGBoost fue diseñado para ser rápido ⚡️.
    • Soporta la paralelización: La idea de boosting no va muy de la mano con los cálculos en paralelo ya que cada nuevo árbol de XGBoost se entrena iterativamente sobre los errores del árbol anterior. Sin embargo, XGBoost ordena y comprime los datos en bloques de manera que estos bloques puedan ser procesados en paralelo en distintas máquinas consiguiendo que el entrenamiento sea más rápido.
      • Estos bloques pueden comprimirse para reducir el espacio que ocupan los datos en memoria. Durante el entrenamiento, los bloques comprimidos se leen y descomprimen solo cuando es necesario, lo que optimiza el uso de memoria y acelera el procesamiento porque se reducen las operaciones de lectura y escritura en memoria
      • Además, XGBoost también realiza partición de bloques (block sharding), dividiendo los bloques comprimidos entre las diferentes unidades de procesamiento disponibles. Cada núcleo o máquina trabaja con un subconjunto del dataset, entrenando de forma independiente y luego combinando los resultados.
    • Hace uso de la memoria caché:
      • XGBoost asigna un buffer interno optimizado en la caché para almacenar datos relevantes que se usan frecuentemente durante el entrenamiento, como estadísticas de gradientes.
      • Además, antes de que se necesiten los datos para un cálculo, XGBoost los carga proactivamente desde la memoria principal al buffer interno de la caché, lo que permite que los cálculos ocurran sin esperar a que los datos lleguen desde la memoria más lenta.
    • ¿Recuerdas que en este tutorial vimos que una de las partes más importantes de los árboles de decisión consistía en encontrar los mejores puntos en los que dividir los datos? Pues XGBoost propone una forma más eficiente al aproximar las mejores divisiones utilizando cuantiles.
      • Un cuantil divide los datos en intervalos iguales según sus valores y XGBoost utiliza cuantiles para reducir el número de divisiones a considerar en lugar de evaluar todos los posibles valores de división.
    • XGBoost utiliza matrices dispersas (sparse matrices) para almacenar datos. Estas matrices solo registran los valores no nulos o no cero, ignorando los demás. Esto tiene dos grandes ventajas:
      1. Ahorro de memoria: Las matrices dispersas ocupan menos espacio, ya que no almacenan los ceros explícitamente.
      2. Optimización en la búsqueda de splits: El algoritmo que veíamos antes para aproximar el mejor punto de división está diseñado para trabajar directamente con matrices dispersas. Esto le permite:
        • Saltarse los valores 0/nulos durante la búsqueda de puntos de división.
        • Encontrar divisiones óptimas más rápido que los métodos estándar.
  • XGBoost es capaz de gestionar los valores faltantes automáticamente ya que, durante el proceso de división de cada rama, XGBoost envía las observaciones faltantes al lado del nodo (izquierdo o derecho) que maximiza la ganancia de información o reduce la impureza. Gracias a esto, evitamos descartar los valores faltantes y no perdemos información.

🔑 Como ves, XGBoost es más rápido y generaliza mejor ya que incorpora regularización de serie.

Hiperparámetros de XGBoost explicados

Igual que vimos en el caso del algoritmo de Random Forest, XGBoost también incorpora los hiperparámetros de los árboles de decisión como la profundidad del árbol o el número de observaciones que tiene que haber para que podamos hacer una nueva división del árbol.

Por otro lado, al ser XGBoost una versión vitaminada del algoritmo Gradient Boosting, también hereda sus hiperparámetros y, luego, tiene sus propios hiperparámetros (como los relacionados con la regularización).

A continuación te explico algunos de los principales hiperparámetros de XGBoost, pero ten en cuenta que no son los únicos. Si quieres ver una lista extensiva de los hiperparámetros de XGBoost puedes consultar la documentación oficial.

  • Hiperparámetros relacionados con la arquitectura del modelo Estos hiperparámetros controlan cómo se construyen los árboles en el ensemble:
    • n_estimators: Número total de árboles en el modelo.
    • learning_rate: Tasa de aprendizaje que ajusta la contribución de cada árbol.
    • max_depth: Profundidad máxima de los árboles.
    • min_child_weight: Peso mínimo requerido en un nodo hoja para que pueda dividirse.
    • gamma (o min_split_loss): Reducción mínima de pérdida necesaria para permitir una división.
NombreValor predeterminadoRangoEfectoNotas/Consejos
n_estimators100[1, inf)Aumentar este valor puede mejorar los resultados con conjuntos de datos grandes.Número de árboles en el conjunto (ensemble).
learning_rate0.3(0, inf)Disminuir este valor ayuda a prevenir el sobreajuste (overfitting).Reduce los pesos de los árboles en cada ronda de boosting.
max_depth6[0, inf)Disminuir este valor ayuda a prevenir el sobreajuste (overfitting).La profundidad máxima del árbol.
gamma (alias: min_split_loss)0[0, inf)Incrementar este valor ayuda a prevenir el sobreajuste (overfitting).Valores bajos, generalmente menores a 10, son estándar.
min_child_weight1[0, inf)Incrementar este valor ayuda a prevenir el sobreajuste (overfitting).El mínimo de pesos requeridos para que un nodo se divida.
  • Hiperparámetros relacionados con el muestreo Estos hiperparámetros introducen aleatoriedad en el entrenamiento para prevenir el sobreajuste:
    • subsample: Fracción de filas del conjunto de datos que se utilizan en cada árbol.
    • colsample_bytree: Porcentaje de características (columnas) seleccionadas aleatoriamente para cada árbol.
    • colsample_bylevel: Porcentaje de características seleccionadas para cada nivel del árbol.
    • colsample_bynode: Porcentaje de características seleccionadas para cada nodo.
NombreValor predeterminadoRangoEfectoNotas/Consejos
subsample1(0, 1]Disminuir este valor ayuda a prevenir el sobreajuste (overfitting).Limita el porcentaje de filas de entrenamiento utilizadas en cada ronda de boosting.
colsample_bytree1(0, 1]Disminuir este valor ayuda a prevenir el sobreajuste (overfitting).Limita el porcentaje de columnas de entrenamiento utilizadas en cada ronda de boosting.
colsample_bylevel1(0, 1]Disminuir este valor ayuda a prevenir el sobreajuste (overfitting).Limita el porcentaje de columnas utilizadas para cada nivel de profundidad del árbol.
colsample_bynode1(0, 1]Disminuir este valor ayuda a prevenir el sobreajuste (overfitting).Limita el porcentaje de columnas evaluadas para dividir los nodos.
  • Hiperparámetros relacionados con la regularización Estos ayudan a controlar el sobreajuste penalizando la complejidad del modelo:
    • lambda: Regularización L2 (Ridge) aplicada a los coeficientes del modelo.
    • alpha: Regularización L1 (Lasso) aplicada a los coeficientes del modelo.
NombreValor predeterminadoRangoEfectoNotas/Consejos
lambda1[0, inf)Incrementar este valor ayuda a prevenir el sobreajuste (overfitting).Regularización L2 de los pesos.
alpha0[0, inf)Incrementar este valor ayuda a prevenir el sobreajuste (overfitting).Regularización L1 de los pesos.
  • Hiperparámetros relacionados con datos desbalanceados Controlan el comportamiento del modelo en conjuntos de datos con clases desbalanceadas:
    • scale_pos_weight: Peso relativo entre las clases positivas y negativas (útil en problemas de clasificación binaria).
    • max_delta_step: Restringe el tamaño de las actualizaciones en problemas desbalanceados.
NombreValor predeterminadoRangoEfectoNotas/Consejos
scale_pos_weight1(0, inf)Se utiliza para equilibrar conjuntos de datos desbalanceados.
max_delta_step0[0, inf)Incrementar este valor ayuda a prevenir el sobreajuste (overfitting).Solo recomendado para conjuntos de datos muy desbalanceados.

Ejemplo de clasificación con XGBoost en Python

¡Enhorabuena por llegar hasta aquí! 👏👏👏

Te he soltado un buen turrón sobre XGBoost.

Pero ya estás ready para la parte práctica.

Aquí empieza la chicha… 🥷

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Entrenamiento de XGBoost

Con nuestro dataset ya preparado, es hora de pasar a la acción: entrenar el modelo XGBoost.

Aquí veremos cómo configurar el algoritmo para aprovechar al máximo sus capacidades y adaptarlo a las características de nuestro problema.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Ajuste de hiperparámetros de XGBoost

Si te fijas, hasta el momento no hemos tocado ni un solo hiperparámetro de XGBoost.

Hemos usado los que vienen por defecto y aun así hemos conseguido una precisión de 0.79 😌

No está mal.

Peeeero sabemos que XGBoost tiene mucho más potencial.

Ajustar los hiperparámetros nos permite sacar el máximo rendimiento del modelo, adaptándolo específicamente a las características de nuestros datos.

Desde la profundidad de los árboles hasta la tasa de aprendizaje, cada parámetro influye en cómo aprende el modelo y en su capacidad para generalizar correctamente.

En esta sección, te voy a enseñar cómo buscar la combinación óptima de hiperparámetros usando RandomizedSearchCV, una función de Scikit learn que simplifica el proceso y ahorra tiempo al explorar varais confirguracoines de hiperparámetros al azar y quedarse con las mejores.

Al final, la única manera de saber qué valor asignar a un hiperparámetro para mejorar el rendimiento del modelo es: probarlo.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Con el ajuste de hiperparámetros hemos mejorado la precisión del modelo a 0.83 🎉

¡Enhorabuena!

Usar GPUs con XGBoost para acelerar el entrenamiento 🚀

En el dataset que hemos usado para este tutorial no ha hecho falta porque era pequeñito... pero si estás trabajando con datasets grandes, el tiempo de entrenamiento puede ser muuuuuy laaargo 👵🏻⏳...

Por suerte, XGBoost ofrece soporte nativo para GPUs, lo que permite acelerar significativamente el entrenamiento (especialmente si vas a construir un XGBoost con muchos árboles...).

En esta sección, aprenderás cómo configurar XGBoost para aprovechar la potencia de una GPU y no sentir como envejeces mientras entrenas tu modelo.

¿Cómo habilitar el uso de GPUs en XGBoost?

Habilitar el uso de GPUs con XGBoost es muy sencillo.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

XGBoost VS Random Forest

Tanto Random Forest como XGBoost son algoritmos muy potentes para tareas de machine learning y ambos están basados en lo mismo: árboles de decisión y técnicas de ensemble.

Sin embargo, funcionan de manera muy diferente.

Random Forest es un algoritmo basado en bagging, donde se entrenan múltiples árboles de decisión independientes en subconjuntos del dataset.

La predicción final se obtiene combinando las salidas de todos los árboles por lo que el rendimiento del modelo está limitado por el rendimiento de los árboles que componen el bosque.

Además, Random Forest puede sobreajustarse si la mayoría de los árboles reciben subconjuntos de datos similares o si se permiten árboles muy profundos. Aunque el bagging ayuda a mitigar el overfitting, el riesgo aumenta con datos mal balanceados o hiperparámetros mal ajustados.

Por otro lado, XGBoost está basado en boosting y los árboles se construyen secuencialmente. La clave es que cada árbol nuevo intenta corregir los errores de los árboles anteriores, dando más peso a las observaciones mal predichas por lo que el rendimiento del modelo va mejorando.

En cuanto al overfitting, hemos visto que XGBoost incluye mecanismos de regularización L1 y L2 lo que evita la construcción de árboles innecesariamente profundos y el sobreajuste.

Sin embargo, Random Forest es más fácil de ajustar y de comprender ya que no tiene tantos hiperparámetros críticos como XGBoost.

CriterioXGBoostRandom Forest
Datos complejosIdeal para detectar patrones complejos y aprender de errores iterativamente.Menos flexible en casos avanzados.
Facilidad de usoRequiere ajuste fino, ya que tiene más hiperparámetros críticos.Más fácil de ajustar, ideal para tareas estándar y rápidas.
EscalabilidadCompatible con GPUs para grandes volúmenes de datos.Se adapta bien a entornos distribuidos con menor esfuerzo.

Accede a todo el contenido premium

Ya no necesitas pagar cientos de euros por un Bootcamp para convertirte en ninja de los datos. Por solo 17€/mes (o menos 🤯), obtén acceso al podcast premium, a todos los tutoriales y a los resúmenes de los libros más top sobre Machine Learning y Ciencia de datos y aprende a tu ritmo.
¡Empieza ahora!
Copyright © 2025  · Datos 🥷 · Todos los derechos reservados