[:es]
En publicaciones anteriores hemos estado hablando sobre MLOPS y proporcionando algunos detalles sobre la arquitectura para implementar modelos de ML con SageMaker. En esta publicación vamos a cubrir los detalles para implementar nuestro modelo, algunos temas asociados con algoritmos de clasificación, publicar un punto final de inferencia y hacer algunas llamadas de API para realizar predicciones.
Comencemos abriendo SageMaker Studio y creando un nuevo proyecto. Como puedes ver en la Imagen 1, AWS proporciona un par de plantillas para MLOPS, para este tutorial vamos a trabajar con la opción 3: Plantilla de MLOps para construcción, entrenamiento, implementación y monitoreo de modelos.
[:en]
In previous posts we’ve been talking about MLOPS and providing some details about the architecture to deploy ML models with SageMaker. In this post we are going to cover the details to deploy our model, some topics associated with classification algorithms, publish an inference endpoint and make some API calls to make predictions.
Let’s start by opening the SageMaker Studio and create a new project. As you can see in Image 1, AWS provides a couple of templates for MLOPS, for this tutorial we are going to work with the option 3: MLOps template for model building, training, deployment and monitoring.
[:]
[:es]
Cuando elijas la plantilla, SageMaker te ayudará a crear todos los recursos necesarios para entrenar, probar, implementar y monitorear tu modelo. Se generarán dos nuevos repositorios en AWS CodeCommit, uno para la construcción del modelo y otro para la implementación del modelo.
Entonces, echemos un vistazo al proyecto de construcción del modelo:
[:en]
When you choose the template, SageMaker will help you to create all the resources required to train, test, deploy and monitor your model. Two new repositories will be generated in AWS code-commit, one for model building and another for model-deploy.
So, lets take a look to the model-build project:
[:][:es]
Nuestra idea es implementar un algoritmo de clasificación. Después de muchos intentos, creo que el algoritmo XGBoost es la solución para mi problema de clasificación, así que repasemos algunos elementos clave (scripts) del proyecto MLOPS:
El archivo evaluate.py ayuda a definir, recopilar las métricas del modelo y evaluar el rendimiento de nuestra solución, estas métricas son:
[:en]
Our idea is to deploy a classification algorithm. After many attempts I think the XGBoost algorithm is the solution for my classification problem, so lets recap some key elements (scripts) of the MLOPS project:
The evaluate.py file helps to define, collect the model metrics and evaluate the performance of our solution, these metrics are:
[:]
[:es]
El archivo preprocess.py nos permite aplicar el paso de ingeniería de características, la idea detrás de esto es jugar con los datos y seleccionar las características clave para entrenar nuestro modelo o incluso generar nuevas características a partir de otras. Luego, los datos se dividen (debes echar un vistazo a la técnica de muestreo estratificado) en conjuntos de entrenamiento, validación y prueba. Esta información se guarda en tu instancia de SageMaker.
El archivo pipeline.py es el lugar donde defines los pasos para procesar datos, entrenar, probar e implementar tu modelo. Hay un par de ejemplos, la mayoría de ellos relacionados con regresores lineales, pero veamos qué puedes hacer con un problema de clasificación:
Como puedes ver en la Imagen 4, estamos utilizando el algoritmo XGBOOST proporcionado por AWS. El hiperparámetro «objetive» se establece en «binary:logistic» (aplica regresión logística para clasificación binaria).
[:en]
The preprocess.py file allows us to apply the feature engineering step, the idea behind this is to play with the data and pick the key features to train our model or even generate new ones from other features. Then the data is splitted (you should take a look to the stratified sampling technique) into the train, validation and test sets. This information is persisted in your SageMaker Instance.
The pipeline.py file is the place where you define the steps to process data, train, test and deploy your model. There are a couple of examples most of them related to linear regressors but let’s see what you can do with a classification problem:
As you can see in Image 4, we are using the XGBOOST algorithm provided by AWS, The hyperparameter objetive is set to “binary:logistic” (applies logistic regression for binary classification).[:]
[:es]
En la Imagen 5 se muestra una condición que se agregó para verificar si la métrica de precisión es menor que 1, esto se debe a que verifiqué un par de veces si tengo un modelo que funciona perfectamente para una métrica. Debes recordar que las métricas más importantes para problemas de clasificación binaria son la precisión, el recall y el ROC AUC (consulta el contenido adicional al final del artículo).
En cuanto al ROC AUC, cuando tienes un valor de 1 significa que tu clasificador funciona perfectamente y cuando este valor es 0.5 estamos hablando de un clasificador puramente aleatorio. También existe un concepto llamado «trade-off» entre precisión y recall, esto significa que si aumentas una de estas métricas, la otra disminuirá.
Nota: echa un vistazo a tus datos o tu modelo si obtienes un valor igual a 1.
[:en]
In Image 5 you see a conditional that was added to check if the precision metric is less than 1, this is because I would verify a couple of times whether I have a model that performs perfectly for one metric. You must remember that tree of the most important metrics for binary classification problems are Precision, Recall and ROC AUC (see the bonus content at the end of the article).
For the ROC AUC, when you have a value of 1 is because your classifier performs perfectly and when this value is 0.5 we are talking about a pure random classifier. There is also a concept called precision vs recall trade off , this means that if you increase one of these metrics the another one is going to decrease.
Note: take a look to your data or your model if you obtain a value equal to 1.
[:]
[:es]
Finalmente, registramos todos los pasos en nuestro pipeline:
Procesamiento: dividir los datos en conjuntos de entrenamiento, validación y prueba. Entrenamiento: entrenar tu modelo con los conjuntos de entrenamiento y validación. Evaluación: evaluación de tu modelo con el conjunto de prueba. Paso condicional para registrar un nuevo modelo y continuar con la implementación de tu punto final de escenario. Para implementar tus cambios, solo necesitas confirmar tus cambios o hacer clic en el botón «Release Change» de AWS CodePipeline (Imagen 6), luego verás el proceso para entrenar, validar y probar tu modelo desde CodePipeline y el tablero de SageMaker.
[:en]
Finally we register all the steps in our pipeline:
To deploy your changes you just need to commit your changes or click the button release change from AWS CodePipeline (Image 6), then you will see the process to train, validate and test your model from CodePipeline and the SageMaker dashboard.
[:]
[:es]
Si deseas verificarlo, simplemente ve a SageMaker y revisa cada paso del Pipeline en detalle.
[:en]
If you want to check, just go to SageMaker and take a look for every step of the Pipeline in detail.
[:]
[:es]
Cuando el modelo se haya registrado, podemos implementar el punto final de inferencia. Solo echa un vistazo al proyecto de implementación del modelo que incluye una plantilla de CloudFormation para crear la infraestructura necesaria para implementar un punto final de SageMaker.
En CloudFormation (Imagen 8) verás un par de elementos:
El modelo de SageMaker que construiste en el paso de construcción del código. La configuración del punto final y la instancia asociada a él.
[:en]
When the model has been registered we can deploy the inference endpoint. Just take a look to the model deploy project that includes a CloudFormation template to create the infrastructure required to deploy a SageMaker Endpoint.
In CloudFormation (Image 8) you will see a couple of elements:
[:]
[:es]
El pipeline está listo para implementar el modelo en el entorno de preparación y luego preguntará si deseas promover los cambios al entorno de producción (digamos que no en este momento), nos gustaría probar el punto final de inferencia en el entorno de preparación.
[:en]
The pipeline is now ready to deploy the model in staging environment and then will ask if you want to promote the changes to production environment (lets say no at this moment) we would like to test the inference endpoint in staging environment.
[:]
[:es]
Cuando AWS CodePipeline está ejecutando el paso de prueba de preparación (TestStaging), SageMaker obtiene las métricas definidas. Si tu modelo no tiene un buen rendimiento durante el proceso de entrenamiento, este paso fallará porque tu modelo no es un buen candidato para el entorno de producción.
Como resultado, vemos un nuevo punto final de inferencia en servicio:
[:en]
When AWS CodePipeline is executing the TestStaging step, SageMaker obtains the metrics defined. If your model doesn’t perform well during the training process this step fail because your model is not a good candidate for production environment.
As a result, we see a new inference endpoint in service:
[:]
[:es]
Finalmente, se ha implementado tu punto final (Imagen 12), puedes verificar los detalles y, obviamente, estás listo para realizar algunas llamadas de API.
[:en]
Finally your endpoint (Image 12) has been deployed, you can check the details and obviously you are good to go with some API calls.
[:]
[:es]
He preparado un pequeño script para probar mis predicciones, y esto es un adelanto para la próxima publicación… Tengo que proporcionar las características codificadas.
[:en]
I’ve prepared a small script to test my predictions, and this is some spoiler for the next post…. I have to provide the features encoded.
[:]
[:es]
Importa la biblioteca boto3 y genera una nueva sesión utilizando tus credenciales de IAM (entorno local).
Llama a la API de SageMaker pasando los parámetros requeridos:
[:en]
Import the boto3 library and generate a new session using your IAM credentials (Local environment).
Call the SageMaker API passing the parameters required:
Then I print the prediction result (Image 14), as a result the classification algorithm says is 92.7% sure this record belongs to the X category.
[:]
[:es]
Bonus:
Evaluar un clasificador a menudo es complicado y hay muchas medidas de rendimiento que puedes utilizar:
Utiliza una matriz de confusión, esto te dará:
Hay algunas métricas importantes:
Precisión: la precisión de las predicciones correctas.
precisión = Verdaderos Positivos / (Verdaderos Positivos + Falsos Positivos)
Recall
recall = Verdaderos Positivos / (Verdaderos Positivos + Falsos Negativos)
Recuerda, hay un equilibrio con estas métricas. Si aumentas una, la otra disminuirá, esto se llama equilibrio entre precisión y recall.
La curva característica de operación del receptor (ROC), es una herramienta común para clasificadores binarios y traza una curva para la tasa de verdaderos positivos (recall) frente a la tasa de falsos positivos (FPR) o especificidad.
Una medida importante es el área bajo la curva (AUC) para una curva ROC:
Un clasificador perfecto tendrá un valor igual a 1 (un clasificador perfecto). Un algoritmo de clasificación realmente malo tiene un valor menor o igual a 0.5 (clasificador aleatorio).
Espero que disfrutes esta publicación, no soy un experto, pero tengo curiosidad por ver cómo funcionan algunas cosas y compartir con otros mis experiencias.
Para Daniel Vásquez y el equipo de TBBC, les agradezco sinceramente por su fuerte apoyo.
Nos vemos por aquí,
Esteban Cerón
[:en]
Bonus:
Evaluating a classifier is often tricky and there are many performance measures you can use:
Use a confusion matrix, this is going to return
There are some important metrics:
Precision: The accuracy of good predictions
precision = True Positives / (True Positives + False Positives)
Recall
recall = True Positives / (True Positives + False Negatives)
Remember, there is a trade off with these metrics. If you increase one the other is going to decrease, this is called precision / recall trade — off.
The receiver operating characteristic (ROC) curve, it is a common tool for binary classifiers and plots a curve for the true positive rate (recall) vs false positive rate (FPR) or specificity.
One important measure is the Area Under the Curve (AUC) for a ROC curve:
I hope you enjoy this post, I am not an expert but I have curiosity to see how some things work and share with others my experiences.
To
and the
team, I sincerely thank you guys for the strong support
See you around,
Esteban Cerón
[:]
04
Jul04
Jul
Leave A Comment