Introduccion a LightGBM
Tags: datascience, machinelearning, tutorial, python
Published: 2020-08-29 17:41:48

# ¿Que es LightGBM?

> GBM = Gradient Boosted Machines

Es un framework que usa algoritmos basados en arboles con la eficiencia como objetivo principal.

Puede ser utilizado tanto para clasificación como para regresión (mas info en el parámetro `objective`).

# ¿Cómo funciona?

A diferencia de XGBoost (entre otros) que utiliza algoritmos basados en la clasificación previa, LightGBM usa algoritmos basados en histogramas (es decir, que agrupa los valores de atributos continuos en bins discretos) para agilizar el entrenamiento y reducir el uso de memoria. 

Ademas, esta optimizado para que el arbol crezca en la dirección de los mejores nodos (ayudando a una mejor administración de memoria).

![Imagen](https://raw.githubusercontent.com/ruizleandro/Articles/master/Decision%20Tree%20Graph.png?token=AHE2JKZZVRZVIMLYJ22CKRK7JAWOC)

# (algunos) Parámetros

LightGBM tiene más de 100 parámetros, pero aquí haré un resumen de los más importantes:

1. *max_depth*: Este parámetro previene que los arboles crezcan muy profundo. Los arboles poco profundos tienen menos probabilidad de overfitting. Configurar este parámetro es muy importante si el dataset es pequeño.

2. *num_leaves*: Controla la complejidad del modelo. El valor debe ser menor a 2^`max_depth` para prevenir overfitting. Si se lo ajusta con un valor grande puede aumentar la precisión a riesgo de aumentar el overfitting.

3. *min_data_in_leaf*: Configurar este parámetro con un valor grande puede ayudar a prevenir que los arboles crezcan demasiado profundo. Este es otro parámetro que ayuda a controlar el overfitting del modelo. Si es un valor demasiado grande puede provocar underfitting.

4. *max_bin*: como ya vimos, LightGBM agrupa los valores de atributos continuos en bins discretos usando histogramas. Configura `max_bin` para especificar el numero de bins en los que los valores pueden ser agrupados. Un valor bajo puede ayudar a controlar el overfitting y a mejorar la velocidad del entrenamiento, mientras que un valor grande mejora la precisión del modelo.

5. *feature_fraction*: Este parámetro habilita el submuestreo de atributos. `feature_fraction` especifica las fracciones de los atributos que se seleccionaran aleatoriamente en cada iteración. Por ejemplo, `feature_fraction = .75` seleccionará al azar el 75 % de los atributos en cada iteración. Configurar este parámetro puede aumentar la velocidad de entrenamiento y ayuda a prevenir el overfitting. 

6. *bagging_fraction*: `bagging_fraction` especifica las fracciones de los datos que se seleccionaran aleatoriamente en cada iteración. Por ejemplo, `bagging_fraction = .75` seleccionará al azar el 75 % de los datos en cada iteración. Configurar este parámetro puede aumentar la velocidad de entrenamiento y ayuda a prevenir el overfitting. 

7. *num_iteration*: Fija el número de iteraciones de boosting. El valor predeterminado es 100. Para clasificación multi-clase, LightGBM crea `num_class` * `num_iteration` arboles. Configurar este parámetro influencia en la velocidad de entrenamiento.

8. *objective*: Como en XGBoost, LightGBM soporta multiples objetivos. El objetivo predeterminado esta configurado en regresión. Ajusta este parametro para especificar el tipo de tarea que tu modelo quiere llevar a cabo. Para tareas de regresión, las opciones son `regression_l2`, `regression_l1`, `poisson`, `quantile`, `mape`, `gamma`, `huber`, `fair`, o `tweedie`. Para tareas de clasificacion, las opciones son `binary`, `multiclass`, o `multiclassova`. Es importante configurar este parámetro correctamente para evitar resultados impredecibles o baja precision.

---

![GitHub Button](https://dev-to-uploads.s3.amazonaws.com/i/ioehtcgh4mlpfttmutjo.png)
<figure>
  <figcaption>[Link a GitHub](https://github.com/ruizleandro/Loan-Classification-with-LightGBM)</figcaption>
</figure>

# Ejemplo Practico 

En el pasado cree un proyecto usando LightGBM pero esta vez lo voy a utilizar con un dataset diferente.

En este caso estare clasificando a diferentes aplicantes a un préstamo. No voy a hacer un analisis de los datos, directamente iré al desarrollo del modelo.

## Resultados

Luego de una busqueda de parámetros, evalué el modelo y dió estos resultados:

```python
The accuracy of prediction is: 0.9078853557678597
The roc_auc_score of prediction is: 0.9115936285698222
The null accuracy is: 0.653429345501212
```

### Confusion Matrix
![Confusion Matrix](https://dev-to-uploads.s3.amazonaws.com/i/5c85le8shq1rfx29atzo.png)

### Importancia de los atributos
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tusymxbzrzkuh3rrsa67.png)

Como podemos ver, LightGBM es un algoritmo confiable incluso en este dataset de tamaño mediano (46751 filas).