1. Présentation
BigQuery ML (BQML) 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.
Objectifs de l'atelier
Vous allez utiliser l'exemple d'ensemble de données Analytics 360 pour créer un modèle capable de prédire si un visiteur effectuera une transaction.
Points abordés
Apprendre à créer, évaluer et utiliser des modèles de machine learning dans BigQuery
Ce dont vous avez besoin
- Un navigateur tel que Chrome ou Firefox
- Des connaissances de base sur le langage SQL ou BigQuery
- Documentation BQML
2. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Ouvrir la console BigQuery
Dans la Google Developers Console, cliquez sur l'icône Menu en haut à gauche de l'écran.

Faites défiler le menu vers le bas et cliquez sur BigQuery :

La console BigQuery s'ouvre dans un nouvel onglet du navigateur. Elle se présente comme suit :

Aucun contenu n'est affiché, mais ne vous inquiétez pas : BigQuery propose une multitude d'ensemble de données publics.
3. Créer un ensemble de données
Pour créer un ensemble de données, cliquez sur la flèche à côté du nom de votre projet, puis sélectionnez create new dataset (Créer un nouvel ensemble de données).

Ensuite, nommez votre ensemble de données bqml_codelab et cliquez sur OK.

4. Créer un modèle
Régression logistique pour Analytics 360
Passons maintenant à notre tâche. Voici comment créer un modèle pour prédire si un visiteur effectuera une transaction.
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170631' LIMIT 100000;
Le système d'exploitation de l'appareil utilisé par le visiteur, le type d'appareil (mobile ou non), le pays du visiteur et le nombre de pages vues figurent parmi les critères pris en compte pour déterminer si une transaction a été effectuée.
Dans ce cas précis, "codelab" désigne l'ensemble de données, et "sample_model" le modèle. (en l'occurrence, il s'agit d'un modèle de type régression logistique binaire). Dans ce cas, label représente le résultat que nous cherchons à obtenir. Notez que si vous n'êtes intéressé que par une colonne, cette méthode vous évite d'avoir à définir input_label_cols. Nous limitons également nos données d'entraînement à celles collectées entre le 1er août 2016 et le 31 juin 2017. ce qui permet de réserver les données du dernier mois de la période pour les prédictions. De plus, nous allons limiter le nombre de points de données à 100 000 pour gagner du temps. N'hésitez pas à supprimer la dernière ligne si vous n'êtes pas pressé.
Utilisez ensuite la commande CREATE MODEL pour créer une tâche de requête qui sera exécutée de façon asynchrone, ce qui vous laisse le temps de fermer ou d'actualiser la fenêtre BigQuery, par exemple.
[Facultatif] Consulter les informations sur le modèle et les statistiques d'entraînement
Si cela vous intéresse, vous pouvez obtenir des informations sur le modèle en cliquant sur "sample_model" sous l'ensemble de données "bqml_codelab" dans l'UI. Sous Détails, vous devriez trouver des informations de base concernant le modèle ainsi que les options d'entraînement utilisées pour le créer. Un tableau semblable au suivant apparaît normalement sous Training Stats (Statistiques d'entraînement) :

5. Évaluer le modèle
Évaluer le modèle
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));
Avec un modèle de régression linéaire, la requête ci-dessus renvoie les colonnes suivantes : mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score et explained_variance. Avec un modèle de régression logistique, la requête ci-dessus renvoie les colonnes suivantes : precision, recall, accuracy, f1_score, log_loss, roc_auc. Pour connaître la signification de chaque métrique et leur méthode de calcul, consultez le glossaire du machine learning ou faites une recherche Google.
Concrètement, vous constaterez que les parties SELECT et FROM de la requête sont identiques à celles utilisées lors de l'entraînement. Par contre, la période a changé dans la partie WHERE, et dans la partie FROM, nous appelons ml.EVALUATE. Un tableau semblable à ce qui suit doit s'afficher :

6. Utiliser le modèle
Prédire les achats pour chaque pays
Ici, nous essayons de prédire le nombre de transactions effectuées par les visiteurs dans chaque pays, de trier les résultats et d'établir un classement des 10 pays qui enregistreront le plus de transactions.
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10;
Vous remarquerez que cette requête ressemble beaucoup à la requête d'évaluation que nous avons présentée dans la section précédente. Au lieu de ml.EVALUATE, nous utilisons ml.PREDICT et nous enveloppons la partie BQML de la requête avec des commandes SQL standards. Concrètement, nous nous intéressons au pays et au nombre de transactions dans chacun d'eux, ce qui explique l'utilisation des commandes SELECT, GROUP BY et ORDER BY. LIMIT permet ici de n'afficher que les 10 premiers résultats. Un tableau semblable à ce qui suit doit s'afficher :

Prédire les achats pour chaque utilisateur
Considérons un autre exemple. Cette fois-ci, nous allons essayer de prédire le nombre de transactions effectuées par chaque visiteur, de trier les résultats et d'établir un classement des 10 visiteurs réalisant le plus de transactions.
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10;
Un tableau semblable à ce qui suit doit s'afficher :

7. Félicitations !
Vous avez terminé cet atelier de programmation. Vous cherchez un défi ? Essayez de créer un modèle de régression linéaire avec BQML.
Points abordés
- Créer un modèle de régression logistique binaire
- Évaluer le modèle
- Utiliser le modèle pour effectuer des prédictions
Étapes suivantes
- Pour en savoir plus sur BigQuery ML, veuillez consulter la documentation.