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 Google Cloud, 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
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
- BigQuery est automatiquement activé dans les nouveaux projets.
Pour activer BigQuery dans un projet préexistant, accédez à
Activez l'API BigQuery
Introduction
Dans le cadre du machine learning, il est souvent difficile de classer les données dans l'un des 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
- Dans cette étape, vous allez examiner l'ensemble de données et identifier les colonnes à utiliser comme données d'entraînement pour votre 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
- À cette étape, utilisez l'instruction
CREATE MODEL
pour créer votre modèle de régression logistique.
- Étape 5 : Utiliser la fonction
ML.EVALUATE
pour évaluer le modèle - Utilisez ensuite la fonction
ML.EVALUATE
pour fournir des statistiques sur les performances du modèle.
- Étape 5 : Utiliser la fonction
- É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 d'un ensemble donné de participants au recensement.
- Étape 6 : Utilisez la fonction
É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 :
Dans Google Cloud Console, accédez à la page "BigQuery".
Dans la section Ressources du panneau de navigation, cliquez sur le nom du projet.
Dans le panneau "Détails" situé à droite, cliquez sur Créer un ensemble de données.
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
census
. - Dans le champ Data location (Emplacement des données), sélectionnez United States (US) (États-Unis). 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 le même emplacement.
- Dans le champ Dataset ID (ID de l'ensemble de données), saisissez
Conservez les autres paramètres 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 age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket 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 :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête :
SELECT age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket FROM `bigquery-public-data.ml_datasets.census_adult_income` LIMIT 100;
Cliquez sur Exécuter.
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 :
Les résultats de la requête montrent que la colonne
income_bracket
de la tablecensus_adult_income
ne présente que l'une des deux valeurs suivantes :<=50K
ou>50K
. Ils montrent également que les colonneseducation
eteducation_num
de la tablecensus_adult_income
expriment les mêmes données sous différents formats. La colonnefunctional_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 deincome_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é
- État civil
- Niveau d'études
- Profession
- 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, marital_status, education_num, occupation, 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 :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
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, marital_status, education_num, occupation, 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`
Cliquez sur Exécuter.
Dans la section Ressources du panneau de navigation, cliquez sur le nom du projet. Votre vue devrait s'afficher en dessous de celui-ci.
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.
É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 * EXCEPT(dataframe) 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 :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
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 * EXCEPT(dataframe) FROM `census.input_view` WHERE dataframe = 'training'
Cliquez sur Run (Exécuter).
Dans le panneau de navigation, dans la section Ressources, développez [PROJECT_ID] > census, puis cliquez sur census_model.
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 :
É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 :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
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' ) )
(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.Cliquez sur Exécuter.
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 :
É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
Vous pouvez également appeler la fonction ML.EVALUATE
sans fournir de données d'entrée. ML.EVALUATE
récupère les métriques d'évaluation calculées durant l'entraînement à partir de l'ensemble de données d'évaluation réservé automatiquement. Dans cette requête CREATE MODEL
avec NO_SPLIT
spécifié pour l'option d'entraînement data_split_method
, l'intégralité de l'ensemble de données d'entrée est utilisé pour l'entraînement et l'évaluation.
L'appel de ML.EVALUATE
sans données d'entrée récupère les métriques d'évaluation sur un ensemble de données d'entraînement. Cette évaluation est moins efficace qu'une évaluation réalisée sur un ensemble de données séparé des données d'entraînement du modèle.
Vous pouvez également utiliser la console Google Cloud pour afficher les métriques d'évaluation calculées pendant l'entraînement. Les résultats doivent se présenter sous la forme suivante :
É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 :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête SQL standard suivante 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' ) )
Cliquez sur Exécuter.
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 :
predicted_income_bracket
correspond à la valeur estimée deincome_bracket
.
Étape 7 : Expliquer les résultats des prédictions avec des méthodes Explainable AI
Pour comprendre pourquoi votre modèle génère ces résultats de prédiction, vous pouvez utiliser la fonction ML.EXPLAIN_PREDICT
.
ML.EXPLAIN_PREDICT
est une version étendue de ML.PREDICT
. La fonction ML.EXPLAIN_PREDICT
génère non seulement des résultats de prédiction, mais elle produit également des colonnes supplémentaires servant à expliquer ces résultats. En pratique, vous n'avez besoin d'exécuter que ML.EXPLAIN_PREDICT
et vous pouvez ignorer l'exécution de ML.PREDICT
. Pour une explication plus détaillée des valeurs de Shapley et des fonctionnalités Explainable AI offertes dans BigQuery ML, consultez la page Présentation d'Explainable AI pour BigQuery ML.
La requête utilisée pour générer les explications est la suivante :
#standardSQL SELECT * FROM ML.EXPLAIN_PREDICT(MODEL `census.census_model`, ( SELECT * FROM `census.input_view` WHERE dataframe = 'evaluation'), STRUCT(3 as top_k_features))
Exécuter la requête ML.EXPLAIN_PREDICT
Pour exécuter la requête ML.EXPLAIN_PREDICT
qui explique le modèle, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête SQL standard suivante dans l'éditeur de requête.
#standardSQL SELECT * FROM ML.EXPLAIN_PREDICT(MODEL `census.census_model`, ( SELECT * FROM `census.input_view` WHERE dataframe = 'evaluation'), STRUCT(3 as top_k_features))
Cliquez sur Run (Exécuter).
Lorsque la requête est terminée, cliquez sur l'onglet Résultats sous l'éditeur de requête. Les résultats doivent se présenter sous la forme suivante :
Pour les modèles de régression logistique, les valeurs de Shapley sont utilisées pour générer les valeurs d'attribution des caractéristiques pour chaque caractéristique du modèle. ML.EXPLAIN_PREDICT
génère les trois premières attributions de caractéristiques par ligne de la table fournie, car top_k_features
a été défini sur 3 dans la requête. Ces attributions sont triées en fonction de la valeur absolue de l'attribution par ordre décroissant. Dans la ligne 1 de cet exemple, la caractéristique hours_per_week
a contribué le plus à la prédiction globale, mais pour la ligne 2 de cet exemple, occupation
a contribué le plus à la prédiction globale. Pour obtenir des explications détaillées sur les colonnes de résultat de la requête ML.EXPLAIN_PREDICT
, consultez la documentation sur la syntaxe de ML.EXPLAIN_PREDICT
.
(Facultatif) Étape 8 : Expliquer globalement votre modèle
Pour identifier les caractéristiques les plus importantes pour déterminer la tranche de revenu en général, vous pouvez utiliser la fonction ML.GLOBAL_EXPLAIN
. Pour utiliser ML.GLOBAL_EXPLAIN
, le modèle doit être réentraîné avec l'option ENABLE_GLOBAL_EXPLAIN=TRUE
. Exécutez à nouveau la requête d'entraînement avec cette option à l'aide de la requête suivante:
CREATE OR REPLACE MODELcensus.census_model
OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, enable_global_explain=TRUE, input_label_cols=['income_bracket'] ) AS SELECT * EXCEPT(dataframe) FROMcensus.input_view
WHERE dataframe = 'training'
Accéder à des explications globales via ML.GLOBAL_EXPLAIN
La requête utilisée pour générer des explications globales est la suivante :
#standardSQL SELECT * FROM ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
Exécuter la requête ML.GLOBAL_EXPLAIN
Pour exécuter la requête ML.GLOBAL_EXPLAIN
, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête SQL standard suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
(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.Cliquez sur Exécuter.
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 :
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
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 :
Si nécessaire, ouvrez la page BigQuery dans Cloud Console.
Dans le panneau de navigation, cliquez sur l'ensemble de données census que vous avez créé.
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.
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 (
census
), puis cliquez sur Delete (Supprimer).
Supprimer le projet
Pour supprimer le projet :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- 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
.