Blog de Amazon Web Services (AWS)

Obtener valor de forma rápida con Amazon SageMaker Autopilot

Por Iván González, Arquitecto de Soluciones en AWS México

 

Una de las preguntas más recurrentes por parte de nuestros clientes acerca de Machine Learning (ML) es ¿Cómo obtener valor rápidamente mediante ML? Damos respuesta a esta pregunta describiendo lo que hacen los clientes en AWS, y a partir de eso se observan dos formas de obtener valor de negocio.

La primera es que para casos de uso como son la extracción de texto, transcripción de voz a texto, detección de objetos e imágenes, y muchos otros, los clientes están aprovechando los servicios de Inteligencia Artificial de AWS. Los Servicios de Inteligencia Artificial de AWS son servicios desarrollados, con modelos entrenados y optimizados continuamente por científicos de datos de Amazon, por lo que no se requiere conocimiento o experiencia en ML del usuario final. El usuario final puede simplemente acceder a estos servicios a través de una llamada a la API y también puede integrar fácilmente estos servicios en sus flujos de trabajo existentes.

Aunque ¿qué sucede si ustedes en su organización ya están trabajando en un modelo de ML personalizado, es decir, a la medida de sus datos? En este otro escenario, para obtener valor rápidamente, querrán aprovechar una plataforma de ML, completamente administrada de extremo a extremo, como Amazon SageMaker. Amazon Sagemaker ayuda a automatizar y agilizar el proceso de construcción, entrenamiento y despliegue de modelos de ML. Lo cual permite que los científicos de datos se concentren en la ciencia de datos y no tengan que preocuparse por administrar la infraestructura subyacente requerida para impulsar el proceso de ML.

Ahora bien, AWS agregó más de 50 nuevas capacidades a Amazon SageMaker entre 2019 y 2020. Y de la que hablaremos en este blog post es de Amazon SageMaker Autopilot, anunciada desde Re:Invent 2019, que beneficia a nuestros clientes combinando la facilidad de uso de los servicios de AI y las capacidades avanzadas de Amazon SageMaker ya que permite entrenar un modelo con sus propios datos sin necesidad de ser expertos en ML. Con Autopilot de Amazon SageMaker, los clientes de AWS se encuentran en la posición de crear automáticamente modelos de ML con completa visibilidad y control sobre ellos.

 

Beneficios de Amazon SageMaker Autopilot

Típicamente, a los practicantes de ML, les toma semanas o bien meses la construcción, entrenamiento, y optimización de sus modelos de ML. Pensémoslo así, ellos preparan los datos y toman la decisión de qué algoritmos y frameworks aplicar y utilizar. Entendido como un proceso iterativo, los practicantes intentan encontrar el mejor algoritmo para su set de datos y el tipo de problema. Se necesita experiencia e intuición para ejecutar varios experimentos y encontrar los mejores híper-parametros para el algoritmo en cuestión y nuestro set de datos. Y aunque hay científicos de datos experimentados y con intuición desarrollada, también ellos necesitan validar su hipótesis con la ejecución repetida de entrenamientos y validaciones de los modelos.

Amazon SageMaker Autopilot elimina las arduas tareas de creación de modelos de ML y ayuda a crear, entrenar y ajustar de forma automática el mejor modelo de ML basado en los datos. Con SageMaker Autopilot, simplemente se debe proporcionar un conjunto de datos tabular y seleccionar la columna de destino para la predicción, que puede ser un número (como el precio de una casa, llamado “regresión”) o una categoría (como spam o no spam, llamada “clasificación”). Amazon SageMaker Autopilot analizará diferentes soluciones de manera automática para encontrar el mejor modelo. Luego, se podrá implementar directamente el modelo en la etapa de producción con un solo clic o iterar en las soluciones recomendadas con Amazon SageMaker Studio o explorarlas manual y detalladamente en la ruta de salida a fin de mejorar aún más la calidad del modelo.

 

¿Qué es Amazon SageMaker Autopilot?

Amazon SageMaker Autopilot es, en pocas palabras, “el movimiento automático de los datos al modelo”, porque eso es precisamente lo que habilita Amazon SageMaker Autopilot.

Amazon SageMaker Autopilot inspecciona primero el conjunto de datos, hace una selección entre los algoritmos disponibles de los más relevantes al tipo de problema, prepara los datos para facilitar el entrenamiento, y ejecuta una serie de candidatos para averiguar la combinación óptima de pasos que incluyen el preprocesamiento de datos, el uso de algoritmos de ML y la búsqueda de los hiper-parámetros correspondientes.

El siguiente proceso de Autopilot brinda visibilidad y control total:

  1. Se proporcionan los datos: datos en forma de tabla
  2. Se especifica la columna a predecir: actualmente soporta regresión y clasificación
  3. Autopilot crea el modelo: generación de características, selección de algoritmo y optimización de parámetros en distintas combinaciones nombradas candidatos; después el usuario podrá saber que hizo Autopilot para cada candidato
  4. Autopilot registra el experimento en SageMaker: lo cual permite regresar a él para su análisis
  5. Se obtiene un resultado transparente: Autopilot crea dos notebooks con el código fuente generado y utilizado duarante la ejecución automatizada

¿Cuándo utilizar Amazon SageMaker Autopilot?

Amazon SageMaker Autopilot realmente es una buena selección para cierto tipo conjunto de datos, problemas con propiedades y enfoques de solución que son listadas a continuación:

Buena selección de Autopilot No es buena selección de Autopilot
Problema: Regresión, Clasificación (binaria & multiclase) Problema: Visión por computadora, procesamiento de lenguaje natural, secuencias
Faltan pocos valores en el set de datos (Estrategia de imputación) Casi todos los datos faltan en el set de datos
Se puede aprovechar la interpretación de características No se necesita interpretación de las características por adelantado
Análisis de componentes principales (PCA, por sus siglas en inglés) es aceptable durante la fase de ingeniería de características Se necesitan modelos pre-entrenados

Ejemplos de casos de uso

Para moverse rápidamente con problemas básicos de ML, hay una gran oportunidad de que el problema de negocio a resolver mediante ML sea un buen candidato para Autopilot. Veamos algunos casos de uso para ejemplificarlo:

Caso de uso (Tipo de problema ML) Problema y contexto de negocio Solución  Valor y Beneficio

Churn, Predicción de pérdida de clientes

(Clasificación binaria)

El abandono de clientes implica la pérdida de dichos clientes y, por ello, es un factor que todas las empresas buscan eliminar. Los modelos generados de forma automática con Amazon SageMaker Autopilot lo ayudan a comprender los patrones de abandono de los clientes. Los modelos de predicción del abandono de los clientes funcionan, en primer lugar, aprendiendo los patrones de los datos existentes e identificando los patrones de los nuevos conjuntos de datos, de manera que obtenga una predicción acerca de qué clientes tienen más probabilidades de abandono.

Evaluación de riesgos

(Clasificación multiclase)

La evaluación de riesgos requiere la identificación y el análisis de los eventos potenciales que puedan afectar de forma negativa a las personas, a los activos o a la empresa. Los modelos generados de forma automática con Amazon SageMaker Autopilot predicen los riesgos a medida que se desarrollan nuevos eventos. Los modelos de evaluación de riesgos se entrenan con los conjuntos de datos existentes con el fin de obtener predicciones optimizadas para el negocio.

Predicciones de precios

(Regresión)

Predecir el precio de las acciones, los bienes inmuebles y los recursos naturales. Amazon SageMaker Autopilot puede ser utilizado para predecir los precios futuros para ayudar a tomar decisiones acertadas de inversión en función de los datos históricos, como la demanda, las tendencias estacionales y el precio de otros productos básicos. Los modelos para predicciones de precios se utilizan mucho en los sectores de servicios financieros, de bienes raíces, de energía y de servicios públicos

Creando modelos propios de ML con Amazon SageMaker Autopilot

Se puede utilizar Autopilot de diferentes maneras: en piloto automático (de ahí el nombre) o con diversos grados de orientación humana, sin código a través de Amazon SageMaker Studio, o con código utilizando uno de los SDK de AWS. Aquí mostraremos los pasos necesarios mediante código.

Preparar los datos

Amazon SageMaker Autopilot soporta datos de entrada en formato tabular, posteriormente tomará la responsabilidad sobre estos de la limpieza automática y preprocesamiento de datos.

Entonces todo lo que se necesita es proporcionar un archivo CSV con encabezados. Para asegurarse de que no faltan encabezados (CSV mal formateados), se recomienda que se lea y escriba el CSV sin cambios, como se muestra a continuación:

import boto3
from sagemaker.deserializers import CSVDeserializer
from sagemaker.serializers import CSVSerializer
from sagemaker.predictor import Predictor
from time import gmtime, strftime, sleep
import pandas as pd
import sagemaker
 
# Leer los datos utilizando pandas
data = pd.read_csv('train_data.csv')
# No incluir indices 
data.to_csv('automl-train.csv', index=False, header=True)

# Obtener la sesión de SageMaker
session = sagemaker.Session()
# Podemos trabajar en el bucket por defecto para Amazon SageMaker
# en la actual cuenta de AWS 
bucket_name = session.default_bucket()
prefix = 'sagemaker-autopilot'
# Subir los datos a S3
trainpath = session.upload_data( 
   path='automl-train.csv', 
   bucket=bucket_name, 
   key_prefix='{}/input'.format(prefix))   


Crear y entrenar el modelo

  • Establecemos la ubicación del set de datos,
  • Seleccionamos el atributo target que queremos que prediga o infiera el modelo: en este caso, es la columna “target_column”, que bien podría presentar si un cliente aceptó la oferta o no, o si un cliente quiere abandonar el servicio o conservarlo, o si una operación es fraude o no.
  • Establecemos la ubicación de los artefactos una vez entrenados.
my_target_column = 'y'

input_data_config = [
    {
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': 's3://{}/{}/input'.format(bucket_name,prefix)
        }
      },
      'TargetAttributeName': my_target_column
    }
  ]

output_data_config = {
    'S3OutputPath': 's3://{}/{}/output'.format(bucket_name, prefix)
  }
  • Lo más importante y sencillo es crear el Job de AutoML
timestamp_suffix = strftime("%d-%H-%M-%S", gmtime())

auto_ml_job_name = 'automl-dm-' + timestamp_suffix 
region = boto3.Session().region_name

# Este es el cliente para interactuar con SageMaker Autopilot
sm = boto3.client(service_name = 'sagemaker', region_name = region) 

role = sagemaker.get_execution_role()
# Este valor será el número de pruebas distintas que experimentará.
# Al final identificará el candidato que mejor desempeño haya obtenido.
max_candidates = 20
sm.create_auto_ml_job(
    AutoMLJobName=auto_ml_job_name,
    InputDataConfig=input_data_config,
    OutputDataConfig=output_data_config,
    AutoMLJobConfig={"CompletionCriteria":
                     {"MaxCandidates": max_candidates}},
    RoleArn=role,
    GenerateCandidateDefinitionsOnly=False)
  • Posteriormente, permitimos que el job pase por todas las etapas (Starting, AnalyzingData, FeatureEngineering, ModelTuning, GeneratingExplainabilityReport, Completed)
# El job tomará entre 20 y 40  minutos dependiendo la configuración
# establecida previamente en “Completition criteria”.
# Podemos monitorear ese estatus con el siguiente código

print("JobStatus - Secondary Status")
print("------------------------------")
describe_response = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)

print(describe_response["AutoMLJobStatus"] + " - " + describe_response["AutoMLJobSecondaryStatus"])
job_run_status = describe_response["AutoMLJobStatus"]

while job_run_status not in ("Failed", "Completed", "Stopped"):
    describe_response = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)
    job_run_status = describe_response["AutoMLJobStatus"]

    print(
        describe_response["AutoMLJobStatus"] + " - " + describe_response["AutoMLJobSecondaryStatus"]
    )
    sleep(60)

Tip: Es posible, mientras tanto, explorar el progreso de estos Jobs en la sección de Processing Jobs de SageMaker.

 

Obtener predicciones aprovechando el resultado de Autopilot

  • Una vez que el job se ha completado, obtenemos el mejor candidato como resultado del Job de AutoML
best_candidate = sm.describe_auto_ml_job(
    AutoMLJobName=auto_ml_job_name)['BestCandidate']

best_candidate_name = best_candidate['CandidateName']
  • Registramos al mejor candidato (o modelo óptimo) para su despliegue, básicamente el registrar el modelo óptimo de ML en SageMaker consiste en proporcionar el nombre que lo identifique, declarar los contenedores que lo conforman, y el rol que SageMaker puede asumir para acceder a los model artifacts y las docker images.
model_name = 'automl-dm-model' + timestamp_suffix

# Utilizaremos esta API para crear en Amazon SageMaker un modelo
# si se quiere utilizar los servicios de hosting de Amazon SageMaker
# o ejecutar un job de Batch (trabajo de transformación por lotes)
model_arn = sm.create_model(
    Containers=best_candidate['InferenceContainers'], 
    ModelName= model_name, 
    ExecutionRoleArn=role)
  • Creamos una configuración de endpoint, en la cual especificamos principalmente la capacidad de cómputo a utilizar por el endpoint
  • Creamos el endpoint, en el cual será desplegado nuestro modelo óptimo de ML y así estar listo para recibir peticiones con las capacidades declaradas en su configuración
epc_name = best_candidate_name + timestamp_suffix + "-epc"

ep_config = sm.create_endpoint_config(
    EndpointConfigName = epc_name,
    ProductionVariants = [ {'InstanceType': 'ml.m5.2xlarge',
                            'InitialInstanceCount': 1,
                            'ModelName': model_name,
                            'VariantName': 'main'}]) 
                     
ep_name = 'automl-dm-ep' + timestamp_suffix 
                     
create_endpoint_response = sm.create_endpoint(
    EndpointName = ep_name, 
    EndpointConfigName = epc_name)

sm.get_waiter("endpoint_in_service").wait(EndpointName=ep_name)
  • Obtenemos predicciones desde el endpoint desplegado previamente
predictor = Predictor(
    endpoint_name = ep_name,
    sagemaker_session = session,
    serializer = CSVSerializer(),
    deserializer = CSVDeserializer(),
)
# Leer los datos de nuestro conjunto de datos reservado para la prueba final
# del modelo o bien sobre el que se quiere realizar las predicciones
test_data = pd.read_csv('test_data.csv')

# Remover la columna objetivo (my_target_column) del conjunto de datos 
# reservado para las pruebas
test_data_inference = test_data.drop('my_target_column', axis=1)

# Obtenemos las predicciones
prediction = predictor.predict(test_data_inference.to_csv(sep=',',
                                    header=False,
                                    index=False))
# Una vez en dataframe de pandas podemos explorar, evaluar, graficar
# o bien extraer métricas de evaluación
prediction_df = pd.DataFrame(prediction)

Monitoreo

Se puede monitorear Amazon SageMaker mediante Amazon CloudWatch, que recopila y procesa los datos sin formato en métricas legibles casi en tiempo real.  También se pueden establecer alarmas que vigilen determinados umbrales y enviar notificaciones o realizar acciones cuando se cumplan dichos umbrales. Para obtener más información, consulte la Guía del usuario de Amazon CloudWatch.

Limpieza (Opcional)

Es importante, para evitar generar costos no deseados o innecesarios realizar una limpieza de los recursos creados. Básicamente, si un endpoint continua desplegado, aún y cuando este no reciba peticiones, genera costos por la infraestructura en AWS que fue creada.

# El Job de Autopilot crea algunos artefactos tales como conjuntos de datos, 
# scripts de procesamiento, data pre-procesada, etc. Este código los elimina.
s3 = boto3.resource('s3') 
s3_bucket = s3.Bucket(bucket)
job_outputs_prefix = '{}/output/{}'.format(prefix, auto_ml_job_name) 
print(job_outputs_prefix) 
s3_bucket.objects.filter(Prefix = job_outputs_prefix).delete()


# Finalmente, esta operación elimina el endpoint y los recursos asociados,
# todos los modelos generados y los notebooks autogenerados también.
sm.delete_endpoint(EndpointName = ep_name) 
sm.delete_endpoint_config(EndpointConfigName = epc_name) 
sm.delete_model(ModelName = model_name)

Claridad y visibilidad sobre el AutoML

El Job de AutoML atraviesa distintas fases: Analyzing Data, Feature Engineering, Model Tuning & Candidate Reached. Y nos proporciona salidas que dan control, claridad y visibilidad que pueden llamarse de caja blanca (Whitebox).

Model Leaderboard: Amazon SageMaker Autopilot te permite revisar todos los modelos ML que se generan automáticamente para los datos. Se puede ver la lista de modelos, clasificados por métricas como accuracy, precision, recall, y area under the curve (AUC), y entonces, implementar el modelo que más se ajuste a su caso de uso.

Adicionalmente, como ya lo mencionamos al inicio, Autopilot registra automáticamente los experimentos y el detalle se puede consultar en SageMaker Resources, específicamente en Experiments and Trials.

 

 

Amazon SageMaker Autopilot proporciona un informe de explicabilidad, generado por Amazon SageMaker Clarify, que facilita la comprensión y la explicación de cómo los modelos creados con SageMaker Autopilot hacen predicciones. Aquí se puede identificar cómo cada atributo de los datos de entrenamiento contribuye al resultado pronosticado como porcentaje. Cuanto mayor sea el porcentaje, mayor impacto tendrá esa característica sobre las predicciones del modelo. ya que sin duda, es importante desde una persepectiva del negocio identificar las Características (Features) de mayor importancia.

 

 

El Job de AutoML crea dos notebooks que describen el plan que sigue Autopilot para generar modelos candidatos. Un modelo candidato consiste en un pipeline (preparación de datos y entrenamiento) y su algoritmo (tipo y configuración de parámetros).

Data exploration notebook: Se produce un notebook durante la fase de análisis (Analyzing Data) del Job de AutoML que ayudará a identificar problemas o bien estadísticas sobre el conjunto de datos. Se podrán identificar áreas específicas para la investigación con el fin de detectar problemas previos con los datos que pueden dar lugar a un modelo poco óptimo.

 

 

Candidate definition notebook: Este notebook contiene cada paso de preparación de dato, algoritmo y rangos de hiperparámetros sugeridos. Si se opta por producir solo los candidate definition notebooks y no ejecutar el Job de AutoML, entonces, se puede decidir posteriormente qué candidatos se entrenarán y ajustarán, al ejecutarse se optimizan automáticamente y se identifica un mejor candidato final. Si se ejecutó el Job de AutoML directamente sin ver primero a los candidatos, solo se mostrará el notebook del mejor candidato una vez finalizado el Job de AutoML.

 

 

En sintesis, con estos dos notebooks, se puede comprender en detalle cómo se procesan previamente los datos y cómo se crean y optimizan los modelos. Esta transparencia es una característica importante de Amazon SageMaker Autopilot.

 

Más sobre Amazon SageMaker Autopilot

Algunos lectores querrán saber más sobre las características técnicas de Autopilot al día de hoy. Podemos resumir las más relevantes a continuación:

Tipos de problemas Regresión, Clasificación binaria o multiclase
Tipo de entradas de datos Tabular (formato CSV)
Compatibilidad de algoritmos Algoritmos de aprendizaje supervisado:  Linear Learner, XGBoost; Algoritmos de DeepLearning: Multilayer Perceptron (MLP)
Algoritmos de optimización de hiper-parámetros Bayesian Search, Random Search
Método de validación  K-fold cross-validation (cuando sea necesario)
Métricas objetivo para medir la calidad predictiva MSE, Accuracy, F1, AUC, F1macro
Modo de entrenamiento Distribuido y paralelo en clúster administrado por AWS
Condiciones de completitud de entrenamiento MaxCandidates, MaxAutoMLJobRuntimeInSeconds, MaxRuntimePerTrainingJobInSeconds,

Para mayor detalle,  es posible profundizar en la documentación en línea de Amazon SageMaker Autopilot (ML automatizado).

 

Conclusión

Hemos visto cómo con Amazon SageMaker Autopilot se puede obtener valor rápidamente con unos sencillos pasos. Siempre centrados en los clientes, la misión de AWS es poner el ML en las manos de cualquier organización, unidad de negocio, persona sin importar su grado de experiencia con ML.

Decenas de miles de clientes están ejecutando machine learning en AWS, impulsados por la amplia adopción de Amazon SageMaker. Si bien se está haciendo un increíble progreso en las organizaciones que usan Machine Learning e Inteligencia Artificial, continuamos relativamente en el principio. Por ello, como nos gusta decir en AWS, ¡sigamos construyendo! y en este caso ¡sigamos construyendo modelos de ML!

 

Recursos Adicionales

 


Sobre el autor

Iván González es arquitecto de soluciones en AWS México.

 

 

 

 

 

Sobre los revisores

Edzon Sanchez es arquitecto de soluciones especialista en AI/ML en AWS México.

 

 

 

 

 

Luisa Vesga es arquitecta de soluciones para el equipo de Startups en AWS Colombia.

 

 

 

 

 

Leandro Santi es arquitecto de soluciones del sector público en AWS Argentina.

 

 

 

 

 

Conozca más contenidos sobre Inteligencia Artificial en la página de sesiones bajo demanda.

Acesse >