Por Jose R. Zapata
Pasos sugeridos para desarrollar un proyecto de ciencia de datos
- Extracción de datos: selecciona y, luego, integra los datos relevantes de varias fuentes de datos para la tarea de AA.
- Análisis de datos: realiza un análisis de datos exploratorio (EDA) para identificar los datos disponibles a fin de compilar el modelo de AA. En este proceso, se incluye lo siguiente:
- La compresión de las características y el esquema de datos que espera el modelo
- La identificación de la preparación de datos y la ingeniería de atributos que se necesitan para el modelo
- Preparación de datos: se preparan los datos para la tarea de AA. Esta preparación incluye la limpieza de datos, en la que se dividen los datos en conjuntos de entrenamiento, validación y pruebas. También debes aplicar las transformaciones de datos y la ingeniería de atributos al modelo que resuelve la tarea de destino. El resultado de este paso comprende las divisiones de datos en el formato preparado.
- Entrenamiento de modelos: el científico de datos implementa algoritmos diferentes con los datos preparados para entrenar varios modelos de AA. Además, debes someter los algoritmos implementados al ajuste de hiperparámetros para obtener el modelo de AA de mejor rendimiento. El resultado de este paso es un modelo entrenado
- Evaluación de modelos: el modelo se analiza en un conjunto de pruebas de exclusión para evaluar la calidad del modelo. Este paso da como resultado un conjunto de métricas que se usan para evaluar la calidad del modelo.
- Validación de modelos: se confirma que el modelo es adecuado para la implementación si su rendimiento predictivo es mejor que un modelo de referencia determinado.
- Entrega de modelos: se implementa el modelo validado en un entorno de destino a fin de entregar predicciones. Esta implementación puede ser una de las que se describen a continuación: Microservicios con una API de REST para entregar predicciones en línea Un modelo incorporado a un borde o dispositivo móvil Parte de un sistema de predicción por lotes
- Supervisión del modelo: se supervisa el rendimiento predictivo del modelo para invocar, de manera potencial, una iteración nueva en el proceso de AA.
Nivel 0 de MLOps (POC): Proceso manual
flowchart LR
A[(Datos Offline)]
B[Extraccion y
Analisis de datos] subgraph uno [Experimentacion] C[Preparacion
de datos] D[Seleccion
de Modelo] C <--> D[Seleccion
de Modelo] D --> E[Entrenamiento
del modelo] E <--> F[Evaluacion y
validacion
del modelo] end F -->G[Modelo
Entrenado] G --> H[(Registro
de modelos)] A-->|Paso 1|B[Extraccion y
Analisis de datos] A --> |Paso 2|uno B<-->C[Preparacion
de datos]
Analisis de datos] subgraph uno [Experimentacion] C[Preparacion
de datos] D[Seleccion
de Modelo] C <--> D[Seleccion
de Modelo] D --> E[Entrenamiento
del modelo] E <--> F[Evaluacion y
validacion
del modelo] end F -->G[Modelo
Entrenado] G --> H[(Registro
de modelos)] A-->|Paso 1|B[Extraccion y
Analisis de datos] A --> |Paso 2|uno B<-->C[Preparacion
de datos]
Nivel 1 de MLOps (Prototipo): Proceso automatizado
Nivel 2 de MLOps (MVP): Automatización de un pipeline de CI/CD
Estados del proceso de CI/CD automatizado en un pipeline de ML
Estructura del codigo Machine Learning
flowchart TD
subgraph input [ETL]
A1[(Base de datos 1)]
A2[(Base de datos 2)]
A3[(Base de datos 3)]
A4[(Base de datos 4)]
A1 ==>B[Procesamiento_etl]
A2 ==>B
A3 ==>B
A4 ==>B
B ==> BB1{{Data integrity}}:::Checkclass
BB1 ==> BB2{{Data Validation}}:::Checkclass
end
BB2 ==> C[Split - Train /Test]
C --> |data train|C1[(Train)]:::Objclass -->D
D[Pre - procesamiento
No es necesario en test] --> |data train pre-processed|E C --> |data test|C2[(Test)]:::Objclass --> |data test|TRtest C2 & C1 --> CC{{Train / Test Validation}}:::Checkclass subgraph feature [Feature Engineering] E[Procesamiento Inicial
Ej: Nuevas columnas] -.-> F{Split
Data Type} F -.->|Numerico|G1[Transformacion] F -.->|Categorico|G2[Transformacion] F -.->|Bool|G3[Transformacion] F -.->|Dates|G4[Transformacion] G1 -.-> H[Procesamiento Final] G2 -.-> H G3 -.-> H G4 -.-> H H -.-> |objeto pipeline|TRfit[Entrenar Transformer] TRfit -.-> |objeto pipeline|TRdb[(Transformer
Pipeline)]:::Objclass end TRfit --> |data train transformed|I[Post - Procesamiento
Ej: Balanceo de datos - smote, Eliminar duplicados
No es necesario en test] subgraph pred [Prediction] TRtest[Transformacion] ----> |data test transformed|L[Prediccion] end subgraph mod[Modeling] J[Modelamiento] -.-> |objeto modelo| Modeldb[(Modelo)]:::Objclass end TRdb -.->TRtest D --> |data train pre-processed|TRfit I --> |data train post-processed|L I --> |data train post-processed|J Modeldb -.-> L --> LL[(Predicciones)]:::Objclass M -.->N[(Score)]:::Objclass L --> M[Evaluacion] Modeldb -.-> Modelcheck{{Model validation}}:::Checkclass I --> |data train post-processed|Modelcheck TRtest --> |data test transformed|Modelcheck classDef Objclass fill:#329cc1; classDef Checkclass fill:#EC5800;
No es necesario en test] --> |data train pre-processed|E C --> |data test|C2[(Test)]:::Objclass --> |data test|TRtest C2 & C1 --> CC{{Train / Test Validation}}:::Checkclass subgraph feature [Feature Engineering] E[Procesamiento Inicial
Ej: Nuevas columnas] -.-> F{Split
Data Type} F -.->|Numerico|G1[Transformacion] F -.->|Categorico|G2[Transformacion] F -.->|Bool|G3[Transformacion] F -.->|Dates|G4[Transformacion] G1 -.-> H[Procesamiento Final] G2 -.-> H G3 -.-> H G4 -.-> H H -.-> |objeto pipeline|TRfit[Entrenar Transformer] TRfit -.-> |objeto pipeline|TRdb[(Transformer
Pipeline)]:::Objclass end TRfit --> |data train transformed|I[Post - Procesamiento
Ej: Balanceo de datos - smote, Eliminar duplicados
No es necesario en test] subgraph pred [Prediction] TRtest[Transformacion] ----> |data test transformed|L[Prediccion] end subgraph mod[Modeling] J[Modelamiento] -.-> |objeto modelo| Modeldb[(Modelo)]:::Objclass end TRdb -.->TRtest D --> |data train pre-processed|TRfit I --> |data train post-processed|L I --> |data train post-processed|J Modeldb -.-> L --> LL[(Predicciones)]:::Objclass M -.->N[(Score)]:::Objclass L --> M[Evaluacion] Modeldb -.-> Modelcheck{{Model validation}}:::Checkclass I --> |data train post-processed|Modelcheck TRtest --> |data test transformed|Modelcheck classDef Objclass fill:#329cc1; classDef Checkclass fill:#EC5800;
Referencias
- MLOps: canalizaciones de automatización y entrega continua en el aprendizaje automático
- https://blog.zenml.io/data-centric-mlops/
- Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems
- https://github.com/ageron/handson-ml2
- https://neptune.ai/blog/mlops
- https://cloud.google.com/solutions/machine-learning/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning#mlops_level_1_ml_pipeline_automation
Phd. Jose R. Zapata