Ten en cuenta esto durante un proyecto de Machine Learning
Tags: datascience, machinelearning, productivity
Published: 2020-06-18 02:25:31

Esta lista puede guiarte a través de tus proyectos de aprendizaje automatico. Hay ocho pasos principales:
1. Observa el problema y ten en cuenta el panorama completo.
2. Obtén los datos.
3. Explora los datos para obtener nueva información.
4. Prepara los datos para exponer mejor los patrones ocultos de los datos a los algoritmos de aprendizaje automático.
5. Explora varios modelos distintos y haz una lista de los mejores.
6. Afina los modelos y combinalos en una gran solución.
7. Presenta tu solución.
8. Haz el lanzamiento, monitorea y manten tu sistema.

Obviamente, se libre de adaptar esta lista a tus necesidades.

---

## Observa el Problema y Ten en Cuenta el Panorama Completo

1. Define el objetivo segun los términos de tu empresa.
2. ¿Como será usada tu solución?
3. ¿Cuales son las soluciones disponibles (si hay)?
4. ¿Como deberías afrontar este problema (supervisado/no supervisado, en línea/fuera de línea, etc.)?
5. ¿Cómo debería ser medido el rendimiento?
6. ¿La medición del rendimiento está alineada con el objetivo de la empresa?
7. ¿Cuál sería el mínimo rendimiento necesario para alcanzar el objetivo de la empresa?
8. ¿Qué problemas son comparables? ¿Puedes reutilizar experiencia o herramientas?
9. ¿Tienes disponible experiencia humana?
10. ¿Como resolverías el problema manualmente?
11. Haz una lista de las suposiciones que vos (u otros) han hecho hasta ahora.
12. Verifica esas suposiciones si es posible.

---

## Obten los Datos

Nota: automatiza lo mas posible para obtener datos nuevos.
1. Haz una lista de los datos que necesitas y en que cantidad.
2. Encuentra y documenta de donde puedes obtener los datos.
3. Chequea cuanto espacio va a necesitar.
4. Chequea obligaciones legales y obtén autorización si es necesaria.
5. Obtén autorizaciones de acceso.
6. Crea un espacio de trabajo (con suficiente espacio  de almacenamiento).
7. Obten los datos.
8. Convierte los datos a un formato en el que puedas manipularlos facilmente (sin cambiar los datos).
9. Asegurate que la información sensible es borrada o protegida (es decir, anonimizada).
10. Chequea el tamaño de los datos (series de tiempo, muestras, geográficas, etc.).
11. Copia un set de pruebas, ponlo a un lado, y nunca lo mires (no espies los datos!).

---

## Explora los Datos

Note: intenta obtener información de un experto en la materia para estos pasos.
1. Crea una copia de los datos para exploracion (redúcela a un tamaño manejable si es necesario).
2. Crea un Jupyter notebook para tener un registro de la exploración de datos.
3. Estudia cada atributo y sus características.
  * Nombre
  * Tipo (categórico, integral/flotante, texto, etc.).
  * % de valores perdidos.
  * Ruido y tipo de ruido (estocasticos, outliers, errores de redondeo, etc.).
  * Utilidad para el proyecto.
  * Tipo de distribucion (Gaussiano, uniforme, logaritmico, etc.).
4. Para tareas de apredizaje supervisado, identifica las categorías de objetivo.
5. Visualiza los datos.
6. Estudia las correlaciones entre atributos.
7. Identifica las prometedoras transformaciones que querrías aplicar.
8. Identifica datos extra que podrían ser útiles.
9. Documenta todo lo que aprendiste.

---

## Prepara los Datos

Notas:
  * Trabaja en copias de los datos (manten los datos originales intactos).
  * Escribe funciones para todas las transformaciones de datos que aplicas, por cinco razones:
    1. Asi puedes preparar los datos más facilmente la proxima vez que obtengas datos nuevos.
    2. Asi puedes aplicar estas transformaciones en futuros proyectos.
    3. Para limpiar y preparar el set de prueba.
    4. Para limpiar y preparar nuevos datos una vez que la solución esta implementada.
    5. Para hacer mas facil las elecciones de preparación como hiperparámetros.

1. Limpieza de datos:
  * Arregla o remueve los outliers (opcional).
  * Reemplaza los valores perdidos (por ej., con 0, el promedio, la mediana, etc.) o remueve sus filas (o columnas).
2. Selección de atributos (opcional):
  * Elimina los atributos que no proveen información útil para el proyecto.
3. Ingeniería de atributos, cuando sea apropiado:
  * Discretiza los atributos categoricos.
  * Descompone atributos (por ej., categoricos, fecha/hora, etc.).
  * Añade transformaciones prometedoras de atributos (por ej., log(x), sqrt(x), x^2, etc.).
4. Escala de atributos
  * Estandariza o normaliza atributos.

### Escribí un articulo sobre [limpieza de datos con Python](https://dev.to/ruizleandro/limpieza-de-datos-con-python-4738)

---

## Haz una Lista de los Mejores Atributos

Notas:
* Si los datos son muchos, quizás quieras crear muestras más pequeñas para entrenar los diferentes modelos en un tiempo razonable (ten en cuenta que esto perjudica modelos más complejos como redes neuronales).
* Una vez más, intenta automatizar estos pasos lo mas que puedas:
1. Entrena rapidamente varios modelos de diferentes categorías (por ej, lineales, naive Bayes, SVM, random forests, redes neuronales, etc.) usando parámetros estandar.
2. Mide y compara su rendimiento.
  * Para cada modelo, usa *N*-fold cross-validation y computa el promedio y la desviación estandar del rendimiento en las *N* carpetas.
3. Analiza las variables más significativas para cada algoritmo.
4. Analiza los tipos de errores que los modelos producen.
  * ¿Que datos habría usado una persona para evadir estos errores?
5. Realiza una ronda rápida de selección de atributos e ingeniería.
6. Realiza una o dos iteraciones rápidas más de los últimos cinco pasos.
7. Haz una lista de los tres a cinco modelos más prometedores, prefiriendo modelos que producen diferentes tipos de errores.

---

## Afina el Sistema

Notas:
* Vas a querer utilizar la mayor cantidad de datos posible para este paso, especialmente a medida que te acercas al final de esta sección.
* Como siempre, automatiza todo lo que puedas.
1. Afina los hiperparámetros usando cross-validation:
  * Trata las transformaciones a los datos como hiperparámetros, en especial cuando no estas seguro sobre ellos (por ej., cuando no sabes si deberías reemplazar los datos perdidos con ceros o con el valor promedio, o solo deshacerte de las filas).
  * A menos que hayan pocos valores de hiperparámetros para explorar, prefiere la busqueda aleatoria por sobre Grid Search. Si el entrenamiento es muy largo, quizá prefieras una optimización Bayesiana.
2. Intenta métodos de ensamblaje. Combinando tus mejores modelos obtendrás mejor rendimiento que utlizandolos individualmente.
3. Una vez que tienes confianza en tu modelo final, analiza el rendimiento en el set de pruebas para estimar el error de generalización.

> No modifiques tu modelo despues de medir el error de generalización: solo comenzarás a sobreajustar (overfitting) el set de pruebas.

---

## Presenta tu Solución

1. Documenta todo lo que realizaste.
2. Diseña una buena presentación.
  * Asegurate de destacar el panorama.
3. Explica por qué tu solución alcanza el objetivo de la empresa.
4. No olvides de presentar puntos interesantes que hayas visto durante el trayecto.
  * Describe que funcionó y que no.
  * Haz una lista de suposiciones y de las limitaciones de tu sistema.
5. Asegurate que tus descubrimientos más importantes son comunicados a traves de hermosas presentaciones o frases que son faciles de recordar (por ej., "el ingreso promedio es el predictor número uno del precio de las viviendas").

## Lanzalo al mundo!
1. Deja tu solución lista para producción (conectalo a las entradas de datos de producción, escribe tests de unidades, etc.).
2. Escribe código de monitoreo para chequear el rendimiento en vivo de tu sistema en intervalos regulares y pon alarmas para cuando no funciona correctamente.
  * Ten en cuenta la degradación lenta: los modelos tienden a quedarse atrás mientras los datos evolucionan.
  * Medir rendimiento quizá requiera ayuda humana (por ej., via un servicio de crowdsourcing).
  * Tambien monitorea la calidad de los datos que entran (por ej., un sensor roto que envía valores aleatorios). Esto es particularmente importante para sistemas de aprendizaje en línea.
3. Re-entrena tus modelos de manera regular con datos frescos (automatiza todo lo posible, de nuevo).

---

Muchas gracias por leer!

---
### Fuente:
Aurelien Geron. (2019). Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems (2nd Edition), Beijing, China: O'Reilly.