Criar e treinar um modelo de machine learning no local

TUTORIAL

Visão geral

Neste tutorial, você aprenderá a criar e treinar um modelo de machine learning (ML) no local em seu bloco de anotações do Amazon SageMaker Studio.

O Amazon SageMaker Studio é um ambiente de desenvolvimento integrado (IDE) para ML que fornece uma interface de caderno Jupyter totalmente gerenciada na qual você pode executar tarefas completas do ciclo de vida de ML. Usando o SageMaker Studio, é possível criar e explorar conjuntos de dados, preparar dados de treinamento, desenvolver e treinar modelos e implementar modelos treinados para inferência. Você pode fazer tudo isso em um só lugar.

Uma prática comum do desenvolvimento de ML é explorar uma amostra do conjunto de dados e iterar em várias configurações de modelo e parâmetro antes de treinar com o conjunto de dados completo. Para esta etapa de exploração, o Amazon SageMaker oferece o modo local, que permite testar sua lógica de treinamento, experimentar diferentes métodos de modelagem e avaliar a performance do modelo antes de executar trabalhos de treinamento em escala completa.

Para este tutorial, você usará um conjunto de dados de solicitações de sinistro de automóvel que foi gerado sinteticamente. As entradas são os conjuntos de dados de treinamento, validação e teste. Cada um desses conjuntos contém detalhes e recursos extraídos sobre solicitações e clientes, com uma coluna fraud (fraude) indicando se a reclamação foi fraudulenta ou não. Você usará o framework XGBoost de código aberto para criar um protótipo do modelo de classificação binária nesse conjunto de dados sintético e prever a probabilidade de uma solicitação ser fraudulenta.

O que você aprenderá

Neste guia, você vai:

  • Ingerir dados de treinamento do Amazon S3 para o Amazon SageMaker
  • Criar e treinar um modelo do XGBoost no local
  • Salvar o modelo e os artefatos treinados no Amazon S3

Pré-requisitos

Antes de iniciar este guia, você precisará de:

  • Uma conta da AWS: caso ainda não tenha uma conta, siga o guia de conceitos básicos Configurar seu ambiente da AWS para obter uma breve visão geral.

 AWS Experience

Iniciante

 Tempo para a conclusão

15 minutos

 Custo para a conclusão

Consulte os preços do SageMaker para estimar o custo deste tutorial.

 Requisitos

É necessário se conectar a uma conta da AWS.

 Serviços usados

Amazon SageMaker Studio

 Data da última atualização

7 de julho de 2022

Implementação

Etapa 1: configurar o domínio do Amazon SageMaker Studio

Com o Amazon SageMaker, é possível implantar um modelo visualmente pelo console ou de maneira programática com o SageMaker Studio ou blocos de anotações do SageMaker. Neste tutorial, implante o modelo de maneira programática usando um bloco de anotação do SageMaker Studio, que requer um domínio do SageMaker Studio.

Uma conta da AWS pode ter apenas um domínio do SageMaker Studio por região. Caso já tenha um domínio do SageMaker Studio na região Leste dos EUA (Norte da Virgínia), siga o guia de configuração do SageMaker Studio para anexar as políticas do AWS IAM necessárias à conta do SageMaker Studio, ignore a Etapa 1 e vá diretamente para a Etapa 2. 

Caso não tenha um domínio SageMaker Studio, continue com os passos da Etapa 1 para executar um modelo do AWS CloudFormation que cria um domínio do SageMaker Studio e adiciona as permissões necessárias para finalizar este tutorial.

Escolha o link da pilha do AWS CloudFormation. Esse link abre o console do AWS CloudFormation e cria seu domínio do SageMaker Studio e um usuário chamado studio-user. Também adiciona as permissões necessárias a sua conta do SageMaker Studio. No console do CloudFormation, confirme se US East (N. Virginia) (Leste dos EUA [Norte da Virgínia]) é a Region (Região) exibida no canto superior direito. O Stack name (Nome da pilha) deve ser CFN-SM-IM-Lambda-catalog e não poderá ser alterado. Essa pilha leva cerca de dez minutos para criar todos os recursos.

A pilha pressupõe que você já tenha uma VPC pública configurada na conta. Se você não tiver uma VPC pública, consulte VPC com uma única sub-rede pública para aprender a criar uma VPC pública. 

Selecione I acknowledge that AWS CloudFormation might create IAM resources (Estou ciente de que o AWS CloudFormation pode criar recursos do IAM) e escolha Create stack (Criar pilha).

No painel do CloudFormation, escolha Stacks (Pilhas). A pilha leva cerca de dez minutos para ser criada. Quando a pilha é criada, o status da pilha é mudado de CREATE_IN_PROGRESS para CREATE_COMPLETE

Etapa 2: configurar um bloco de anotações do SageMaker Studio

Nesta etapa, você executará um novo bloco de anotações do SageMaker Studio, instalará as bibliotecas de código aberto necessárias e configurará as variáveis do SageMaker necessárias para interagir com outros serviços, como o Amazon Simple Storage Service (Amazon S3).

Digite SageMaker Studio na barra de pesquisa do console e escolha SageMaker Studio.

Escolha US East (N. Virginia) (Leste dos EUA [Norte da Virgínia]) na lista suspensa Region (Região) no canto superior direito do console do SageMaker. Em Launch app (Iniciar aplicação), selecione Studio para abrir o SageMaker Studio usando o perfil studio-user.

Abra a interface do SageMaker Studio. Na barra de navegação, escolha File (Arquivo), New (Novo), Notebook (Bloco de anotações). 

Na caixa de diálogo Set up notebook environment (Configurar ambiente de bloco de anotações), em Image (Imagem), selecione Data Science (Ciência de dados). O kernel Python 3 é selecionado automaticamente. Escolha Select (Selecionar). 

O kernel no canto superior direito do bloco de anotações agora deverá exibir Python 3 (Data Science) (Ciência de dados).

Copie e cole o seguinte trecho de código em uma célula do bloco de anotações e pressione Shift+Enter para executar a célula atual para atualizar a biblioteca aiobotocore, que é uma API para interagir com muitos dos produtos da AWS, e instale a biblioteca XGBoost. Ignore avisos para reiniciar o kernel ou qualquer erro de conflito de dependência.

%pip install --upgrade -q aiobotocore
%pip install -q  xgboost==1.3.1

Também é necessário criar uma instância do objeto de cliente do S3 e definir os locais do bucket do S3 padrão em que conteúdos como métricas e artefatos de modelo serão carregados. Para isso, copie e cole o bloco de código a seguir e execute a célula. O nome do bucket de gravação é derivado do objeto de sessão do SageMaker. O nome de seu bucket padrão é sagemaker-<your-Region>-<your-account-id>. Esse é o bucket em que todos os artefatos de treinamento são carregados. Os conjuntos de dados que você usa para treinamento estão localizados em um bucket público do S3 chamado sagemaker-sample-files, que foi especificado como o bucket de leitura. A localização no bucket é especificada no prefixo de leitura.

import pandas as pd
import boto3
import sagemaker
import json
import joblib
import xgboost as xgb
from sklearn.metrics import roc_auc_score

# Set SageMaker and S3 client variables
sess = sagemaker.Session()

region = sess.boto_region_name
s3_client = boto3.client("s3", region_name=region)

sagemaker_role = sagemaker.get_execution_role()

# Set read and write S3 buckets and locations
write_bucket = sess.default_bucket()
write_prefix = "fraud-detect-demo"

read_bucket = "sagemaker-sample-files"
read_prefix = "datasets/tabular/synthetic_automobile_claims" 

train_data_key = f"{read_prefix}/train.csv"
test_data_key = f"{read_prefix}/test.csv"
model_key = f"{write_prefix}/model"
output_key = f"{write_prefix}/output"

train_data_uri = f"s3://{read_bucket}/{train_data_key}"
test_data_uri = f"s3://{read_bucket}/{test_data_key}"

Etapa 3: treinar um modelo do XGBoost

Nesta etapa, você configurará e treinará um modelo de classificação binária do XGBoost no conjunto de dados sintético de sinistro de seguro de automóvel e avaliará a performance do modelo. Use a coluna chamada fraud (fraude) como coluna de destino. O objetivo é treinar um classificador binário XGBoost que consiga diferenciar solicitações fraudulentas de legítimas e avaliar a performance do modelo de referência.


O framework XGBoost de código aberto expõe vários hiperparâmetros que podem ser usados para controlar a performance do modelo. Para fins deste tutorial, poucos hiperparâmetros importantes foram definidos, e a área sob a curva de característica de operação do receptor (ROC-AUC) foi escolhida como métrica de avaliação. Copie e cole o bloco de código a seguir em uma célula e execute-o para validar e treinar um modelo do XGBoost. 

hyperparams = {
                "max_depth": 3,
                "eta": 0.2,
                "objective": "binary:logistic",
                "subsample" : 0.8,
                "colsample_bytree" : 0.8,
                "min_child_weight" : 3
              }

num_boost_round = 100
nfold = 3
early_stopping_rounds = 10



# Set up data input
label_col = "fraud"
data = pd.read_csv(train_data_uri)

# Read training data and target
train_features = data.drop(label_col, axis=1)
train_label = pd.DataFrame(data[label_col])
dtrain = xgb.DMatrix(train_features, label=train_label)

# Cross-validate on training data
cv_results = xgb.cv(
    params=hyperparams,
    dtrain=dtrain,
    num_boost_round=num_boost_round,
    nfold=nfold,
    early_stopping_rounds=early_stopping_rounds,
    metrics=["auc"],
    seed=10,
)


metrics_data = {
    "binary_classification_metrics": {
        "validation:auc": {
            "value": cv_results.iloc[-1]["test-auc-mean"],
            "standard_deviation": cv_results.iloc[-1]["test-auc-std"]
        },
        "train:auc": {
            "value": cv_results.iloc[-1]["train-auc-mean"],
            "standard_deviation": cv_results.iloc[-1]["train-auc-std"]
        },
    }
}


print(f"Cross-validated train-auc:{cv_results.iloc[-1]['train-auc-mean']:.2f}")
print(f"Cross-validated validation-auc:{cv_results.iloc[-1]['test-auc-mean']:.2f}")

As pontuações de treinamento de validação cruzada e de validação de AUC são exibidas depois que você executa a célula. As pontuações podem ser ligeiramente diferentes por causa da natureza aleatória do processo de desenvolvimento do modelo. Porém, a diferença na performance de treinamento e de teste indica que o modelo provavelmente está sobreajustando o conjunto de dados de treinamento por causa das combinações de hiperparâmetros escolhidas. Como cientista de dados, utilize esse insight para refinar o modelo antes do treinamento em escala completa.

Após medir a performance da validação cruzada, em vez de dividir o conjunto de dados de treinamento em algumas partições, você pode treinar novamente o modelo no conjunto de dados de treinamento completo enquanto usa o conjunto de teste para antecipar a interrupção. A interrupção antecipada ajuda a controlar a complexidade do modelo e reduz o sobreajuste. Copie e cole o bloco de código a seguir para treinar novamente e avaliar os conjuntos de dados de treinamento e de teste. Treinar novamente no modo local significa que o conjunto de dados é extraído do Amazon S3 para o ambiente de instâncias local do SageMaker Studio. A instância do SageMaker Studio deve ter espaço suficiente para armazenar dados no local.

data = pd.read_csv(test_data_uri)
test_features = data.drop(label_col, axis=1)
test_label = pd.DataFrame(data[label_col])
dtest = xgb.DMatrix(test_features, label=test_label)

model = (xgb.train(params=hyperparams, dtrain=dtrain, evals = [(dtrain,'train'), (dtest,'eval')], num_boost_round=num_boost_round, 
                  early_stopping_rounds=early_stopping_rounds, verbose_eval = 0)
        )

# Test model performance on train and test sets
test_pred = model.predict(dtest)
train_pred = model.predict(dtrain)

test_auc = roc_auc_score(test_label, test_pred)
train_auc = roc_auc_score(train_label, train_pred)

print(f"Train-auc:{train_auc:.2f}, Test-auc:{test_auc:.2f}")

Isso conclui o treinamento e a avaliação de um modelo de classificação binária no conjunto de dados de sinistros de seguro automotivo. Copie e cole o bloco de código a seguir para salvar as métricas de avaliação como um arquivo JSON e o modelo treinado como um arquivo pickle. O código é salvo no diretório local no SageMaker Studio e no bucket do S3 padrão.

# Save model and performance metrics locally

with open("./metrics.json", "w") as f:
    json.dump(metrics_data, f)

with open("./xgboost-model", "wb") as f:
    joblib.dump(model, f)    
    
# Upload model and performance metrics to S3

metrics_location = output_key + "/metrics.json"
model_location = model_key + "/xgboost-model"

s3_client.upload_file(Filename="./metrics.json", Bucket=write_bucket, Key=metrics_location)
s3_client.upload_file(Filename="./xgboost-model", Bucket=write_bucket, Key=model_location)

Etapa 4: limpar os recursos

Para evitar cobranças não intencionais, é uma prática recomendada excluir recursos que você não esteja mais usando.

Para excluir o bucket do S3, faça o seguinte: 

  • Abra o console do Amazon S3. Na barra de navegação, escolha Buckets, sagemaker-<your-Region>-<your-account-id>, e marque a caixa de seleção ao lado de fraud-detect-demo. Selecione Delete (Excluir). 
  • Na caixa de diálogo Delete objects (Excluir objetos), verifique se você selecionou o objeto correto para excluir e digite permanently delete (excluir permanentemente) na caixa de confirmação Permanently delete objects (Excluir objetos permanentemente). 
  • Quando esse passo for concluído e o bucket estiver vazio, você poderá excluir o bucket sagemaker-<your-Region>-<your-account-id> realizando o mesmo procedimento novamente.

O kernel Data Science usado para executar a imagem do bloco de anotações neste tutorial acumulará cobranças até você interromper o kernel ou executar as etapas a seguir para excluir as aplicações. Para obter mais informações, consulte Shut Down Resources (Desativar recursos) no Guia do desenvolvedor do Amazon SageMaker.

Para excluir as aplicações do SageMaker Studio, faça o seguinte: no console do SageMaker Studio, escolha studio-user e exclua todas as aplicações listadas em Apps (Aplicações) escolhendo Delete app (Excluir aplicação). Aguarde até o Status ser alterado para Deleted (Excluído).

Se você usou um domínio existente do SageMaker Studio na Etapa 1, ignore o restante da Etapa 4 e vá diretamente para a seção de conclusão. 

Se você executou o modelo do CloudFormation na Etapa 1 para criar um novo domínio do SageMaker Studio, prossiga com as etapas a seguir para excluir o domínio, o usuário e os recursos criados pelo modelo do CloudFormation.  

Para abrir o console do CloudFormation, insira CloudFormation na barra de pesquisa do Console da AWS e escolha CloudFormation nos resultados da pesquisa.

No painel do CloudFormation, escolha Stacks (Pilhas). Na lista suspensa de status, selecione Active (Ativo). Em Stack name (Nome da pilha), escolha CFN-SM-IM-Lambda-catalog para abrir a página de detalhes da pilha.

Na página de detalhes da pilha CFN-SM-IM-Lambda-catalog, escolha Delete (Excluir) para excluir a pilha junto com os recursos que ela criou na Etapa 1.

Conclusão

Parabéns! Você concluiu o tutorial Criar e treinar um modelo de machine learning no local

Neste tutorial, você usou o Amazon SageMaker Studio para criar um modelo de classificação binária no local usando a biblioteca de código aberto XGBoost e salvou os artefatos e as saídas do modelo no Amazon S3. Como demonstrado neste tutorial, com a prototipagem rápida no SageMaker Studio, é possível avaliar a performance do modelo e possíveis problemas de sobreajuste antes de treinar o modelo de produção usando o conjunto de dados completo.

Continue sua jornada como cientista de dados com o Amazon SageMaker seguindo a seção de próximas etapas abaixo.

Esta página foi útil para você?

Próximas etapas

Criar um modelo de machine learning automaticamente

Aprenda a usar o AutoML para desenvolver modelos de ML sem escrever código.
Próximo »

Implantar um modelo treinado

Aprenda a implantar um modelo de ML treinado para inferência.
Próximo »

Encontre mais tutoriais práticos

Veja outros tutoriais de machine learning para se aprofundar.
Próximo »