Utiliser BigQuery ML pour prédire le poids de naissance

Ce tutoriel présente BigQuery ML aux analystes de données. BigQuery ML permet aux utilisateurs de créer et d'exécuter des modèles de machine learning dans BigQuery à l'aide de requêtes SQL. L'objectif est de démocratiser le machine learning en permettant aux utilisateurs SQL de créer des modèles à l'aide de leurs propres outils et d'accélérer le rythme de développement en leur évitant d'avoir à transférer des données.

Dans ce tutoriel, vous vous appuyez sur un exemple de table natality pour créer un modèle capable de prédire le poids de naissance d'un enfant en fonction de son sexe, de la durée de la grossesse et des données démographiques de la mère. L'exemple de table natality contient des informations sur chaque naissance enregistrée aux États-Unis sur une période de 40 ans.

Objectifs

Dans ce tutoriel, vous allez utiliser :

  • BigQuery ML pour créer un modèle de régression linéaire à l'aide de l'instruction CREATE MODEL ;
  • la fonction ML.EVALUATE pour évaluer le modèle de ML ;
  • la fonction ML.PREDICT pour effectuer des prédictions à l'aide du modèle de ML.

Coûts

Ce tutoriel utilise des composants facturables de Cloud Platform, y compris :

  • BigQuery
  • BigQuery ML

Pour en savoir plus sur le coût de BigQuery, consultez la page Tarifs de BigQuery.

Pour en savoir plus sur le coût de BigQuery ML, consultez la page Tarifs de BigQuery ML.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, accédez à Activer l'APIBigQuery

    Activer l'API

Étape 1 : Créer un ensemble de données

La première étape consiste à créer un ensemble de données BigQuery afin de stocker votre modèle de ML. Procédez comme suit :

  1. Accédez à l'UI Web de BigQuery dans Cloud Console.

    Accéder à l'UI Web de BigQuery

  2. Dans la section Ressources du panneau de navigation, cliquez sur le nom du projet.

  3. Dans le panneau "Détails" situé à droite, cliquez sur Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Create dataset (Créer un ensemble de données), procédez comme suit :

    • Dans le champ Dataset ID (ID de l'ensemble de données), saisissez bqml_tutorial.
    • Dans le champ Emplacement des données, sélectionnez États-Unis (US). Les ensembles de données publics sont actuellement stockés dans l'emplacement multirégional US. Par souci de simplicité, vous devez placer votre ensemble de données dans la même zone.

      Créer une page d'ensemble de données

  5. Ne modifiez aucun autre paramètre par défaut et cliquez sur Créer un ensemble de données.

Étape 2 : Créer un modèle

Vous devez ensuite créer un modèle de régression linéaire à l'aide de l'exemple de table sur la natalité pour BigQuery. La requête en SQL standard présentée ci-dessous permet de créer le modèle dont vous vous servez pour prédire le poids de naissance d'un enfant.

#standardSQL
CREATE MODEL `bqml_tutorial.natality_model`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['weight_pounds']) AS
SELECT
  weight_pounds,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL
  AND RAND() < 0.001

En plus de créer le modèle, l'exécution de la commande CREATE MODEL entraîne le modèle que vous créez.

Détails des requêtes

La clause CREATE MODEL permet de créer et d'entraîner le modèle nommé bqml_tutorial.natality_model.

La clause OPTIONS(model_type='linear_reg', input_label_cols=['weight_pounds']) indique que vous créez un modèle de régression linéaire. Une régression linéaire est un type de modèle de régression qui génère une valeur continue à partir d'une combinaison linéaire de caractéristiques en entrée. La colonne weight_pounds correspond à la colonne de l'étiquette d'entrée. Pour les modèles de régression linéaire, la colonne de libellé doit être renseignée avec des valeurs réelles (les valeurs de la colonne doivent être des nombres réels).

L'instruction SELECT de cette requête utilise les colonnes suivantes pour prédire le poids de naissance d'un enfant :

  • weight_pounds – Poids de l'enfant, en livres (FLOAT64).
  • is_male – VRAI si l'enfant est un garçon, FAUX s'il s'agit d'une fille (BOOL).
  • gestation_weeks – Nombre de semaines de grossesse (INT64).
  • mother_age – Âge de la mère lors de l'accouchement (INT64).
  • mother_race – Valeur entière correspondant à l'origine ethnique de la mère (INT64 – identique à child_race dans le schéma de la table). Pour forcer BigQuery ML à traiter mother_race comme une caractéristique non numérique, avec une valeur distincte pour chaque catégorie, la requête convertit mother_race en CHAÎNE. C'est un point important, car l'origine ethnique a plus de sens en tant que catégorie qu'en tant que nombre entier (qui a un ordre et une échelle).

La clause FROM – bigquery-public-data.samples.natality – indique que vous interrogez l'exemple de table sur la natalité dans l'exemple d'ensemble de données. Cet ensemble de données se trouve dans le projet bigquery-public-data.

La clause WHERE – WHERE weight_pounds IS NOT NULL AND RAND() < 0.001 – exclut les lignes dont le poids est VIDE et utilise la fonction RAND pour extraire un échantillon de données aléatoire.

Exécuter la requête CREATE MODEL

Pour exécuter la requête CREATE MODEL qui permet de créer et d'entraîner votre modèle, procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    CREATE MODEL `bqml_tutorial.natality_model`
    OPTIONS
      (model_type='linear_reg',
        input_label_cols=['weight_pounds']) AS
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS string) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL
      AND RAND() < 0.001
    
  3. Cliquez sur Run (Exécuter).

    La requête prend environ 30 secondes, puis votre modèle natality_model s'affiche dans le panneau de navigation de l'interface utilisateur Web de BigQuery. Étant donné que la requête utilise une instruction CREATE MODEL pour créer une table, les résultats de la requête ne sont pas affichés.

(Facultatif) Étape 3 : Obtenir des statistiques d'entraînement

Pour afficher les résultats de l'entraînement du modèle, vous pouvez vous servir de la fonction ML.TRAINING_INFO. Vous avez également la possibilité d'afficher les statistiques dans l'interface utilisateur Web de BigQuery. Dans ce tutoriel, vous utilisez l'interface utilisateur Web de BigQuery.

Pour créer un modèle, un algorithme de machine learning examine de nombreux exemples et essaie de trouver un modèle qui minimise la perte. Ce processus est appelé "minimisation du risque empirique".

La perte est la pénalité relative à une mauvaise prédiction. Ce nombre indique à quel point la prédiction du modèle est fausse pour un exemple donné. Si la prédiction du modèle est parfaite, la perte est nulle. Sinon, la perte est supérieure à zéro. L'objectif de l'entraînement d'un modèle est de trouver un ensemble de pondérations et de biais présentant une faible perte pour tous les exemples (en moyenne).

Pour afficher les statistiques d'entraînement du modèle qui ont été générées lors de l'exécution de la requête CREATE MODEL, procédez comme suit :

  1. Dans la section Ressources de l'interface utilisateur Web de BigQuery, développez [PROJECT_ID] > bqml_tutorial, puis cliquez sur natality_model.

  2. Cliquez sur l'onglet Training (Entraînement), puis sur Table. Les résultats doivent se présenter sous la forme suivante :

    Résultat ML.TRAINING_INFO

    La colonne Training Data Loss (Perte de données d'entraînement) représente la métrique de perte calculée après entraînement du modèle dans l'ensemble de données d'entraînement. Étant donné que vous avez effectué une régression linéaire, cette colonne correspond à l'erreur quadratique moyenne. La colonne Evaluation Data Loss (Perte de données d'évaluation) représente la même métrique de perte calculée sur l'ensemble de données exclues (données bloquées lors de l'entraînement pour valider le modèle). La stratégie d'optimisation "normal_equation" est automatiquement utilisée ici pour l'entraînement. Une seule itération suffit donc pour converger vers le modèle final. Pour plus d'informations sur l'option optimize_strategy, reportez-vous à l'instruction CREATE MODEL.

    Pour en savoir plus sur la fonction ML.TRAINING_INFO et sur l'option d'entraînement "optimize_strategy", consultez la documentation de référence sur la syntaxe BigQuery ML.

Étape 4 : Évaluer le modèle

Après avoir créé votre modèle, vous évaluez les performances du classificateur à l'aide de la fonction ML.EVALUATE. La fonction ML.EVALUATE compare les valeurs estimées aux données réelles.

La requête permettant d'évaluer le modèle est la suivante :

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL))

Détails des requêtes

La toute première instruction SELECT récupère les colonnes de votre modèle.

La clause FROM utilise la fonction ML.EVALUATE basée sur votre modèle : bqml_tutorial.natality_model.

L'instruction SELECT et la clause FROM imbriquées de cette requête sont identiques à celles de la requête CREATE MODEL.

La clause WHERE – WHERE weight_pounds IS NOT NULL – exclut les lignes dont le poids est VIDE.

Vous pouvez également appeler la fonction ML.EVALUATE sans fournir les données d'entrée. Les métriques d'évaluation calculées au cours de l'entraînement seront alors utilisées :

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`)

Exécuter la requête ML.EVALUATE

Pour exécuter la requête ML.EVALUATE permettant d'évaluer le modèle, procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          weight_pounds,
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          weight_pounds IS NOT NULL))
    
  3. (Facultatif) Pour définir l'emplacement de traitement, cliquez sur More > Query settings (Plus > Paramètres de requête). Pour Processing location (Emplacement de traitement), choisissez US. Cette étape est facultative, car l'emplacement de traitement est automatiquement détecté selon l'emplacement de l'ensemble de données.

    Paramètres de requête

  4. Cliquez sur Run (Exécuter).

  5. Lorsque la requête est terminée, cliquez sur l'onglet Results (Résultats) sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :

    Résultat de ML.EVALUATE

    Étant donné que vous avez effectué une régression linéaire, les résultats incluent les colonnes suivantes :

    • mean_absolute_error
    • mean_squared_error
    • mean_squared_log_error
    • median_absolute_error
    • r2_score
    • explained_variance

Le score R2 est une métrique importante dans les résultats de l'évaluation. Le score R2 est une mesure statistique qui détermine si les prédictions de la régression linéaire se rapprochent des données réelles. 0 indique que le modèle n'apporte aucune explication sur la variabilité des données de réponse autour de la moyenne. 1 indique que le modèle explique toute la variabilité des données de réponse autour de la moyenne.

Étape 5 : Prédire des résultats à l'aide du modèle

Maintenant que vous avez évalué votre modèle, l'étape suivante consiste à vous en servir pour prédire un résultat. Votre modèle vous permet d'estimer le poids de naissance de tous les bébés nés dans le Wyoming.

La requête exécutée pour prédire le résultat est la suivante :

#standardSQL
SELECT
  predicted_weight_pounds
FROM
  ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      state = "WY"))

Détails des requêtes

La toute première instruction SELECT récupère la colonne predicted_weight_pounds. Cette colonne est générée par la fonction ML.PREDICT. Lorsque vous utilisez la fonction ML.PREDICT, le nom de la colonne de sortie du modèle est predicted_<label_column_name>. Pour les modèles de régression linéaire, predicted_label est la valeur estimée de label. Pour les modèles de régression logistique, predicted_label est l'une des deux étiquettes d'entrée, selon celle qui dispose de la probabilité prédite la plus élevée.

La fonction ML.PREDICT sert à prédire les résultats à l'aide de votre modèle : bqml_tutorial.natality_model.

L'instruction SELECT et la clause FROM imbriquées de cette requête sont identiques à celles de la requête CREATE MODEL.

La clause WHERE – WHERE state = "WY" – indique que vous limitez la prédiction à l'état du Wyoming.

Exécuter la requête ML.PREDICT

Pour exécuter la requête permettant de prédire un résultat à l'aide votre modèle, procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    SELECT
      predicted_weight_pounds
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          state = "WY"))
    
  3. (Facultatif) Pour définir l'emplacement de traitement, cliquez sur More > Query settings (Plus > Paramètres de requête). Pour Processing location (Emplacement de traitement), choisissez US. Cette étape est facultative, car l'emplacement de traitement est automatiquement détecté selon l'emplacement de l'ensemble de données.

    Paramètres de requête

  4. Cliquez sur Run (Exécuter).

  5. Lorsque la requête est terminée, cliquez sur l'onglet Results (Résultats) sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :

    Résultat de ML.PREDICT

Nettoyer

Afin d'éviter que des frais ne soient facturés sur votre compte Google Cloud Platform pour les ressources utilisées dans ce tutoriel, procédez comme suit :

  • Supprimez le projet que vous avez créé.
  • Ou conservez le projet et supprimez l'ensemble de données.

Supprimer l'ensemble de données

La suppression de votre projet entraîne celle de tous les ensembles de données et de toutes les tables qui lui sont associés. Si vous préférez réutiliser le projet, vous pouvez supprimer l'ensemble de données que vous avez créé dans ce tutoriel :

  1. Si nécessaire, ouvrez l'UI Web de BigQuery.

    Accéder à l'UI Web de BigQuery

  2. Dans le panneau de navigation, cliquez sur l'ensemble de données bqml_tutorial que vous avez créé.

  3. Cliquez sur Delete dataset (Supprimer l'ensemble de données) dans la partie droite de la fenêtre. Cette action supprime l'ensemble de données, la table et toutes les données.

  4. Dans la boîte de dialogue Delete dataset (Supprimer l'ensemble de données), confirmez la commande de suppression en saisissant le nom de votre ensemble de données (bqml_tutorial), puis cliquez sur Delete (Supprimer).

Supprimer le projet

Pour supprimer le projet :

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes