ADAM: Automated Discovery and Analysis Machine

En nuestro trabajo como científicos de datos nos encontramos todos los días con conjuntos de datos mal formateados, con valores ausentes o incorrectos y todo tipo de problemas que obstaculizan nuestro avance. Algunos estudios ("Cleaning Big Data: Most Time-Consuming, Least Enjoyable Data Science Task, Survey Says") han estimado que un 60% del tiempo de un científico de datos se invierte limpiando y formateando el conjunto de datos con el que se va a trabajar.

Tras este proceso, viene la fase de análisis de datos, donde se estudian de forma sistemática los rangos de valores, los histogramas, las distribuciones de las variables y las correlaciones entre ellas. Después, en muchas ocasiones, gran parte del tiempo dedicado a la siguiente fase de modelado consiste en unas tareas de análisis bastante repetitivas, consistentes en procesos de selección del mejor algoritmo entre un conjunto de ellos mediante procedimientos más o menos automatizados (por ejemplo, en scikit-learn, empleando GridSearchCV) y/o selección de características empleando diferentes técnicas más o menos preestablecidas.

Al final, en definitiva, cada proyecto de Data Analytics es en general bastante parecido a los demás en la metodología aplicada y las técnicas empleadas. 

Para ayudarnos en estas tareas sistemáticas y permitirnos dedicar nuestro tiempo a labores intelectuales y a optimizar las técnicas para el problema en concreto que estemos resolviendo, ahorrándonos el esfuerzo de realizar labores repetitivas, abordamos el desarrollo del sistema ADAM, acrónimo de Automated Discovery and Analysis Machine, un framework de ayuda al análisis automatizado de conjuntos de datos empleando tecnologías de Data Science.

ADAM: Automated Discovery and Analysis Machine

ADAM es un framework capaz de limpiar, analizar y modelar un conjunto de datos proporcionado, de manera automática, extrayendo tanta información como sea posible.

En su implementación actual, desarrollada en Python y basada en scikit-learn, se compone de dos módulos principales: Data Understanding y Modeling.

Módulo de Data Understanding (análisis de datos)

Este módulo, el primero que se ejecuta del sistema, recibe un conjunto de datos y devuelve al usuario varios estadísticos básicos con respecto a sus datos. Del mismo modo, también realiza una serie de operaciones de limpieza de datos. En función de que el problema sea aprendizaje supervisado o no, el conjunto de datos se compone de ejemplos caracterizados por variables predictoras y variable objetivo (supervisado), o bien sólo variables predictoras que modelan el problema (escenario no supervisado).

La información generada por este módulo es:

  • Estadísticos básicos: Se crea un diccionario de Python que contiene tanta información de cada variable como sea posible: máximo, mínimo, media, moda, desviación típica, recuento de valores erróneos o ausentes (NaN), cuenta de valores diferentes (variables nominales), etc. Además se calculan los histogramas de todas las variables posibles para que el usuario pueda observar la distribución de cada una de ellas.
  • Análisis de correlaciones: Muestra las principales correlaciones (coeficiente de Pearson) entre variables. Primero entre las variables predictoras y, más tarde, entre cada variable predictora con la variable objetivo. Aquellas variables predictoras cuya correlación con la variable objetivo sea muy baja o nula serán descartadas.
  • Soporte (de reglas de asociación): Calcula el soporte para cada posible combinación de valores de variables siendo el soporte la proporción de observaciones en el conjunto de datos que contienen esa combinación específica.
  • Creación y análisis de variables sintéticas: Por último, el módulo genera diferentes variables sintéticas. Una variable sintética es una variable creada realizando algún tipo de operación entre dos o más variables originales. Para validar estas variables, se realizan operaciones de suma, resta y multiplicación de variables, se comprueba la correlación de estas nuevas variables con la variable objetivo y, en caso de no conseguir una correlación mínima, son descartadas.

Módulo de Modeling (modelado)

Este módulo recibe como entrada el conjunto de datos limpio y procesado producido por el módulo anterior y realiza un modelado de la información, analizando la importancia de las variables predictoras, y devolviendo un modelo predictivo o de clustering entrenado y listo para ser usado.

  • Variables con mayor fuerza predictiva: Se entrena un SGD Regressor (Stochastic Gradient Descent) a partir del cual se genera la lista de variables ordenadas según su fuerza predictiva.
  • Búsqueda del modelo predictivo óptimo: Inicialmente se comprobará si la variable es categórica o no y se buscará el modelo predictivo óptimo entre los principales algoritmos existentes en Data Science: árboles de decisión, vecino más cercano, diferentes tipos de regresión (lineal, logística, Lasso, Ridge...), máquinas de vectores soporte (SVM), redes neuronales, modelos probabilísticos con redes bayesianas, random forest, etc.

Prueba de concepto

A continuación vamos a ilustrar las capacidades de ADAM con un conjunto de datos de una empresa del campo de las telecomunicaciones. En primer lugar, vamos a listar las columnas de las que disponemos. La mayoría de ellas son variables categóricas, por lo ADAM las dividirá en tantas variables binarias como categorías contengan. Nuestra variable objetivo en este conjunto de datos es “Churn”, que también es categórica e que indica si un cliente se marcha (True) o no (False) de los servicios de la compañía.

ADAM extrae de ellas los datos estadísticos básicos así como los histogramas de todas aquellas variables que lo permitan. Los datos estadísticos son almacenados en un diccionario que es entregado al usuario y tiene la siguiente forma:

Por otro lado, se obtienen también los histogramas de forma automática, mostrados en la figura siguiente.

Finalmente, el módulo de Data Understanding de ADAM genera variables sintéticas de utilidad y descarta aquellas variables que tengan una correlación muy baja o nula con el objetivo. En esta primera imagen se puede ver cómo la mayoría de las variables más correlacionadas con nuestra variable objetivo son sintéticas (únicamente “Contract: Month-to-month” es una variable original).

En esta segunda imagen vemos cómo algunas de las variables originales no están correlacionadas con la variable objetivo.

Finalmente, todos los datos generados por el primer módulo son introducidos en el módulo de Modeling, que realiza su análisis. La figura siguiente muestra la lista de las variables con mayor poder predictivo.

Tras esto, se procede a probar una serie de algoritmos de regresión/clasificación y se devuelve el mejor de ellos con los mejores parámetros seleccionados.

En este caso, el algoritmos que consigue un mejor scoring es la Regresión Logística, que es el modelo que se devuelve como salida (mostrado en la figura siguiente)

Planes de futuro

El científico de datos utilizaría la información generada automáticamente por ADAM para hacer una evaluación crítica del problema de Data Science y tomaría las medidas adecuadas para avanzar en la solución del problema, centrándose en el proceso de análisis de resultados y evaluación de alternativas, sin haber invertido esfuerzo en las tareas sistemáticas repetitivas anteriores.

Actualmente utilizamos ADAM de forma sistemática en la mayoría de proyectos de Data Analytics que abordamos. Mantenemos y actualizamos el sistema de forma continuada, añadiendo más posibilidades o más algoritmos, automatizando más tareas de análisis.

Una posibilidad que estamos analizando es desplegar el sistema ADAM como un servicio de análisis, dando acceso a usuarios externos exponiendo la funcionalidad completa mediante una API REST.

En s|ngular Data & Analytics somos expertos en análisis de datos, desde hace casi 20 años. Nuestro equipo puede abordar proyectos en cualquier escenario complejo con las máximas garantías de éxito. Si tiene cualquier pregunta o necesidad en estas áreas, por favor, no dude en contactar con nosotros: estaremos encantados de ayudarle.