Le Blog Amazon Web Services

Créer automatiquement des modèles de Machine Learning avec une visibilité et un contrôle complets

Cet article a pour but de vous présenter Amazon SageMaker Autopilot permettant de créer, automatiquement, les meilleurs modèles de machine learning de classification et de régression pour un problème donné, tout en vous offrant un contrôle et une visibilité totale sur le modèle.

En 1959, Arthur Samuel a défini le terme “Machine Learning” comme la capacité des ordinateurs à apprendre sans être explicitement programmés. En pratique, cela signifie identifier un algorithme capable d’identifier des schéma réccurents, ou patterns, d’un ensemble de données existant et utiliser ces modèles pour fournir un modèle prédictif capable de se généraliser à de nouvelles données. Depuis lors, de nombreux algorithmes de Machine Learning ont été créés, offrant aux scientifiques et aux développeurs un large choix d’options leur permettant de construire de nouvelles applications.

Cependant, cette abondance d’algorithmes crée également une difficulté : lequel choisir ? Comment pouvez-vous déterminer de manière fiable quel algorithme sera le plus performant pour votre problématique métier spécifique ? En outre, les algorithmes de Machine Learning ont généralement une longue liste de paramètres d’entraînement (également appelés hyperparamètres) qui doivent être configurés de façon optimale si vous voulez obtenir le maximum de précision de vos modèles. Pour augmenter la complexité du sujet, les algorithmes exigent également que les données soient préparées et transformées de manière spécifique (aussi appelé extraction de caractéristiques/features) pour un apprentissage optimal. Et vous devez ajoutez à cela le besoin de choisir la meilleur instance Amazon EC2 pour cet entraînement.

Si vous avez l’impression que cela ressemble à une suite d’expérimentations, d’essais et d’erreurs, vous avez tout à fait raison. Le Machine Learning est un mélange de science dure et de recettes de cuisine, ce qui fait qu’il est difficile pour des non-experts d’obtenir rapidement des résultats satisfaisants.

Et si vous pouviez compter sur un service entièrement managé pour résoudre cette problématique à votre place ? Appeler une API et faire le travail pour vous ? Nous vous présentons Amazon SageMaker Autopilot.

Introduction au service Amazon SageMaker Autopilot

En utilisant un simple appel d’API, ou quelques clics sur Amazon SageMaker Studio, Amazon SageMaker Autopilot examine d’abord votre ensemble de données, et exécute un certain nombre de modèles candidats pour déterminer la combinaison optimale des étapes de prétraitement des données, la sélection de l’algorithme de Machine Learning et la configuration des hyperparamètres. Ensuite, il utilise cette combinaison pour entraîner un pipeline d’inférence, que vous pouvez facilement déployer soit sur un point de terminaison (endpoint) en temps réel, soit pour une transformation par lots (mode batch). Grâce à Amazon SageMaker, tout cela se déroule sur une infrastructure entièrement managée.

Finalement, Amazon SageMaker Autopilot génère également un code Python qui vous montre exactement comment les données ont été pré-traitées : non seulement vous pouvez comprendre ce qu’a fait Amazon SageMaker Autopilot, mais vous pouvez également réutiliser ce code pour effectuer d’autres réglages et modifications manuelles si vous le souhaitez.

À ce jour, Amazon SageMaker Autopilot prend en charge :

  • La saisie des données sous forme de tableau, avec nettoyage et prétraitement automatique des données,
  • La sélection automatique d’algorithmes pour la régression linéaire, la classification binaire et la classification multiclasses,
  • L’optimisation automatique des hyperparamètres,
  • L’entraînement distribué,
  • La sélection automatique de la taille des instances et des clusters.

Nous vous montrons dans ce qui suit la simplicité de mise en oeuvre d’Amazon Sagemaker Autopilot.

Comment exploiter l’AutoML avec Amazon SageMaker Autopilot

Prenons cet exemple de bloc-note (avec les descriptions en anglais) comme point de départ : il construit un modèle de classification binaire prédisant si les clients accepteront ou refuseront une proposition commerciale. Prenez quelques minutes pour le parcourir : comme vous le verrez, la problématique métier elle-même est facile à comprendre, et l’ensemble des données n’est ni volumineux ni compliqué à examiner. Pourtant, plusieurs étapes non intuitives de prétraitement des données sont nécessaires, et il y a aussi la tâche complexe de choisir un algorithme et ses paramètres. Amazon SageMaker Autopilot est là pour vous aider (voici le bloc-note mis à jour, avec les descriptions en anglais).

Tout d’abord, nous prenons une copie de l’ensemble des données, et regardons rapidement les premières lignes.

import pandas as pd
df = pd.read_csv(local_data_path)
df.head(10)

Automl avec Sagemaker Autopilot - Etape 1

Ensuite, nous le téléchargeons dans Amazon Simple Storage Service (S3) au format CSV :

df.to_csv('automl-train.csv', index=False, header=True) # Assurez-vous que les éléments sont séparés par des virgules
sess.upload_data(path='automl-train.csv', key_prefix=prefix + '/input')

's3://sagemaker-us-west-2-123456789012/sagemaker/DEMO-automl-dm/input/automl-train.csv'

Maintenant, configurons la tâche d’AutoML :

  • Définissez l’emplacement de l’ensemble de données,
  • Sélectionnez l’attribut cible que vous voulez que le modèle prévoie : dans ce cas, c’est la colonne “y” qui indique si un client a accepté l’offre ou non,
  • Définissez l’emplacement des artefacts d’entraînement :
    input_data_config = [{
          'DataSource': {
            'S3DataSource': {
              'S3DataType': 'S3Prefix',
              'S3Uri': 's3://{}/{}/input'.format(bucket,prefix)
            }
          },
          'TargetAttributeName': 'y'
        }
      ]
    
    output_data_config = {
        'S3OutputPath': 's3://{}/{}/output'.format(bucket,prefix)
      }

C’est tout ! Bien entendu, Amazon SageMaker Autopilot dispose d’un certain nombre d’options qui vous seront utiles lorsque vous en saurez plus sur vos données et vos modèles, par exemple :

  • Définir le type de problème sur lequel vous voulez entraîner votre modèle : régression linéaire, classification binaire ou classification multiclasse. Si vous n’êtes pas sûr, Amazon SageMaker Autopilot le découvrira automatiquement en analysant les valeurs de l’attribut cible,
  • Utiliser une métrique spécifique pour l’évaluation du modèle,
  • Définir les critères d’achèvement des tâches : durée maximale d’exécution, etc.

Une chose que vous n’avez pas besoin de faire est de dimensionner le cluster d’entraînement, car Amazon SageMaker Autopilot utilise une heuristique basée sur la taille des données et l’algorithme.

Une fois la configuration terminée, nous pouvons démarrer la tâche en utilisant l’API CreateAutoMLJob. Cette API est également disponible sur AWS CLI si vous ne souhaitez pas utiliser le SDK Amazon SageMaker.

auto_ml_job_name = 'automl-dm-' + timestamp_suffix
print('AutoMLJobName: ' + auto_ml_job_name)

import boto3
sm = boto3.client('sagemaker')
sm.create_auto_ml_job(AutoMLJobName=auto_ml_job_name,
                      InputDataConfig=input_data_config,
                      OutputDataConfig=output_data_config,
                      RoleArn=role)

AutoMLJobName: automl-dm-28-10-17-49

Une tâche est exécutée en quatre étapes (vous pouvez utiliser l’API DescribeAutoMLJob pour les visualiser) :

  1. Répartition de l’ensemble de données en deux parties : les données d’entraînement et les données de validation,
  2. Analyse des données afin de recommander les pipelines qui devraient être testés sur l’ensemble des données,
  3. Extraction des caractéristiques, étape durant laquelle des transformations sont appliquées à l’ensemble des données et aux caractéristiques individuelles,
  4. Sélection du pipeline et optimisation des hyperparamètres, étape durant laquelle le pipeline le plus performant est sélectionné ainsi que les hyperparamètres optimaux pour l’algorithme d’entraînement.

Une fois que le nombre maximum de modèles candidats – ou l’une des conditions d’arrêt – est atteint, la tâche est terminée. Nous pouvons obtenir des informations détaillées sur les candidats en utilisant l’API ListCandidatesForAutoMLJob et aussi les consulter dans la console AWS.

candidates = sm.list_candidates_for_auto_ml_job(AutoMLJobName=auto_ml_job_name, SortBy='FinalObjectiveMetricValue')['Candidates']
index = 1
for candidate in candidates:
  print (str(index) + "  " + candidate['CandidateName'] + "  " + str(candidate['FinalAutoMLJobObjectiveMetric']['Value']))
  index += 1

Le résultat attendu ressemblera à la sortie suivante :

1 automl-dm-28-tuning-job-1-fabb8-001-f3b6dead 0.9186699986457825
2 automl-dm-28-tuning-job-1-fabb8-004-03a1ff8a 0.918304979801178
3 automl-dm-28-tuning-job-1-fabb8-003-c443509a 0.9181839823722839
4 automl-dm-28-tuning-job-1-ed07c-006-96f31fde 0.9158779978752136
5 automl-dm-28-tuning-job-1-ed07c-004-da2d99af 0.9130859971046448
6 automl-dm-28-tuning-job-1-ed07c-005-1e90fd67 0.9130859971046448
7 automl-dm-28-tuning-job-1-ed07c-008-4350b4fa 0.9119930267333984
8 automl-dm-28-tuning-job-1-ed07c-007-dae75982 0.9119930267333984
9 automl-dm-28-tuning-job-1-ed07c-009-c512379e 0.9119930267333984
10 automl-dm-28-tuning-job-1-ed07c-010-d905669f 0.8873512744903564

Pour l’instant, nous nous intéressons uniquement au meilleur candidat : 91,87% de précision dans la validation. Déployons-le sur un point de terminaison Amazon SageMaker, comme nous le ferions pour tout autre modèle, en effectuant les étapes suivantes :

model_arn = sm.create_model(Containers=best_candidate['InferenceContainers'],
                            ModelName=model_name,
                            ExecutionRoleArn=role)

ep_config = sm.create_endpoint_config(EndpointConfigName = epc_name,
                                      ProductionVariants=[{'InstanceType':'ml.m5.2xlarge',
                                                           'InitialInstanceCount':1,
                                                           'ModelName':model_name,
                                                           'VariantName':variant_name}])

create_endpoint_response = sm.create_endpoint(EndpointName=ep_name,
                                              EndpointConfigName=epc_name)

Après quelques minutes, le point de terminaison devient actif et nous pouvons l’utiliser pour faire des prédictions. Vous pouvez utiliser Amazon SageMaker comme d’habitude.

Maintenant, vous devriez être curieux de savoir comment le modèle a été construit, et quels sont les autres modèles candidats. Voyons cela dans la section suivante.

Visibilité et contrôle avec Amazon SageMaker Autopilot

Amazon SageMaker Autopilot stocke les artefacts d’entraînement dans Amazon S3, dont deux blocs-notes générés automatiquement. Ces deux blocs-notes décrivent le plan suivi par Autopilot pour générer les modèles candidats.

job = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)
job_data_notebook = job['AutoMLJobArtifacts']['DataExplorationNotebookLocation']
job_candidate_notebook = job['AutoMLJobArtifacts']['CandidateDefinitionNotebookLocation']

print(job_data_notebook)
print(job_candidate_notebook)

Le résultat attendu ressemblera au suivant :

s3:///notebooks/SageMakerAutopilotCandidateDefinitionNotebook.ipynb s3:///notebooks/SageMakerAutopilotDataExplorationNotebook.ipynb

Le premier bloc-note contient des informations (avec les descriptions en anglais) sur l’ensemble des données. Il vous aide à identifier les problèmes dans votre ensemble de données. Il identifie des domaines spécifiques à étudier pour vous aider à identifier des problèmes en amont avec vos données, qui peuvent générer un modèle sous-optimal.

Automl avec Sagemaker Autopilot - Notebook genere pour le traitement des données

Le deuxième bloc-note contient tous les détails (avec les descriptions en anglais) sur les tâches exécutées par Amazon SageMaker Autopilot. Il contient chaque étape de prétraitement, les algorithme et des plages d’hyperparamètres suggérés pour les modèles candidats. Tout le code est disponible, ainsi que des paramètres que vous pouvez modifier pour des expérimentations ultérieures.

Comme vous pouvez le voir, vous avez le contrôle et l’entière visibilité sur la façon dont les modèles sont construits.

Synthèse

Amazon SageMaker Autopilot rend le Machine Learning plus simple et plus accessible que jamais. Que vous soyez un débutant en Machine Learning, ou un data scientist expérimenté, Amazon SageMaker Autopilot vous aidera à construire de meilleurs modèles plus rapidement en utilisant l’une des options suivantes :

  • L’option “facile no-code” dans Amazon SageMaker Studio,
  • L’option “low-code” avec le SDK d’Amazon SageMaker Autopilot,
  • L’option pour les plus expérimentés avec le bloc-note de génération de modèles candidats.

Maintenant, c’est à vous de jouer. Vous pouvez commencer à utiliser Amazon SageMaker Autopilot dès aujourd’hui dans toutes les régions où Amazon SageMaker est disponible, y compris la région Europe (Paris) eu-west-3.

Amazon SageMaker Autopilot est également intégré à Amazon SageMaker Studio. Pour obtenir la liste complète des régions AWS prenant en charge Amazon SageMaker, veuillez consulter le Tableau des régions AWS.

Article original rédigé en anglais par Julien Simon, Artificial Intelligence et Machine Learning Evangelist pour AWS EMEA, LinkedIn, et traduit par Bruno Medeiros de Barros, Solutions Architect dans l’équipe AWS France, LinkedIn.