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 gratuite. 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 permettant de 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;
Ici, nous utilisons le système d'exploitation de l'appareil du visiteur, s'il s'agit ou non d'un appareil mobile, le pays du visiteur et le nombre de pages vues comme critères pour déterminer si une transaction a été effectuée.
Dans ce cas,
« atelier de programmation » est le nom de l'ensemble de données et "sample_model" est le nom de notre modèle. (en l'occurrence, il s'agit d'un modèle de type régression logistique binaire). Dans le cas présent, nous essayons d'adapter label
. 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. Cela nous permet de conserver les données du dernier mois pour les prédictions. De plus, pour gagner du temps,nous limitons le nombre de points de données à 100 000. N'hésitez pas à supprimer la dernière ligne si vous n'êtes pas pressé.
La commande CREATE MODEL vous permet de créer une tâche de requête qui s'exécute de manière asynchrone, ce qui vous permet, par exemple, de fermer ou d'actualiser la fenêtre de l'interface utilisateur BigQuery.
[Facultatif] Informations sur le modèle et statistiques d'entraînement
Si vous le souhaitez, vous pouvez obtenir des informations sur le modèle en cliquant sur sample_model sous l'ensemble de données bqml_codelab dans l'interface utilisateur. 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. Sous Training Stats (Statistiques d'entraînement), un tableau semblable à celui-ci doit s'afficher:
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'));
Si elle est utilisée 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
, explained_variance
. Si elle est utilisée 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
. Veuillez consulter le glossaire du machine learning ou effectuer une recherche Google pour comprendre comment chacune de ces métriques sont calculées et ce qu'elles signifient.
Concrètement, vous constaterez que les parties SELECT
et FROM
de la requête sont identiques à celles utilisées lors de l'entraînement. La période WHERE
reflète la modification de la période, et la partie FROM
indique que 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 de chaque pays, de trier les résultats et de sélectionner les 10 pays qui effectuent le plus d'achats.
#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;
Notez que cette requête est très semblable à la requête d'évaluation dont nous avons parlé dans la section précédente. Au lieu de ml.EVALUATE
, nous utilisons ici ml.PREDICT
et encapsulons la partie BQML de la requête avec des commandes SQL standards. Concrètement, nous nous intéressons au pays et à la somme des achats pour chacun d'eux. Voilà pourquoi nous SELECT
, GROUP BY
et ORDER BY
. LIMIT
est utilisé ici pour nous assurer que nous n'obtenons 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, nous essayons de prédire le nombre de transactions effectuées par chaque visiteur, de trier les résultats et de sélectionner les 10 visiteurs ayant effectué 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. Besoin d'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 BQML, veuillez consulter la documentation.