Automatización de datos (AutoML), también conocido como machine learning, usando el lenguaje de programación Python y la librería gratuita pycaret. Aplicamos varios modelos de predicción, ajustamos los hiperparámetros, comparamos los modelos según las métricas, guardamos el modelo óptimo final y lo cargamos para su uso en cualquier otro momento.

Instalación de librería pycaret en Python

En primer lugar, necesitaremos instalar la librería pycaret para Python. Podemos hacerlo abriendo una terminal (consola de comandos) y ejecutando el comando:

Se instalará esta librería y la tendremos disponible para su uso en Python.

Si disponemos de docker (podremos instalarlo en Windows como indicamos en este enlace o en Linux en este otro enlace), desplegando de forma rápida un contenedor con Python y pycaret, ejecutando el comando:

Para realizar este artículo hemos usado la opción de docker, que nos permite acceder vía web al contenedor desplegado anteriormente, usando el editor Jupyter, que permite ejecutar código Python y mostrar los resultados formateados en html:

AutoML con Python y pycaret, predicción de datos, ciencia de datos automática

Iniciamos importando la librería y cargando un conjunto de datos de pruebas que incluye la propia librería. En concreto, cargaremos y trabajaremos, a modo de ejemplo, con el conjunto de datos credit, que contiene un historial de créditos solicitados a un banco, indicando si han sido pagados o no:

Devolverá las 5 primeras filas del dataset, pudiendo comprobar los campos que contiene:

  • IDENTIFICACIÓN: código identificativo del cliente.
  • LIMIT_BAL: crédito otorgado en dólares (incluye crédito individual y familiar/suplementario).
  • SEX: género (1 = hombre, 2 = mujer).
  • EDUCATION: nivel de estudios (1 = posgrado, 2 = universidad, 3 = escuela secundaria, 4 = otros, 5 = desconocido, 6 = desconocido).
  • MARRIAGE: estado civil (1 = casado, 2 = soltero, 3 = otros).
  • AGE: edad en años.
  • PAY_0 a PAY_6: estado de amortización de los últimos seis meses.
  • BILL_AMT1 a BILL_AMT6: cantidad económica del estado de cuenta de los últimos seis meses (dólares).
  • PAY_AMT1 a PAY_AMT6: cantidad económica del pago anterior de los últimos seis meses (dólares NT).
  • default: pago por defecto (1 = sí, 0 = no).

Para ver el número de filas y columnas del dataset, ejecutaremos:

Devolverá el número de filas y columnas del conjunto de datos (dataset) escogido para las pruebas:

A continuación, dividiremos los datos en un conjunto de datos nuevo para pruebas (el 95% de los registros) y el 5% restante para entrenar el modelo. Para ello, ejecutaremos el siguiente código Python:

Devolverá:

Datos para el modelo: (22800, 24)
Datos no visible para predicción: (1200, 24)

Teniendo en cuenta que en la variable data quedarán el 95% de los datos para entrenar el modelo (22.800 registros) y en la variable data_unseen quedarán el 5% para pruebas (1.200 registros). Y teniendo en cuenta también que hemos usado el parámetro «random_state=786» como semilla para obtener los registros.

Realizaremos la clasificación para el dataset data (con el 95% de los registros) en base a la columna default, que contiene 1 si el crédito ha sido pagado y 0 en caso contrario:

Nos devolverá todos los datos del setup, con las acciones que aplicará al dataset:

Tendríamos que proceso realiza sobre los datos cada una de las acciones anteriores, para decidir si las generadas automáticamente son suficientes o no. Esta cuestión la dejamos para los expertos en automatización de datos. Para este artículo, dejaremos las acciones generadas como válidas.

Usando la capacidad de pycaret para ciencia de datos automática (AutoML), realizaremos la comparación de modelos, mostrando las métricas de: accuracy, AUC, Recall, Prec., F1, Kapp, MCC para varios modelos de ciencia de datos (gbc, lightgbm, ada, catboost, rf, lda, xgboost, et, ridge, dummy, lr, svm, knn, dt, qda, nb, etc.). Para ello, ejecutaremos la siguiente línea de código Python:

Hay que tener en cuenta que nosotros somos los que debemos elegir la métrica idónea según la intención del modelo de datos. Por ejemplo, si el modelo de datos queremos realizarlo para alguna predicción que requiera de no dejarnos ningún posible valor potencial, elegiríamos el que mayor métrica de recall haya dado, en el ejemplo elegiríamos el modelo nb (Naive Bayes).

Mostramos el mejor algoritmo y sus hiperparámetros, en este caso se usa (si no se indica otra cosa) el mejor algoritmo según la métrica accuracy, que para el ejemplo ha sido gbc (Gradient Boosting Classifier) con:

Devolverá:

Si queremos mostrar los modelos con los que probará al realizar una clasificación, ejecutaremos:

Comparamos los modelos y obtenemos el mejor:

En este caso, escogeremos el modelo Decision Tree Classifier (dt). Como hemos dicho anteriormente, elegiremos el modelo en función de la naturaleza y uso de los datos y, por ello, en base a la métrica que más se ajuste a estas características. Como ejemplo, elegiremos dt. Para escoger el modelo, introduciremos la siguiente línea de código:

Esto nos mostrará el cross validation (validación cruzada) que hizo para los 10 folds para un algoritmo en particular (para el dt en este caso):

Mostramos el modelo dt y los hiperparámetros:

Al igual que hemos hecho para el modelo dt, también podríamos generar cualquier otro modelo, como el knn y comparar los resultados (si lo estimamos oportuno):

Y mostrar el modelo knn y sus hiperparámetros:

Otro ejemplo, generando el modelo rf:

Y mostrando el modelo rf y sus hiperparámetros:

Tuneamos el modelo dt generado anteriormente, aplicando la hiperparametrización. El tuneado realiza las combinaciones potenciales y entrenamientos, modificando los parámetros, para obtener los que mejores resultados den.

Mostramos el modelo sin tunear y sus hiperparámetros:

Y mostramos el modelo tuneado con los hiperparámetros que haya considerado modificar (por ejemplo el parámetro min_impurity_decrease, pasando de 0 a 0.02):

La librería nos permite modificar el valor de cualquiera de los parámetros generados automáticamente. Por ejemplo, para modificar el valor del parámetro n_neighbors, para el modelo knn, usaremos:

Mostrándonos sus métricas, para decidir si nos conviene dejarlo en este valor o modificarlo:

Mostramos el modelo sin tunear y tuneado con sus hiperparámetros correspondientes (igual que hicimos para el modelo dt):

De igual forma para el modelo rf, aplicamos el tuneado:

Mostramos el modelo rf y sus hiperparámetros sin tunear:

Mostramos el modelo rf y sus hiperparáemtros tuneado:

Dibujamos las gráficas para ver, de forma visual, cómo se han comportado los modelos. Por ejemplo, para mostrar la curva de ROC para el modelo rf, usaremos la siguiente línea de código Python:

Para mostrar la gráfica de Precision-Recall también para el modelo rf:

O también la gráfica de Feature Importance para el modelo rf:

Y la matriz de confusión para el modelo rf:

Evaluamos el modelo con:

Y hacemos la predicción del modelo rf tuneado para ver cómo se comporta:

Generamos el modelo final:

Mostramos el modelo final rf con sus hiperparámetros:

Hacemos la predicción con el modelo final:

Hacemos la predicción con los datos iniciales almacenados en data_unseen (el dataset de 1.200 registros para pruebas):

Generamos y guardamos en fichero el modelo final, listo para usarse en cualquier momento:

Devolviendo:

En caso de querer cargar este modelo en otro equipo o en otra ocasión, ejecutaríamos la siguiente línea (disponiendo del fichero del modelo generado anteriormente):

Código Python completo del ejemplo de ciencia de datos automatizada

El código Python completo usado anteriormente: