Création et entraînement d'un modèle de machine learning au niveau local

DIDACTICIEL

Présentation

Dans ce didacticiel, vous apprenez à créer et à entraîner un modèle de machine learning (ML) au niveau local dans votre bloc-notes Amazon SageMaker Studio.

Amazon SageMaker Studio est un environnement de développement intégré (IDE) pour le ML qui fournit une interface de bloc-notes Jupyter entièrement gérée dans laquelle vous pouvez effectuer des tâches de bout en bout du cycle de vie du ML. SageMaker Studio vous permet de créer et d'explorer des jeux de données, de préparer des données d'entraînement, de créer et d'entraîner des modèles, et de déployer des modèles entraînés pour l'inférence, le tout en un seul endroit.

L'exploration d'un échantillon du jeu de données et l'itération sur de multiples configurations de modèles et de paramètres avant de s'entraîner avec le jeu de données complet est une pratique courante dans le développement du ML. Pour cette étape d'exploration, Amazon SageMaker propose le mode local, qui vous permet de tester votre logique d'entraînement, d'essayer différentes approches de modélisation et d'évaluer les performances du modèle avant d'exécuter des tâches d'entraînement à grande échelle.

Pour ce didacticiel, vous utilisez un jeu de données de synthèse de sinistres d'assurance automobile. Les données d'entrée sont les jeux de données d'entraînement et de test, chacun contenant des détails et des caractéristiques extraites concernant des sinistres et des clients, ainsi qu'une colonne fraud (fraude) indiquant si un sinistre est frauduleux ou non. Vous utilisez le cadre open source XGBoost pour prototyper un modèle de classification binaire sur ce jeu de données de synthèse afin de prédire la probabilité qu'un sinistres soit frauduleux.

Qu'allez-vous accomplir ?

Avec ce guide, vous allez :

  • Intégrer les données d'entraînement d'Amazon S3 dans Amazon SageMaker
  • Créer et entraîner un modèle XGBoost localement
  • Enregistrer le modèle entraîné et les artefacts sur Amazon S3

Prérequis

Pour pouvoir démarrer ce guide, vous avez besoin de ce qui suit :

 Expérience AWS

Débutant

 Durée

15 minutes

 Coût de réalisation

Consultez la tarification de SageMaker pour estimer le coût de ce didacticiel.

 Éléments requis

Vous devez être connecté à un compte AWS.

 Services utilisés

Amazon SageMaker Studio

 Date de la dernière mise à jour

7 juillet 2022

Implémentation

Étape 1 : configuration de votre domaine Amazon SageMaker Studio

Avec Amazon SageMaker, vous pouvez déployer un modèle visuellement à l'aide de la console ou par programmation à l'aide de SageMaker Studio ou des blocs-notes SageMaker. Dans ce didacticiel, vous déployez le modèle de manière programmatique à l'aide d'un bloc-notes SageMaker Studio, ce qui nécessite un domaine SageMaker Studio.

Un compte AWS ne peut avoir qu'un seul domaine SageMaker Studio par région. Si vous possédez déjà un domaine SageMaker Studio dans la région USA Est (Virginie du Nord), suivez le Guide de configuration de SageMaker Studio pour joindre les politiques AWS IAM requises à votre compte SageMaker Studio, puis sautez l'étape 1 et passez directement à l'étape 2. 

Si vous ne disposez pas d'un domaine SageMaker Studio existant, poursuivez avec l'étape 1 pour exécuter un modèle AWS CloudFormation qui crée un domaine SageMaker Studio et ajoute les autorisations requises pour la suite de ce didacticiel.

Choisissez le lien de la pile AWS CloudFormation. Ce lien ouvre la console AWS CloudFormation et crée votre domaine SageMaker Studio ainsi qu'un utilisateur nommé studio-user. Il ajoute également les autorisations requises à votre compte SageMaker Studio. Dans la console CloudFormation, confirmez que USA Est (Virginie du Nord) est la région affichée dans le coin supérieur droit. Le nom de la pile doit être CFN-SM-IM-Lambda-Catalog, et ne doit pas être modifié. Cette pile prend environ 10 minutes pour créer toutes les ressources.

Cette pile repose sur l'hypothèse que vous avez déjà configuré un VPC public dans votre compte. Si vous ne disposez pas d'un VPC public, veuillez consulter la rubrique VPC with a single public subnet (VPC avec un seul sous-réseau public) pour savoir comment créer un VPC public. 

Sélectionnez I acknowledge that AWS CloudFormation might create IAM resources (J'accepte qu'AWS CloudFormation puisse créer des ressources IAM), puis choisissez Create stack (Créer la pile).

Dans le volet CloudFormation, choisissez Stacks (Piles). Il faut environ 10 minutes pour que la pile soit créée. Lorsque la pile est créée, son statut passe de CREATE_IN_PROGRESS (Création en cours) à CREATE_COMPLETE (Création terminée). 

Étape 2 : configuration d'un bloc-notes SageMaker Studio

Au cours de cette étape, vous lancez un nouveau bloc-notes SageMaker Studio, installez les bibliothèques open source nécessaires et configurez les variables SageMaker requises pour interagir avec d'autres services, notamment Amazon Simple Storage Service (Amazon S3).

Saisissez SageMaker Studio dans la barre de recherche de la console, puis choisissez SageMaker Studio.

Choisissez USA Est (Virginie du Nord) dans la liste déroulante Region (Région) située dans le coin supérieur droit de la console SageMaker. Pour Launch app (Lancer l'application), sélectionnez Studio pour ouvrir SageMaker Studio à l'aide du profil studio-user.

Ouvrez l'interface SageMaker Studio. Dans la barre de navigation, choisissez File (Fichier), New (Nouveau), Notebook (Bloc-notes). 

Dans la boîte de dialogue Set up notebook environment (Configuration de l'environnement du bloc-notes), sous Image, sélectionnez Data Science (Science des données). Le noyau Python 3 est sélectionné automatiquement. Choisissez Select (Sélectionner).

Le kernel (noyau) dans le coin supérieur droit du bloc-notes devrait maintenant afficher Python 3 (Data Science) (Python 3 [Science des données]).

Copiez et collez l'extrait de code suivant dans une cellule du bloc-note, et appuyez sur Shift+Enter (Maj+Entrée) pour exécuter la cellule actuelle afin de mettre à jour la bibliothèque aiobotocore, qui est une API permettant d'interagir avec de nombreux services AWS, et d'installer la bibliothèque XGBoost. Ignorez tout avertissement de redémarrage noyau ou toute erreur de conflit de dépendance.

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

Vous devez également instancier l'objet client S3 et les emplacements dans votre compartiment S3 par défaut, où le contenu tel que les métriques et les artefacts de modèle sont chargés. Pour ce faire, copiez et collez le bloc de code suivant et exécutez la cellule. Remarquez que le nom du compartiment d'écriture est dérivé de l'objet de session SageMaker. Votre compartiment par défaut porte le nom sagemaker-<votre-région>-<votre-identifiant-de-compte>. Ce compartiment est l'emplacement où tous les artefacts d'entraînement sont chargés. Les jeux de données que vous utilisez pour vous entraîner existent dans un compartiment S3 public nommé sagemaker-sample-files, qui a été spécifié comme le compartiment de lecture. L'emplacement dans le compartiment est spécifié par le préfixe de lecture.

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

Étape 3 : entraînement d'un modèle XGBoost

Au cours de cette étape, vous configurez et entraînez un modèle de classification binaire XGBoost sur le jeu de données de synthèse de sinistres d'assurance automobile et évaluez les performances du modèle. Vous utilisez la colonne nommée fraud (fraude) comme colonne cible. L'objectif est d'entraîner un classificateur binaire XGBoost capable de différencier les sinistres frauduleux des sinistres légitimes et d'évaluer les performances du modèle de base.


Le cadre open source XGBoost expose plusieurs hyperparamètres qui peuvent être utilisés pour contrôler la performance du modèle. Dans le cadre de ce didacticiel, quelques hyperparamètres importants sont définis et l'aire sous la courbe de la caractéristique d'exploitation du récepteur (ROC-AUC, Receiver Operating Characteristic Area Under the Curve) est choisie comme métrique d'évaluation. Copiez et collez le bloc de code suivant dans une cellule et exécutez-le pour effectuer une validation croisée et entraîner un modèle 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}")

Les scores AUC d'entraînement et de validation validés par croisement sont affichés après l'exécution de la cellule. Vos résultats peuvent être légèrement différents en raison de la nature stochastique du processus de création du modèle. Cependant, la différence entre les performances d'entraînement et de test indique que le modèle est très probablement surajusté au jeu de données d'entraînement étant donné les combinaisons d'hyperparamètres choisies. En tant que scientifique des données, vous pouvez utiliser ces informations pour affiner le modèle avant de l'entraîner à grande échelle.

Une fois que vous avez mesuré la performance validée par recoupement, au lieu de diviser le jeu de données d'entraînement en plusieurs plis (folds), vous pouvez entraîner à nouveau le modèle sur le jeu de données d'entraînement complet tout en utilisant le jeu de test pour un arrêt précoce. L'arrêt précoce permet de contrôler la complexité du modèle et de réduire le surajustement (overfitting). Copiez et collez le bloc de code suivant pour entraîner et évaluer les jeux de données d'entraînement et de test. Notez que le recyclage en mode local signifie que le jeu de données est extrait d'Amazon S3 pour être envoyé dans l'environnement de l'instance locale de SageMaker Studio. L'instance de SageMaker Studio doit disposer d'un espace suffisant pour stocker les données localement.

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

Ceci complète l'entraînement et l'évaluation d'un modèle de classification binaire sur le jeu de données des sinistres d'assurance automobile. Copiez et collez le bloc de code suivant pour enregistrer les métriques d'évaluation dans un fichier JSON et le modèle entraîné dans un fichier pickle. Le code enregistre à la fois dans le répertoire local de SageMaker Studio et dans votre compartiment S3 par défaut.

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

Étape 4 : nettoyage des ressources

Une bonne pratique consiste à supprimer les ressources que vous n'utilisez plus afin de ne pas encourir de frais imprévus.

Pour supprimer le compartiment S3, procédez comme suit : 

  • Ouvrez la console Amazon S3. Sur la barre de navigation, choisissez Buckets (Compartiments), sagemaker-<votre-région>-<votre-identifiant-de-compte>, puis cochez la case à côté de fraud-detect-demo. Puis choisissez Delete (Supprimer).
  • Dans la boîte de dialogue Delete objects (Supprimer des objets), vérifiez que vous avez sélectionné le bon objet à supprimer et saisissez permanently delete (supprimer définitivement) dans la case de confirmation des Permanently delete objects (Supprimer définitivement des objets).
  • Une fois que cette opération est terminée et que le compartiment est vide, vous pouvez supprimer le compartiment sagemaker-<votre-région>-<votre-identifiant-de-compte> en suivant à nouveau la même procédure.

Le noyau de Science des données utilisé pour exécuter l'image du bloc-notes dans ce didacticiel accumule les charges jusqu'à ce que vous arrêtiez le noyau ou que vous effectuiez les étapes suivantes pour supprimer les applications. Pour en savoir plus, veuillez consulter la rubrique Shut Down Resources (Arrêt des ressources) dans le Guide du développeur Amazon SageMaker.

Pour supprimer les applications SageMaker Studio, procédez comme suit : dans la console SageMaker Studio, choisissez studio-user, puis supprimez toutes les applications répertoriées sous Apps (Applications) en choisissant Delete app (Supprimer l'application). Attendez que le Status (Statut) de l'état passe à Deleted (Supprimé).

Si vous avez utilisé un domaine SageMaker Studio existant à l'étape 1, ignorez le reste de l'étape 4 et passez directement à la section de conclusion. 

Si vous avez exécuté le modèle CloudFormation à l'étape 1 pour créer un domaine SageMaker Studio, poursuivez les étapes suivantes pour supprimer le domaine, l'utilisateur et les ressources créés par le modèle CloudFormation.  

Pour ouvrir la console CloudFormation, saisissez CloudFormation dans la barre de recherche de la console AWS, puis choisissez CloudFormation dans les résultats de la recherche.

Dans le volet CloudFormation, choisissez Stacks (Piles). Dans la liste déroulante Status (Statut), sélectionnez Active (Actif). Sous Stack name (Nom de la pile), choisissez CFN-SM-IM-Lambda-Catalog pour ouvrir la page des détails de la pile.

Sur la page de détails de la pile CFN-SM-IM-Lambda-Catalog, choisissez Delete (Supprimer) pour supprimer la pile ainsi que les ressources qu'elle a créées à l'étape 1.

Conclusion

Félicitations ! Vous avez terminé le didacticiel Création et entraînement d'un modèle de machine learning au niveau local

Dans ce didacticiel, vous avez utilisé Amazon SageMaker Studio pour créer localement un modèle de classification binaire à l'aide de la bibliothèque open source XGBoost et vous avez enregistré les artefacts et les sorties du modèle sur Amazon S3. Comme le montre ce didacticiel, grâce à un prototypage rapide dans SageMaker Studio, vous pouvez évaluer les performances du modèle et les problèmes potentiels de surajustement avant d'entraîner le modèle de production à l'aide du jeu de données complet.

Vous pouvez poursuivre votre parcours de scientifique des données avec Amazon SageMaker en suivant la section des prochaines étapes ci-dessous.

Cette page vous a-t-elle été utile ?

Prochaines étapes

Créer un modèle ML automatiquement

Apprenez à utiliser AutoML pour développer des modèles ML sans écrire de code.
Suivant »

Déployer un modèle entraîné

Apprenez à déployer un modèle ML entraîné pour l'inférence.
Suivant »

Trouver d'autres didacticiels pratiques

Explorez d'autres didacticiels de machine learning pour aller plus loin.
Suivant »