Paso a paso en un Proyecto Machine Learning

Checklist y preguntas

Esta es una traduccion propia al español del Apendice B (Machine Learning Project Checklist) del libro Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition de Aurélien Géron con algunos pasos propios agregados o que he encontrado en otros libros o cursos que he realizado.

Este Libro me ha gustado mucho, para mi es el libro practico mas completo sobre machine learning con python que he leido, tiene una excelente estructura, codigo en python muy bien explicado, ademas muchos tips y sugerencias para realizar un proyecto de machine learning.

El libro esta acompañado por un repositorio con Jupyter Notebooks: https://github.com/ageron/handson-ml2


Table of Contents

Esta lista de verificación puede ser una guia paso a paso para proyectos de Machine Learning.

1. Definir el problema y mirar el panorama general.

  1. Definir el objetivo en términos del negocio.
  2. ¿Cómo se usará su solución?
  3. ¿Cuáles son las soluciones actuales (si las hay)?
  4. ¿Cómo se debe enmarcar este problema (supervisado / no supervisado, en línea / fuera de línea, etc.)
  5. ¿Cómo se debe medir el desempeño o el rendimiento de la solucion?
  6. ¿La medida de desempeño está alineada con el objetivo del negocio?
  7. ¿Cuál sería el desempeño o rendimiento mínimo necesario para alcanzar el objetivo del negocio?
  8. ¿Cuáles son los problemas parecidos? ¿Se puede reutilizar experiencias o herramientas ya creadas?
  9. ¿Hay experiencia del problema disponible?
  10. ¿Cómo se puede resolver el problema manualmente?
  11. Hacer un listado de los supuestos que hay hasta este momento.
  12. Verificar los supuestos si es posible.

2. Obténer los datos

Nota: automatizar tanto como sea posible este proceso para que pueda obtener fácilmente datos nuevos.
  1. Enumere los datos que necesita y la cantidad que necesita.
  2. Busque y documente dónde se pueden obtener los datos.
  3. Compruebe cuánto espacio de almacenamiento ocuparán los datos.
  4. Verifique las limitaciones legales y obtener autorización a los datos si es necesario.
  5. Obtener autorizaciones de acceso a los datos.
  6. Reservar suficiente espacio de almacenamiento para el proyecto.
  7. Obtener los datos.
  8. Convertir los datos a un formato que se pueda manipular fácilmente (sin cambiar los datos en sí).
  9. Asegúrarse de que la información confidencial se elimine o se proteja (por ejemplo, anonimizar los datos).
  10. Verificar el tamaño y el tipo de datos (series de tiempo, muestra de datos, geoposicionamiento, etc.).
  11. Separar un conjunto de datos prueba, dejarlos a un lado y nunca mirarlos.

3. Explorar los datos para obtener información.

Nota: intente obtener información de un experto en el tema para estos pasos.
  1. Crear una copia de los datos para explorarlos (muestreándolos a un tamaño manejable si necesario).
  2. Crar un Jupyter Notebook para mantener un registro de la exploración de los datos.
  3. Estudiar cada atributo y sus características (Analisis Univariable):
  • Nombre
  • Tipo de dato (categórico, int / float, acotado / no acotado, texto, estructurado, etc.)
  • porcentaje (%) de valores faltantes.
  • Ruido y tipo de ruido (estocástico, valores atípicos, errores de redondeo, etc.)
  • ¿Son posiblemente útiles para el proyecto?
  • Tipo de distribución (gaussiana, uniforme, logarítmica, etc.)
  1. Para los proyectos de aprendizaje supervisado, identifique los atributos objetivo (target).
  2. Visualizacion de los datos.
  3. Estudiar las correlaciones entre atributos (Analisis Bivariable).
  4. Estudiar cómo resolver el problema manualmente.
  5. Identificar las transformaciones que tal vez se puedan aplicar.
  6. Identificar datos adicionales que pueden ser útiles.
  7. Documentar lo que ha aprendido.

Software o librerías para exploracion de Datos

4. Preparación de los datos.

Para exponer mejor los patrones de los datos y usarlos con los algoritmos de Machine Learning.

Notas:

  • Trabaje en copias de los datos (mantenga intacto el conjunto de datos original).
  • Escriba funciones para todas las transformaciones de datos que realice, por cinco razones:
    • Para que pueda preparar fácilmente los datos la próxima vez que obtenga un conjunto de datos nuevo
    • Para que pueda aplicar estas transformaciones en proyectos futuros
    • Para limpiar y preparar el set de datos de prueba
    • Para limpiar y preparar nuevas instancias de datos una vez que su solución esté activa (produccion)
    • Para que sea fácil probar diferentes formas de preparación de datos como hiperparámetros
  1. Limpieza de datos:
  • Eliminar registros datos duplicados (disminuir el numero de datos)
  • Corregir o eliminar valores atípicos (opcional).
  • Los valores atípicos pueden separarse del dataset dependiendo del problema del proyecto (por ejemplo, deteccion de anomalias).
  • Completar los valores faltantes (por ejemplo, con cero, media, mediana …) o eliminar las filas (o columnas).
  1. Selección de atributos (Feature Selection) (opcional):
    • Descartar los atributos que no proporcionan información útil para el proyecto.
    • Eliminar registros duplicados (al eliminar atributos pueden quedar registros iguales)
  2. Ingeniería de atributos (Feature Engineering), cuando sea apropiado:
    • Discretizar las atributos continuas.
    • Descomponer en partes los atributos (p. Ej., Categóricas, fecha / hora, etc.).
    • Agregar transformaciones prometedoras de las atributos, por ejemplo:
      • log(x)
      • sqrt(x)
      • x^2
      • etc
    • Aplicar funciones a los datos para agregar nuevos atributos.
  3. Escalado de atributos (Feature Scaling):
    • estandarizar
    • normalizar

5. Exploración y selección de modelos

Notas:

  • Si se tiene una gran cantidad de datos, es posible que desee hacer un muestreo de los datos para tener conjuntos de entrenamiento más pequeños, de esta forma se pueden entrenar varios modelos diferentes en un tiempo razonable (se debe tener en cuenta que esto penaliza modelos complejos como redes neuronales grandes o Random Forest).
  • Una vez más, intentar automatizar estos pasos tanto como sea posible.
  1. Entrenar muchos modelos rápidos y utilizando parámetros estándar de diferentes categorías (p. Ej., Lineales, Naive Bayes, SVM, Random Forest, redes neuronales, etc.).
  2. Medir y comparar su desempeño.
  • Para cada modelo, utilice la validación cruzada (Cross validation) de N subconjuntos y calcule la media y la desviación estándar de la medida de rendimiento en las N evaluaciones.
  1. Analice las variables más significativas para cada algoritmo.
  2. Analice los tipos de errores que cometen los modelos.
  • ¿Qué datos habría utilizado un humano para evitar estos errores?
  1. Realizar rapidamente una selección de atributos e ingeniería de atributos (Feature selection, Feature Engineering).
  2. Realice una o dos iteraciones rápidas más de los cinco pasos anteriores.
  3. Hacer una lista corta de los tres a cinco modelos más prometedores, prefiriendo seleccionar modelos que cometan diferentes tipos de errores (diversidad de los errores).

Software o librerías de Modelos de Machine Learning

Librerías de AutoML (Auto Machine Learning)

Librerias AutoML Simples (No Produccion)

Librerias para Deep Learning

6. Afinar los modelos.

Notas:

  • Se deberá utilizar la mayor cantidad de datos posible para este paso, especialmente a medida que avanza hacia el final del ajuste fino del modelo.
  • Como siempre, automatizar lo que se pueda.
  1. Ajuste los hiperparámetros (hyperparameter tunning) mediante validación cruzada (cross validation).
  • Tratar las elecciones de transformación de datos como hiperparámetros, especialmente cuando no esta seguro de ellos (por ejemplo, ¿debería reemplazar los valores faltantes con cero o con el valor medio? ¿O simplemente dejar eliminar las filas?).
  • A menos que haya muy pocos valores de hiperparámetros para explorar, prefiera la búsqueda aleatoria (random search) a la búsqueda de cuadrícula (grid search). Si el entrenamiento es muy largo, es posible que prefiera un enfoque de optimización bayesiano (por ejemplo, utilizando procesos previos gaussianos, como lo describen Jasper Snoek, Hugo Larochelle y Ryan Adams1.
  1. Pruebe los métodos de Ensamble (ensemble methods). La combinación de sus mejores modelos a menudo tendrá un mejor rendimiento que se ejecutan individualmente (hay mejor desempeño si hay diversidad de errores entre los modelos).
  2. Una vez que esté seguro de su modelo final, mida su rendimiento en el conjunto de prueba (test set, separado al inicio) para estimar el error de generalización.
No modifique su modelo después de medir el error de generalización: simplemente comenzaría a sobreajustar el conjunto de prueba.

Librerias para Hiper parametrizacion de Modelos

7. Interpretabilidad del modelo

Interpretar el modelo obtenido e identificar los errores del mismo

  • ¿Cuáles caracteristicas (Features) son mas importantes?
  • ¿Cuanto en la contribución de cada caracteristica (Feature) a la predicción?
  • ¿Cuáles son las consecuencias de las malas predicciones?
  • ¿Qué tipo de errores comete el modelo?
  • ¿Cómo se pueden monitorear los errores?
  • ¿A qué se deben los errores?
    • outliers?
    • Clase desbalanceada?
    • ¿Errores en el ingreso de datos?
    • etc

Librerias para Interpretabilidad del modelo

8. Presentacion de la solución.

  1. Documentar lo que ha hecho.
  2. Crear una buena presentación.
  • Asegúrese de resaltar el panorama general del proyecto o del problema primero.
  1. Explicar por qué la solución encontrada logra el objetivo buscado.
  2. No olvidar presentar puntos interesantes que se notaron en el camino.
  • Describir qué funcionó y qué no.
  • Enumerar los supuestos y las limitaciones del sistema.
  1. Asegúrarse de que los hallazgos clave se comuniquen a través de hermosas visualizaciones o declaraciones fáciles de recordar (por ejemplo, “el ingreso medio es el predictor número uno de los precios de la vivienda”).

9. Desplegar, monitorear y mantener el sistema.

  1. Preparar la solución para producción (conectar las entradas de datos de producción, escribir pruebas unitarias (unit test), etc.).
  2. Escribir código de monitoreo para verificar el rendimiento en tiempo real del sistema a intervalos regulares y activar alertas cuando se caiga o falle.
    • Tener cuidado con la lenta degradación: los modelos tienden a “pudrirse” a medida que los datos evolucionan, el modelo va perdiendo validez en el tiempo.
    • La medición del rendimiento puede requerir supervision humana (por ejemplo, a través de un servicio de crowdsourcing).
    • Controlar la calidad de los datos de entrada (por ejemplo, Un sensor que funciona mal y que envía valores aleatorios, o la salida de datos de otro equipo se vuelve obsoleta). Esto es particularmente importante para los sistemas de aprendizaje en línea (online learning).
  3. Vuelva a entrenar sus modelos de forma regular con datos nuevos (automatizar lo más posible).

Referencias


  1. “Practical Bayesian Optimization of Machine Learning Algorithms,” J. Snoek, H. Larochelle, R. Adams (2012) ↩︎

Jose R. Zapata
Jose R. Zapata
Data Science Technical Leader
PhD in Information and Communication Technologies

Data science, Music Information Retrieval and Python.