Créer et utiliser un modèle de classification portant sur des données de recensement

BigQuery ML accepte l'apprentissage supervisé avec le type de modèle de régression logistique. Vous pouvez utiliser le type de modèle de régression logistique binaire pour prédire si une valeur tombe dans une catégorie parmi deux catégories possibles. Vous pouvez également utiliser le type de modèle de régression à classes multiples pour prédire si une valeur tombe dans une catégorie parmi plusieurs possibles. Ces modèles sont appelés problèmes de classification, car ils tentent de classer les données en au moins deux catégories.

Dans ce tutoriel, vous allez utiliser un modèle de régression logistique binaire dans BigQuery ML pour prédire la plage de revenus des personnes interrogées de l'ensemble de données du recensement américain. Cet ensemble de données contient les informations relatives à la démographie et aux revenus des résidents américains à partir de 2000 et de 2010. Les données comprennent la situation professionnelle, la catégorie d'emploi, le niveau d'éducation et les données relatives au revenu.

Objectifs

Dans ce tutoriel, vous allez effectuer les tâches suivantes :

  • Créer un modèle de régression logistique
  • Évaluer le modèle de régression logistique
  • Réaliser des prédictions à l'aide du modèle de régression logistique

Coûts

Ce tutoriel utilise des composants facturables de Cloud Platform, dont :

  • 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

Présentation

Un problème courant dans le machine learning est de classer les données dans un type parmi deux types possibles, appelés étiquettes. Par exemple, un marchand peut souhaiter prédire si un client donné achètera un nouveau produit, en se basant sur d'autres informations concernant ce client. Dans ce cas, les deux étiquettes pourraient être "achètera" et "n'achètera pas". Vous pouvez construire votre ensemble de données de sorte qu'une colonne représente l'étiquette. Les données que vous pouvez utiliser pour entraîner un tel modèle de régression logistique binaire comprennent l'emplacement du client, ses achats antérieurs, ses préférences déclarées, etc.

Dans ce tutoriel, vous allez utiliser BigQuery ML pour créer un modèle de régression logistique binaire permettant de prédire si le revenu d'une personne interrogée pour le recensement américain se situe dans l'une des deux plages possibles en fonction des attributs démographiques de cette personne.

La création d'un modèle de régression logistique comprend les étapes suivantes :

  • Étape 1 : Créer un ensemble de données dans lequel stocker votre modèle
    La première étape consiste à créer un ensemble de données BigQuery dans lequel stocker votre modèle.
  • Étape 2 : Examiner les données
    Au cours de cette étape, examinez l'ensemble de données et identifiez les colonnes à utiliser comme données d'entraînement pour le modèle de régression logistique.
  • Étape 3 : Sélectionner les données d'entraînement
    L'étape suivante consiste à préparer les données que vous utilisez pour entraîner le modèle de régression logistique binaire en exécutant une requête sur la table census_adult_income. Cette étape identifie les fonctionnalités pertinentes et les stocke dans une vue pour que les requêtes ultérieures puissent être utilisées en tant que données d'entrée.
  • Étape 4 : Créer un modèle de régression logistique
    Au cours de cette étape, utilisez l'instruction CREATE MODEL pour créer le modèle de régression logistique.
  • Étape 5 : Utiliser la fonction ML.EVALUATE pour évaluer le modèle
    Ensuite, utilisez la fonction ML.EVALUATE pour fournir des statistiques sur les performances du modèle.
  • Étape 6 : Utilisez la fonction ML.PREDICT pour prédire le revenu d'un participant
    Enfin, vous utilisez la fonction ML.PREDICT pour prédire la tranche de revenu pour un ensemble donné de participants au recensement.

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

La première étape consiste à créer un ensemble de données BigQuery dans lequel stocker votre modèle. Pour créer l'ensemble de données, 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 Créer un ensemble de données, saisissez census dans le champ ID de l'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 : Examiner les données

L'étape suivante consiste à examiner l'ensemble de données et à identifier les colonnes à utiliser comme données d'entraînement pour le modèle de régression logistique. Vous pouvez utiliser une requête SQL standard pour renvoyer des lignes de l'ensemble de données.

La requête suivante renvoie 100 lignes de l'ensemble de données du recensement américain :

SELECT
  *
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
LIMIT
  100;

Exécuter la requête

Pour exécuter la requête qui renvoie des lignes de l'ensemble de données, 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 :

    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    LIMIT
      100;
    
  3. Cliquez sur Exécuter.

  4. 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

    Les résultats de la requête montrent que la colonne income_bracket de la table census_adult_income ne présente que l'une des deux valeurs suivantes : <=50K ou >50K. Ils montrent également que les colonnes education et education_num de la table census_adult_income expriment les mêmes données sous différents formats. La colonne functional_weight correspond au nombre d'individus représentés par une ligne particulière selon les organismes de recensement. Les valeurs de cette colonne apparaissent non liées à la valeur de income_bracket pour une ligne spécifique.

Étape 3 : Sélectionner les données d'entraînement

Vous allez ensuite sélectionner les données utilisées pour entraîner le modèle de régression logistique. Dans ce tutoriel, vous allez prédire le revenu du participant au recensement en fonction des attributs suivants :

  • Âge
  • Type de travail réalisé
  • Pays d'origine
  • État civil
  • Niveau d'études
  • Profession
  • Ethnicité
  • Heures travaillées par semaine

La requête suivante crée une vue qui compile vos données d'entraînement. Cette vue est comprise dans l'instruction CREATE MODEL plus loin dans ce tutoriel.

CREATE OR REPLACE VIEW
  `census.input_view` AS
SELECT
  age,
  workclass,
  native_country,
  marital_status,
  education_num,
  occupation,
  race,
  hours_per_week,
  income_bracket,
  CASE
    WHEN MOD(functional_weight, 10) < 8 THEN 'training'
    WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
    WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
  END AS dataframe
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`

Détails des requêtes

Cette requête extrait des données sur les personnes interrogées lors du recensement, y compris education_num, qui représente le niveau d'études de la personne, et workclass, qui représente le type de travail réalisé par la personne. Cette requête exclut plusieurs catégories qui dupliquent certaines données. Par exemple, les colonnes education et education_num de la table census_adult_income expriment les mêmes données sous différents formats. Cette requête exclut donc la colonne education. La colonne dataframe utilise la colonne functional_weight exclue pour étiqueter 80 % de la source de données à des fins d'entraînement, et réserve les données restantes à des fins d'évaluation et de prédiction. La requête crée une vue contenant ces colonnes afin que vous puissiez les utiliser pour effectuer l'entraînement et la prédiction ultérieurement.

Exécuter la requête

Pour exécuter la requête permettant de compiler les données d'entraînement pour 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 :

    CREATE OR REPLACE VIEW
      `census.input_view` AS
    SELECT
      age,
      workclass,
      native_country,
      marital_status,
      education_num,
      occupation,
      race,
      hours_per_week,
      income_bracket,
      CASE
        WHEN MOD(functional_weight, 10) < 8 THEN 'training'
        WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
        WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
      END AS dataframe
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    
  3. Cliquez sur Exécuter.

  4. Dans la section Ressources du panneau de navigation, cliquez sur le nom du projet. Votre vue devrait s'afficher en dessous de celui-ci.

  5. Cliquez sur la vue. Le schéma de la vue s'affiche dans l'onglet Schema (Schéma) situé sous l'éditeur de requête.

    Résultats de la requête

Étape 4 : Créer un modèle de régression logistique

Après avoir examiné les données d'entraînement, l'étape suivante consiste à créer un modèle de régression logistique à l'aide de ces données.

Vous pouvez créer et entraîner un modèle de régression logistique à l'aide de l'instruction CREATE MODEL avec l'option 'LOGISTIC_REG'. La requête suivante permet d'entraîner un nouveau modèle de régression logistique binaire sur la vue de la requête précédente à l'aide d'une instruction CREATE MODEL.

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    input_label_cols=['income_bracket']
  ) AS
SELECT
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'

Détails des requêtes

L'instruction CREATE MODEL entraîne un modèle à l'aide des données d'entraînement de l'instruction SELECT.

La clause OPTIONS spécifie le type de modèle et les options d'entraînement. Ici, l'option LOGISTIC_REG spécifie un type de modèle de régression logistique. Il n'est pas nécessaire de spécifier s'il s'agit d'un modèle de régression logistique binaire ou d'un modèle de régression logistique à classes multiples. En effet, BigQuery ML peut déterminer lequel entraîner en fonction du nombre de valeurs uniques de la colonne d'étiquette.

L'option input_label_cols spécifie la colonne de l'instruction SELECT à utiliser comme colonne d'étiquette. Ici, la colonne d'étiquette indique income_bracket. Le modèle détermine donc laquelle des deux valeurs de income_bracket est la plus probable en fonction des autres valeurs présentes dans chaque ligne.

L'option 'auto_class_weights=TRUE' équilibre les étiquettes de classe dans les données d'entraînement. Par défaut, les données d'entraînement ne sont pas pondérées. Si les étiquettes des données d'entraînement sont déséquilibrées, le modèle peut apprendre à prédire en priorité la classe d'étiquettes la plus populaire. Dans ce cas, la plupart des personnes interrogées de l'ensemble de données se situent dans la tranche de revenu inférieure. Cela peut conduire à un modèle qui favorise trop la tranche de revenu inférieure. Les pondérations des classes équilibrent les étiquettes de classe en calculant des pondérations pour chaque classe de manière inversement proportionnelle à la fréquence de celle-ci.

L'instruction SELECT interroge la vue de l'étape 2. Cette vue ne comprend que les colonnes contenant des données de caractéristiques pour l'entraînement du modèle. La clause WHERE filtre les lignes de input_view afin que seules les lignes appartenant à la colonne dataframe de l'entraînement soient incluses dans les données d'entraînement.

Exécuter la requête CREATE MODEL

Pour exécuter la requête permettant de créer le modèle de régression logistique, 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 :

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    data_split_method='NO_SPLIT',
    input_label_cols=['income_bracket'],
    max_iterations=15) AS
SELECT
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'
  1. Cliquez sur Exécuter.

  2. Dans la section Ressources de l'UI Web de BigQuery, développez [PROJECT_ID] > census, puis cliquez sur census_model.

  3. Cliquez sur l'onglet Schema (Schéma). Le schéma de modèle répertorie les attributs que BigQuery ML a utilisés pour effectuer une régression logistique. Le schéma doit se présenter comme suit :

    Informations sur le schéma du cluster

Étape 5 : Utiliser la fonction ML.EVALUATE pour évaluer le modèle

Après avoir créé votre modèle, évaluez ses performances à 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 :

SELECT
  *
FROM
  ML.EVALUATE (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'evaluation'
    )
  )

Détails des requêtes

La fonction ML.EVALUATE accepte le modèle entraîné à l'étape 1 et les données d'évaluation renvoyées par une sous-requête SELECT. La fonction renvoie une seule ligne de statistiques concernant le modèle. Cette requête utilise les données de input_view en tant que données d'évaluation. La clause WHERE filtre les données d'entrée afin que la sous-requête ne contienne que des lignes du dataframe evaluation.

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 :

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_view`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  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 logistique, les résultats incluent les colonnes suivantes :

    • precision
    • recall
    • accuracy
    • f1_score
    • log_loss
    • roc_auc

    La précision du modèle décrit le rapport entre le nombre de valeurs correctement prédites et le nombre total de prédictions : une précision de 0,80 signifie que 80 % des prédictions sont correctes.

Étape 6 : Utiliser la fonction ML.PREDICT pour prédire une tranche de revenu

Pour déterminer la tranche de revenu à laquelle appartient une personne interrogée donnée, utilisez la fonction ML.PREDICT. La requête suivante prédit la tranche de revenu de chaque personne interrogée du dataframe prediction.

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )

Détails des requêtes

La fonction ML.PREDICT prédit les résultats à l'aide du modèle et des données de input_view. Celles-ci ont été filtrées pour n'inclure que les lignes du dataframe "prediction". La toute première instruction SELECT récupère les résultats de la fonction ML.PREDICT.

Exécuter la requête ML.PREDICT

Pour exécuter la requête ML.PREDICT, 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.

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )
  1. Cliquez sur Exécuter.

  2. 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ésultats de ML.PREDICT

    predicted_income_bracket correspond à la valeur estimée de income_bracket.

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 et le modèle.

  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

  • Pour obtenir plus d'informations sur BigQuery ML, consultez la page Présentation de BigQuery ML.
  • Pour plus d'informations sur la création de modèles, consultez la page sur la syntaxe de CREATE MODEL.