Creazione e addestramento di un modello di machine learning in locale

TUTORIAL

Panoramica

In questo tutorial imparerai come creare e addestrare un modello di machine learning (ML) in locale all'interno di un notebook di Amazon SageMaker Studio.

Amazon SageMaker Studio è un ambiente di sviluppo integrato (IDE) per il ML che fornisce un'interfaccia notebook Jupyter completamente gestita in cui è possibile eseguire attività end-to-end del ciclo di vita del ML. Con SageMaker Studio puoi creare ed esplorare set di dati, preparare i dati di addestramento, costruire e addestrare i modelli e implementare i modelli addestrati per l'inferenza, tutto in un unico posto.

Nello sviluppo del ML, una pratica comune consiste nell'esplorare un campione del set di dati e iterare su più modelli e configurazioni di parametri prima dell'addestramento con il set di dati completo. Per questa fase di esplorazione, Amazon SageMaker fornisce la modalità locale che consente di testare la logica di addestramento, provare diversi approcci di modellamento e misurare le prestazioni del modello prima di eseguire i processi di addestramento su vasta scala.

Per questo tutorial utilizzerai un set di dati sui sinistri di assicurazione auto generato artificialmente. Gli input sono i set di dati di addestramento e test, ciascuno contenente dettagli e funzionalità estratte su sinistri e clienti insieme a una colonna fraud che indica se un incidente era fraudolento o meno. Utilizzerai il framework XGBoost open source per creare un prototipo di modello di classificazione binaria su questo set di dati artificiale per prevedere la probabilità che un incidente sia fraudolento.

Obiettivi

Con questa guida, imparerai a:

  • Importare i dati di addestramento da Amazon S3 a Amazon SageMaker
  • Creare e addestrare un modello XGBoost in locale
  • Salvare il modello addestrato e gli artefatti in Amazon S3

Prerequisiti

Prima di iniziare questa guida, avrai bisogno di:

 Esperienza AWS

Principiante

 Tempo per il completamento

15 minuti

 Costo richiesto per il completamento

Per una stima dei costi di questo tutorial, consulta Prezzi di SageMaker.

 Requisiti

Devi aver effettuato l'accesso con un account AWS.

 Servizi utilizzati

Amazon SageMaker Studio

 Ultimo aggiornamento

7 luglio 2022

Implementazione

Fase 1: Configurazione del dominio di Amazon SageMaker Studio

Con Amazon SageMaker puoi implementare un modello visivamente utilizzando la console o in maniera programmatica utilizzando SageMaker Studio o i notebook SageMaker. In questo tutorial, il modello viene implementato in maniera programmatica tramite un notebook SageMaker Studio, che richiede un dominio di SageMaker Studio.

Un account AWS può avere solo un dominio SageMaker Studio per regione. Se hai già un dominio SageMaker Studio nella regione Stati Uniti orientali (Virginia settentrionale), consulta la Guida alla configurazione di SageMaker Studio per collegare le policy AWS IAM richieste all'account SageMaker Studio, quindi salta la fase 1 e passa direttamente alla fase 2. 

Se invece non disponi di un dominio SageMaker Studio, continua con la fase 1 per eseguire un modello AWS CloudFormation che crea un dominio SageMaker Studio e aggiunge le autorizzazioni necessarie per il resto di questo tutorial.

Scegli il link dello stack AWS CloudFormation. Questo link apre la console AWS CloudFormation e crea il dominio SageMaker e un utente denominato studio-user. Inoltre aggiunge le autorizzazioni richieste al tuo account SageMaker Studio. Nella console CloudFormation, conferma che Stati Uniti orientali (Virginia settentrionale) sia la regione visualizzata nell'angolo in alto a destra. Il nome dello stack deve essere CFN-SM-IM-Lambda-catalog e non può essere modificato. Questo stack richiede circa 10 minuti per creare tutte le risorse.

Assume inoltre che sia presente un VPC pubblico configurato nell'account. Se non hai un VPC pubblico, consulta VPC con una singola sottorete pubblica per scoprire come creare un VPC pubblico. 

Seleziona I acknowledge that AWS CloudFormation might create IAM resources (Sono consapevole che AWS CloudFormation può creare le risorse IAM), quindi scegli Create stack (Crea stack).

Nel riquadro CloudFormation, scegli Stacks (Stack). La creazione dello stack richiede circa 10 minuti. Una volta creato lo stack, il suo stato passerà da CREATE_IN_PROGRESS a CREATE_COMPLETE

Fase 2: Configurazione di un notebook SageMaker Studio

In questa fase, avvierai un nuovo notebook SageMaker Studio, installerai le librerie open source necessarie e configurerai le variabili SageMaker necessarie per interagire con altri servizi, tra cui Amazon Simple Storage Service (Amazon S3).

Digita SageMaker Studio nella barra di ricerca della console, quindi scegli SageMaker Studio.

Scegli US East (N. Virginia) (Stati Uniti orientali [Virginia settentrionale]) dall'elenco a discesa Region (Regione) nell'angolo in alto a destra della console SageMaker. In Launch app (Avvia app), seleziona Studio per aprire SageMaker Studio utilizzando il profilo studio-user.

Apri l'interfaccia di SageMaker Studio. Sulla barra di navigazione, scegli FileNew (Nuovo), Notebook

Nella finestra di dialogo Set up notebook environment (Configura ambiente notebook), in Image (Immagine), seleziona Data Science (Data science). Il kernel Python 3 viene selezionato automaticamente. Scegli Select (Seleziona). 

Il kernel nell'angolo in alto a destra del notebook dovrebbe visualizzare Python 3 (Data Science) (Python 3 [data science]).

Copia e incolla il seguente frammento di codice in una cella nel notebook, quindi premi Maius+Invio per eseguire la cella corrente per aggiornare la libreria aiobotocore, che è un'API per interagire con numerosi servizi AWS, e installa la libreria XGBoost. Ignora le eventuali avvertenze per riavviare il kernel o gli errori di conflitto delle dipendenze.

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

Devi inoltre creare un'istanza dell'oggetto client S3 e delle posizioni all'interno del bucket S3 predefinito in cui sono caricati contenuti quali parametri e artefatti del modello. Per far ciò, copia e incolla il seguente blocco di codice ed esegui la cella. Tieni presente che il nome del bucket di scrittura deriva dall'oggetto di sessione di SageMaker. Il nome del bucket predefinito è sagemaker-<regione>-<id-account>. Questo bucket è dove vengono caricati tutti gli artefatti di addestramento. I set di dati che utilizzi per l'addestramento sono presenti in un bucket S3 pubblico denominato sagemaker-sample-files, che è stato specificato come bucket di lettura. La posizione nel bucket viene specificata tramite il prefisso di lettura.

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}"

Fase 3: Addestramento di un modello XGBoost

In questa fase, configurerai e addestrerai un modello di classificazione binaria XGBoost sul set di dati dei sinistri dell'assicurazione auto generato artificialmente e valuterai le prestazioni del modello. Utilizzerai la colonna fraud come colonna di destinazione. Lo scopo è addestrare un classificatore binario XGBoost in grado di differenziare i sinistri fraudolenti da quelli legittimi e misurare le prestazioni del modello di base.


Il framework XGBoost open source espone più iperparametri che possono essere usati per controllare le prestazioni del modello. Ai fini di questo tutorial, vengono impostati alcuni degli iperparametri importanti e l'area sotto Receiver Operating Characteristic Area Under the Curve (ROC-AUC) viene scelta come parametro di valutazione. Copia e incolla il seguente blocco di codice in una celle ed eseguilo per convalidare e addestrare un modello 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}")

I punteggi AUC di addestramento e convalida incrociati vengono visualizzati dopo l'esecuzione della cella. I tuoi punteggi potrebbero essere leggermente diversi a causa della natura stocastica del processo di costruzione del modello. Tuttavia, la differenza nelle prestazioni di addestramento e test indica che è molto probabile che il modello stia sovraadattando il set di dati di addestramento in base alle combinazioni di iperparametri scelte. In qualità di data scientist, puoi utilizzare queste informazioni per perfezionare il modello prima dell'addestramento su vasta scala.

Dopo aver misurato le prestazioni con convalida incrociata, invece di suddividere il set di dati di addestramento in più parti, puoi riaddestrare il modello sul set di dati di addestramento completo utilizzando invece il set di test per l'arresto anticipato. L'arresto anticipato aiuta a controllare la complessità del modello e riduce l'overfitting. Copia e incolla il seguente blocco di codice per riaddestrare e valutare i set di dati di addestramento e test. Tieni presente che il riaddestramento in modalità locale significa che il set di dati viene estratto da Amazon S3 all'ambiente dell'istanza locale di SageMaker Studio. L'istanza di SageMaker Studio deve avere spazio sufficiente per archiviare i dati in locale.

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}")

Ciò completa l'addestramento e la valutazione di un modello di classificazione binaria sul set di dati dei sinistri dell'assicurazione auto. Copia e incolla il seguente blocco di codice per salvare i parametri di valutazione come file JSON e il modello addestrato come file di selezione. Il codice salva sia nella directory locale all'interno di SageMaker Studio che nel bucket S3 predefinito.

# 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)

Fase 4: Eliminazione delle risorse

Per evitare di ricevere addebiti non desiderati, una best practice consigliata consiste nell'eliminare le risorse non più utilizzate.

Per eliminare il bucket S3, completa le seguenti operazioni: 

  • Apri la console Amazon S3. Sulla barra di navigazione, scegli Buckets (Bucket), sagemaker-<regione>-<id-account>, quindi seleziona la casella di controllo accanto a fraud-detect-demo. Quindi, seleziona Elimina
  • Nella finestra di dialogo Delete objects (Elimina oggetti), verifica di aver selezionato l'oggetto corretto da eliminare, quindi digita permanently delete nella casella di conferma Permanently delete objects (Elimina definitivamente gli oggetti). 
  • Una volta completato e il bucket è vuoto, potrai eliminare il bucket sagemaker-<regione>-<id-account> eseguendo di nuovo la stessa procedura.

Il kernel Data science utilizzato per eseguire l'immagine del notebook in questo tutorial accumulerà costi fino a quando non lo interromperai o eseguirai i passaggi riportati di seguito per eliminare le app. Per ulteriori informazioni, consulta Risorse di arresto nella Guida per gli sviluppatori di Amazon SageMaker.

Per eliminare le app SageMaker Studio, completa la seguente procedura: nella console SageMaker Studio, scegli studio-user, quindi elimina tutte le app riportate in Apps (App) selezionando Delete app (Elimina app). Attendi fino a che Status (Stato) diventa Deleted (Eliminato).

Se nella fase 1 hai utilizzato un dominio SageMaker Studio esistente, salta il resto della fase 4 e procedi direttamente alla sezione conclusiva. 

Se hai eseguito il modello CloudFormation nella fase 1 per creare un nuovo dominio SageMaker Studio, continua con le fasi seguenti per eliminare il dominio, l'utente e le risorse create dal modello CloudFormation.  

Per aprire la console CloudFormation, immetti CloudFormation nella barra di ricerca della console AWS, quindi scegli CloudFormation dai risultati della ricerca.

Nel riquadro CloudFormation, scegli Stacks (Stack). Dall'elenco a discesa degli stati, seleziona Active (Attivo). In Stack name (Nome stack), scegli CFN-SM-IM-Lambda-catalog per aprire la pagina dei dettagli dello stack.

Nella pagina dei dettagli dello stack CFN-SM-IM-Lambda-catalog, scegli Delete (Elimina) per eliminare lo stack insieme alle risorse create nella fase 1.

Conclusioni

Congratulazioni! Hai terminato il tutorial Creazione e addestramento di un modello di machine learning in locale

In questo tutorial hai utilizzato Amazon SageMaker Studio per creare un modello di classificazione binaria in locale tramite la libreria open source XGBoost e hai salvato gli artefatti del modello e gli output in Amazon S3. Come mostrato in questo tutorial, con la prototipazione rapida in SageMaker Studio, puoi valutare le prestazioni del modello e i potenziali problemi di overfitting prima dell'addestramento del modello in produzione utilizzando il set di dati completo.

Puoi continuare il tuo percorso da data scientist con Amazon SageMaker completando le fasi successive riportate di seguito.

Questa pagina è stata utile?

Fasi successive

Creazione automatica di un modello di ML

Scopri come utilizzare AutoML per sviluppare i modelli di ML senza scrivere codice.
Successivo »

Implementazione di un modello addestrato

Scopri come implementare un modello di ML addestrato per l'inferenza.
Successivo »

Trova altri tutorial pratici

Esplora altri tutorial di machine learning per approfondire.
Successivo »