Cree, entrene e implemente un modelo de machine learning con Amazon SageMaker

TUTORIAL

Introducción

En este tutorial, aprenderá a utilizar Amazon SageMaker para crear, entrenar e implementar un modelo de machine learning (ML) por medio del algoritmo de ML XGBoost. Amazon SageMaker es un servicio completamente administrado que brinda a todos los científicos de datos y desarrolladores la capacidad de crear, entrenar e implementar modelos de machine learning rápidamente.

En general, trasladar los modelos de machine learning desde la etapa de conceptualización hasta la etapa de producción es sumamente complejo e implica mucho tiempo. Debe administrar grandes cantidades de datos para entrenar el modelo, elegir el mejor algoritmo posible para entrenarlo, administrar la capacidad de cómputo mientras se lo entrena y, luego, implementar el modelo en un entorno de producción. Amazon SageMaker reduce esta complejidad y facilita de manera significativa la creación y la implementación de modelos de machine learning. Una vez que elige los algoritmos y los marcos adecuados de la amplia gama de opciones disponibles, SageMaker administra toda la infraestructura subyacente para entrenar su modelo a escala de petabytes e implementarlo en la producción.

En este tutorial, asumirá el rol de un desarrollador de machine learning que trabaja en un banco. Se le solicita que desarrolle un modelo de machine learning para predecir si los clientes se inscribirán para un certificado de depósito.

En este tutorial, aprenderá a hacer lo siguiente:

  1. Creará una instancia de cuaderno de SageMaker
  2. Preparará los datos
  3. Entrenará el modelo para aprender de los datos
  4. Implementará el modelo
  5. Evaluará el rendimiento de su modelo de ML

El modelo se entrenará con el Conjunto de datos de marketing bancario que contiene información demográfica de los clientes, respuestas a los eventos de marketing y factores externos. Los datos se etiquetaron para su conveniencia. Una columna en el conjunto de datos identifica si el cliente está inscrito para algún producto que ofrece el banco. Una versión de este conjunto de datos está a disposición del público en el Machine Learning Repository de la Universidad de California, Irvine.

Los recursos creados y utilizados en este tutorial se pueden utilizar en el nivel gratuito de AWS. El costo de este taller es inferior a 1 USD.

 Experiencia en AWS

Principiante

 Tiempo de realización

10 minutos

 Costo de realización

Inferior a 1 USD. Apto para el nivel gratuito.

 Requisitos

  • Cuenta de AWS
  • Navegador recomendado: la última versión de Chrome o Firefox

[**] Es posible que las cuentas creadas en las últimas 24 horas aún no tengan acceso a los servicios necesarios para este tutorial.

 Servicios utilizados

 Última actualización

23 de agosto de 2022

Antes de empezar

Debe tener una cuenta de AWS para completar este tutorial. Si aún no posee una, seleccione Registrarse en AWS y cree una cuenta nueva.

Paso 1: Cree una instancia de cuaderno de Amazon SageMaker

En este paso, se crea la instancia de cuaderno que se utiliza para descargar y procesar los datos. Como parte del proceso de creación, también se crea un rol de Identity and Access Management (IAM) que permite a Amazon SageMaker acceder a los datos de Amazon Simple Storage Service (Amazon S3).


a. Inicie sesión en la consola de Amazon SageMaker, y, en la esquina superior derecha, seleccione la región de AWS que prefiera. En este tutorial se utiliza la región Oeste de EE. UU. (Oregón).


b. En el panel de navegación izquierdo, seleccione Instancias de cuaderno y, a continuación, seleccione Crear instancia de cuaderno.


c. En la página Crear instancia de cuaderno, en el cuadro de Configuración de la instancia de cuaderno de notas, rellene los siguientes campos:

  • En Nombre de la instancia de cuaderno, escriba SageMaker-Tutorial.
  • En Tipo de instancia de cuaderno, seleccione ml.t2.medium.
  • En Inferencia elástica, mantenga la selección predeterminada de ninguno.
  • En Identificador de plataforma, mantenga la selección predeterminada.

d. En la sección Permisos y cifrado, para el rol de IAM, seleccione Crear un nuevo roly, en el cuadro de diálogo Crear un rol de IAM, seleccione Cualquier bucket S3 y seleccione Crear rol.

Nota: Si ya cuenta con un bucket que quisiera utilizar en su lugar, seleccione Buckets de S3 específicos e indique el nombre del bucket.


Amazon SageMaker creará el rol AmazonSageMaker-ExecutionRole-***


e. Conserve la configuración predeterminada para las demás opciones y elija Crear instancia de cuaderno.

En la sección Instancias de cuaderno, se muestra la instancia de cuaderno SageMaker-Tutorial recién creada con un Estado Pendiente. El cuaderno estará listo cuando el Estado cambie a EnServicio.

Paso 2: Prepare los datos

En este paso, utiliza su instancia de cuaderno de Amazon SageMaker para preprocesar los datos que necesita para entrenar su modelo de machine learning y, a continuación, carga los datos en Amazon S3.


a. Después de que el estado de su instancia de cuaderno SageMaker-Tutorial cambie a EnServicio, seleccione Abrir Jupyter.


b. En Jupyter, seleccione Nuevo y, a continuación, seleccione conda_python3.


c. En una celda de código nueva, en su cuaderno de Jupyter, copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

Este código importa las bibliotecas necesarias y define las variables de entorno que necesita para preparar los datos y entrenar e implementar el modelo de machine learning.

# import libraries
import boto3, re, sys, math, json, os, sagemaker, urllib.request
from sagemaker import get_execution_role
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import Image
from IPython.display import display
from time import gmtime, strftime
from sagemaker.predictor import csv_serializer

# Define IAM role
role = get_execution_role()
prefix = 'sagemaker/DEMO-xgboost-dm'
my_region = boto3.session.Session().region_name # set the region of the instance

# this line automatically looks for the XGBoost image URI and builds an XGBoost container.
xgboost_container = sagemaker.image_uris.retrieve("xgboost", my_region, "latest")

print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + xgboost_container + " container for your SageMaker endpoint.")

d. Cree el bucket S3 para almacenar sus datos. Copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

Nota: Asegúrese de sustituir el bucket_name your-s3-bucket-name por un nombre de bucket S3 único. Si no recibe un mensaje de éxito después de ejecutar el código, cambie el nombre del bucket e inténtelo de nuevo.

bucket_name = 'your-s3-bucket-name' # <--- CHANGE THIS VARIABLE TO A UNIQUE NAME FOR YOUR BUCKET
s3 = boto3.resource('s3')
try:
    if  my_region == 'us-east-1':
      s3.create_bucket(Bucket=bucket_name)
    else: 
      s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })
    print('S3 bucket created successfully')
except Exception as e:
    print('S3 error: ',e)

e. Descargue los datos a su instancia de SageMaker y cárguelos en un marco de datos. Copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

try:
  urllib.request.urlretrieve ("https://d1.awsstatic.com/tmt/build-train-deploy-machine-learning-model-sagemaker/bank_clean.27f01fbbdf43271788427f3682996ae29ceca05d.csv", "bank_clean.csv")
  print('Success: downloaded bank_clean.csv.')
except Exception as e:
  print('Data load error: ',e)

try:
  model_data = pd.read_csv('./bank_clean.csv',index_col=0)
  print('Success: Data loaded into dataframe.')
except Exception as e:
    print('Data load error: ',e)

f. Mezcle y divida los datos en datos de entrenamiento y datos de prueba. Copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

Los datos de entrenamiento (el 70 % de los clientes) se utilizarán durante el ciclo de entrenamiento del modelo. Debe utilizar la optimización basada en gradientes para refinar de forma iterativa los parámetros del modelo. La optimización basada en gradientes es una forma de encontrar valores de parámetros del modelo que minimicen sus errores, mediante el uso de gradientes de la función de pérdida del modelo.

Los datos de prueba (el 30 % restante de los clientes) se utilizan para evaluar el rendimiento del modelo y para medir el nivel de generalización de los datos nuevos del modelo entrenado.

train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))])
print(train_data.shape, test_data.shape)

Paso 3: Entrene el modelo ML

En este paso, se utiliza el conjunto de datos de entrenamiento para entrenar el modelo de machine learning.


a. En una celda de código nueva, en su cuaderno de Jupyter, copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

Este código reformatea el encabezado y la primera columna de los datos de entrenamiento y, a continuación, carga los datos del bucket de S3. Este paso es necesario para utilizar el algoritmo XGBoost prediseñado de Amazon SageMaker.

pd.concat([train_data['y_yes'], train_data.drop(['y_no', 'y_yes'], axis=1)], axis=1).to_csv('train.csv', index=False, header=False)
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('train.csv')
s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')

b. Configure la sesión de Amazon SageMaker, cree una instancia del modelo XGBoost (un estimador) y defina los hiperparámetros del modelo. Copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(xgboost_container,role, instance_count=1, instance_type='ml.m4.xlarge',output_path='s3://{}/{}/output'.format(bucket_name, prefix),sagemaker_session=sess)
xgb.set_hyperparameters(max_depth=5,eta=0.2,gamma=4,min_child_weight=6,subsample=0.8,silent=0,objective='binary:logistic',num_round=100)

c. Comience el trabajo de formación. Copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

Este código entrena el modelo mediante la optimización de gradientes en una instancia ml.m4.xlarge. Después de unos minutos, debería ver los registros de entrenamiento que se generan en su cuaderno de Jupyter.

xgb.fit({'train': s3_input_train})

Paso 4: Implemente el modelo

En este paso, implementará el modelo entrenado en un punto de conexión, cambiará el formato y cargará los datos CSV. Luego, ejecutará el modelo para crear predicciones.


a. En una celda de código nueva, en su cuaderno de Jupyter, copie y pegue el siguiente código en una nueva celda de código y seleccione Ejecutar.

Este código implementa el modelo en un servidor y crea un punto de conexión de SageMaker al que puede acceder. Este paso puede tardar varios minutos en completarse.

xgb_predictor = xgb.deploy(initial_instance_count=1,instance_type='ml.m4.xlarge')

b. Para predecir si los clientes de los datos de prueba se inscribieron o no en el producto del banco, copie el siguiente código en la próxima celda de código y seleccione Ejecutar.

from sagemaker.serializers import CSVSerializer

test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array
xgb_predictor.serializer = CSVSerializer() # set the serializer type
predictions = xgb_predictor.predict(test_data_array).decode('utf-8') # predict!
predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array
print(predictions_array.shape)

Paso 5: Evalúe el rendimiento del modelo

En este paso, evaluará el rendimiento y la precisión del modelo de machine learning.


En una celda de código nueva en su cuaderno de Jupyter, copie y pegue el siguiente código y seleccione Ejecutar.

Este código compara los valores reales y previstos en una tabla denominada matriz de confusión.

En función de las predicciones, podemos concluir que usted predijo que un cliente se inscribiría para un certificado de depósito exactamente para el 90 % de los clientes en los datos de prueba, con una precisión del 65 % (278/429) para los inscritos y del 90 % (10 785/11 928) para los no inscritos.

cm = pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])
tn = cm.iloc[0,0]; fn = cm.iloc[1,0]; tp = cm.iloc[1,1]; fp = cm.iloc[0,1]; p = (tp+tn)/(tp+tn+fp+fn)*100
print("\n{0:<20}{1:<4.1f}%\n".format("Overall Classification Rate: ", p))
print("{0:<15}{1:<15}{2:>8}".format("Predicted", "No Purchase", "Purchase"))
print("Observed")
print("{0:<15}{1:<2.0f}% ({2:<}){3:>6.0f}% ({4:<})".format("No Purchase", tn/(tn+fn)*100,tn, fp/(tp+fp)*100, fp))
print("{0:<16}{1:<1.0f}% ({2:<}){3:>7.0f}% ({4:<}) \n".format("Purchase", fn/(tn+fn)*100,fn, tp/(tp+fp)*100, tp))

Paso 6: Elimine los recursos

En este paso, finalizará los recursos que utilizó en este laboratorio.

Importante: Al finalizar los recursos que no se están utilizando de forma activa se reducen los costos. Es una práctica que recomendamos. Si no finaliza sus recursos, recibirá cargos en su cuenta.


a. Elimine su punto de conexión: en su cuaderno de Jupyter, copie y pegue el siguiente código y elija Ejecutar.

xgb_predictor.delete_endpoint(delete_endpoint_config=True)

b. Elimine sus artefactos de entrenamiento y el bucket de S3: en su cuaderno de Jupyter, copie y pegue el siguiente código y seleccione Ejecutar.

bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)
bucket_to_delete.objects.all().delete()

c. Elimine su cuaderno de SageMaker: detenga y elimine el cuaderno de SageMaker.

  1. Abra la consola de SageMaker.
  2. En Cuadernos, seleccione Instancias de cuadernos.
  3. Elija la instancia de cuaderno que creó para este tutorial y, a continuación, elija Acciones, Detener. La instancia de cuaderno tarda varios minutos en detenerse. Cuando el Estado cambie a Detenido, continúe con el siguiente paso.
  4. Seleccione Acciones y, a continuación, Eliminar.
  5. Seleccione Eliminar.

Conclusión

Ha aprendido a utilizar Amazon SageMaker para preparar, entrenar, implementar y evaluar un modelo de machine learning. Amazon SageMaker facilita la creación de modelos de machine learning y le proporciona todo lo necesario para conectarse rápidamente con los datos de entrenamiento y para seleccionar el mejor algoritmo y marco de trabajo para su aplicación, mientras administra la infraestructura subyacente completa, de manera que pueda entrenar modelos a escala de petabytes.

¿Le resultó útil esta página?

Siguientes pasos

Ahora que ha preparado, entrenado, implementado y evaluado un modelo de machine learning, puede aprovechar lo aprendido explorando otros recursos de Amazon SageMaker.

Explore ejemplos de cuadernos de ML
Explore los cuadernos de ejemplo que muestran cómo aplicar el machine learning, el aprendizaje profundo y el aprendizaje mediante refuerzo en Amazon SageMaker.
Siguiente »
Haga un recorrido por Amazon SageMaker Studio
Haga un recorrido por Amazon SageMaker Studio.
Siguiente »
Aprenda a crear, entrenar e implementar modelos de machine learning automáticamente con el Piloto Automático de Amazon SageMaker
Si desea obtener más información, complete el tutorial de 10 minutos para crear automáticamente un modelo de machine learning con el Piloto Automático de Amazon SageMaker.
Siguiente »