Ser un 10x data scientist
Video
Puedes ver el video de este script acá: https://youtu.be/TTxJ7kehgRU
¿Data scientist? hoy te quiero contar cómo es que puedes mejorar tu código enormemente, y no, no requiere que te vuelvas uno de esos "10x engineer", sino que el truco es mucho, mucho más sencillo de lo que te imaginas.
En el desarrollo de software la capacidad de abstraer y modularizar es una de esas herramientas muy valiosas, y de eso se trata lo que te voy a contar. A grandes rasgos se trata de dividir tu trabajo en secciones lógicas con las cuales seguramente ya has trabajado anteriormente.
Cuando menos, te propongo estas 4 grandes partes que debe contener tu código de entrenamiento de machine learning: ingestión, preparación, entrenamiento y validación. Y ojo que no te digo que amontones todo tu código en funciones que se llamen así... sino que trates de organizar el código en esas secciones.
Ingestión: La parte en la que se extraen los datos de la fuente original, de tu data lake o de tu data warehouse, este paso es importante porque te puede ayudar a "congelar" una version del dataset que vas a usar para entrenar tu modelo y usarlo para reproducir ese mismo experimento en el futuro, o inclusive para entrenar diferentes modelos con el mismo dataset.
Preparación: Una vez que ya tenemos el dataset "en la mano", la siguiente tarea debe ser la de prepararlo: aquí puedes englobar las tareas de limpieza de datos, feature engineering, y feature selection. Además la de decidir cómo particionar el dataset en los conjuntos de entrenamiento, prueba y validación. Este es un paso bastante... bastante amplio tanto que tal vez te puedas aventurar y dividirlo en más secciones.
Train: La parte que siempre se lleva las palmas en el *machine learning*, en donde tomas tu conjunto de datos y el modelo es entrenado con los hiperparámetros elegidos. El resultado de este paso es un modelo ya preparado, pero que todavía no sabemos si es útil o no, porque para eso está el siguiente paso.
Validate: En este paso toca verificar que el modelo que acabamos de generar cumple con los estándares de calidad impuestos por nuestro negocio, y el resultado es que si el modelo los cumple entonces podemos ponerlo directamente en producción o registrarlo como candidato a reemplazar el que ya existe en producción.
La idea es, sí, experimenta tanto como quieras, de eso se trata tu trabajo después de todo, nunca sabes qué variables van a ser las más valiosas en tu dataset y sí, casi ningún problema se va a parecer al otro. A lo que te estoy invitando es a tener este "framework" en mente y que trates de acercarte a él conforme tu experimento vaya madurando hacia producción.
Entre los beneficios está que tu trabajo será más fácil de entender, reproducir y modificar. Y las posibilidades de automatización serán más amplias, reduciendo así la posibilidad de errores que suelen ocurrir cuando un humano está ejecutando el código manualmente.
También el generar estos bloques lógicos también te ayudarán a ti y a tu equipo a identificar fragmentos de código repetitivos que tal vez más adelante se puedan convertir en utilidades comunes que otros científicos de datos puedan aprovechar.
Otro de los beneficios es que estarás ya adentrándote en el mundo de los ML pipelines, uno de los conceptos centrales cuando toca llevar tu trabajo a producción. Si te logras montar un buen pipeline, tu trabajo a futuro será menos, y podrás pasar más tiempo en nuevos proyectos, y menos tiempo manteniendo eso que terminaste hace meses.
Y sí, estoy de acuerdo que esto de montar el pipeline es tarea de gente como yo, que le hacen a esto del MLOps... pero créeme que me ayudarías bastante y haríamos muchos más proyectos si pudieras entregarme el código lo más organizado que puedas.