Ciencia de Datos en producción

Propósito del Curso

El curso tiene como objetivo las prácticas esenciales de desarrollo y despliegue de modelos de aprendizaje automático (ML) en proyectos de ciencia de datos. Se explora desde la creación y ajuste de modelos hasta su implementación en entornos de producción. A través de buenas practicas de desarrollo, pruebas y seguimiento, los estudiantes obtendrán las habilidades necesarias para garantizar Reproducibilidad, Mantenibilidad y garantizar la escalabilidady trazabilidad de los modelos en aplicaciones reales, Garantizando la calidad del código.

EL pensamiento sistémico, trabajo colaborativo y las buenas prácticas de desarrollo permitirán a los científicos de datos adaptarse a la creciente demanda de complejidad, al tiempo que garantiza que los sistemas desarrollados sean reproducibles, mantenibles y confiables.

El curso hace parte del ciclo profesional del programa de Ingeniería de Ciencia de Datos de la Universidad Pontificia Bolivariana.

Conocimientos Previos

  • Python (Pandas, Scikit Learn, Matplotlib)
  • Estadística descriptiva e Inferencial
  • Visualización de la información
  • Machine Learning (Aprendizaje supervisado y no supervisado)
  • Analítica de datos Estructurados (Tabulares)
  • Fundamentos de programación y versionado de código (Git).

Que es Reproducibilidad, Mantenibilidad y Escalabilidad

Reproducibilidad (Reproducibility)

La capacidad de obtener los mismos resultados utilizando el mismo código, datos y entorno de ejecución. Esto es fundamental para garantizar la confiabilidad de los resultados y facilitar la colaboración las personas del equipo.

La reproducibilidad en este contexto se logra buscando que el código se ejecute de la misma manera en diferentes entornos (local, CI/CD, servidores de producción) y por diferentes personas incluyendo agentes de AI.

Esto se logra mediante:

  • Gestión de la versión de Python (Usar la misma versión en todos los entornos, UV)
  • Gestión de dependencias (Instalar exactamente la misma versión de las dependencias en todos los entornos, Evita instalar librerias que no son compatibles entre si, UV)
  • Uso de entornos virtuales (Instalar las dependencias en un entorno aislado para cada proyecto, UV)
  • Uso de versionado de código (Git)

Esto garantiza que los proyectos puedan ser replicados por otras personas y en diferentes entornos.

Mantenibilidad (Maintainability)

La capacidad de agregar funcionalidades, corregir errores y mejorar el código sin introducir errores o problemas. Esto es esencial para garantizar que los proyectos puedan evolucionar con el tiempo y adaptarse a nuevas necesidades o cambios en los datos.

La mantenibilidad se logra mediante:

  • Aplicación de buenas prácticas de desarrollo
  • Documentación clara del código, tipado estático de funciones y clases,
  • Comentarios adecuados en los commits (conventional commits),
  • Implementación de pruebas unitarias (pytest), de integración (pytest)
  • Implementación de la modularización del código
  • Llevar un registro de versiones adecuado (CHANGELOG.md)
  • Uso de herramientas de control de calidad de código (pre-commit, Ruff, mypy, etc.)

Esto garantiza que los proyectos puedan ser mantenidos y mejorados por cualquier persona del equipo y ahora también por los agentes que leen el código, la documentacion, los commits, etc.

Escalabilidad

La capacidad de un sistema para manejar un aumento en la carga de trabajo o su potencial para ser ampliado para acomodar ese crecimiento. En el contexto de proyectos de ciencia de datos, la escalabilidad se refiere a poder desplegar nuestros sistemas de procesamiento de datos, y predicción en varios servidores según la demanda. Esto se logra garantizando la Reproducibilidad y Mantenibilidad del código, así como mediante la implementación de prácticas de desarrollo que permitan la expansión eficiente de los recursos.

Contenido

Herramientas para el curso

PythonRuffGithub Pro
UVGitLinux (Nativo o Virtual)
IDE - VscodeDockerGithub Actions
CopilotJupyterpre-commit
Scikit-learnPandaspytest
mlflowpanderafastapi

Cronograma

1. MLOps: Proceso manual (Notebooks)

El objetivo es definir una metodología clara y pensamiento sistémico para abordar proyectos de ciencia de datos de principio a fin mediante un proceso manual para crear una prueba de concepto (POC), incluidos análisis de datos, preparación de datos, entrenamiento de modelos, validación de modelos, interpretación de los modelos y creación de un demo. Se requiere la ejecución de cada paso y la transición de un paso a otro.

ClaseMES 1
1Introducción (Presentación y por que del curso)
2Introducción (Contenido, herramientas y evaluación)
3Proyectos basados en datos (Generalidades)
4Proyectos basados en datos (Proyectos ML)
5Proyectos basados en datos (PASOS DE PREPARACIÓN Y DESCRIPCIÓN DE DATOS)
6Pull request y buenas practicas
7Revision de PR (comentarios, approves, request for changes). Scikit-learn Transformers y models
8Pipelines, modelo base y selección de modelos.

2. Configuración local, code quality y Scripts

El objetivo es realizar el primer proceso de producción de un proyecto de Machine Learning al convertir los procesos realizados manualmente en scripts de python, y garantizar que el proyecto sea reproducible, mantenible y escalable, esto se logra mediante:

  • Gestión de Python, ambientes virtuales y dependencias (Lograr que sean los mismos procesos en cualquier ambiente de desarrollo: Local, CI/CD, Servidores de producción)
  • Code-quality (linter, formater, isort, mypy, pip-audit, pre-commit)
  • Creación de scrips de Python con buenas practicas (Mantenimiento y Escalabilidad)
ClaseMES 2
9Model interpretation y demos (streamlit, taipy, gradio)
10Trabajo Practico (Resolver Issues y PR)
11Desarrollo en ambientes virtuales ( Gestor de python, ambientes y dependencias)
12Trabajo Practico (Resolver Issues y PR)
13Trabajo Practico (Resolver Issues y PR)
14Code-quality y pre-commit (linter, formater, isort, mypy, pip-audit)
15Configuración de Pre-commit y herramientas de calidad de código
16Funciones de Python (static typing, docstring y validaciones)

3. Scripts y CI/CD

El Objetivo es el siguiente paso en la producción de un proyecto de Machine Learning, donde se automatizan los procesos de desarrollo (Continuous Integration), garantizando que la preparación de los datos y entrenamiento del modelo se puedan implementar en entornos de producción de manera eficiente y segura.:

ClaseMES 3
17MLOPS (Generalidades, Arquitectura Monolito)
18Trabajo Practico (Resolver Issues y PR)
19Proceso Modular y arquitecturas de Proyectos de Machine Learning
20Pruebas unitarias y de integración
21Repositorios (Mono repo, Multi repo), Branching gitflow, Commits
22Demos modelos de Machine learning (online / Batch) - validación de inputs
23Plantilla de desarrollo y configuración de repositorio, CI /CD
24Trabajo Practico (Resolver Issues y PR)

4. Despliegue, Experiment Tracking y Monitoreo

El Objetivo es el siguiente paso en la producción de un proyecto de Machine Learning, donde se implementan los procesos de validación de datos y modelos, despliegue y monitoreo de modelos en entornos de producción. Se exploran herramientas y técnicas para realizar un seguimiento de los experimentos, gestionar el ciclo de vida del modelo y garantizar la calidad del modelo en producción.

ClaseMES 4
25MLOPS Arquitectura pipelines FTI (Generalidades)
26Data Validation y Model validation
27Experiment Tracking
28Feature Store para Data y Model Version Control
29Despliegue de modelos (Docker, FastAPI)
30Model Monitoring (Data drift, Model Drift, concept drift)

Referencias

Libros y Papers

Cursos y Tutoriales

Web

Herramientas

Docente

Jose R. Zapata