Premiers pas avec BigQuery ML

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

2. Préparation

Configuration de l'environnement d'auto-formation

  1. 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.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

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

select-bq_0.png

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

select-bq.png

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

8b0218390329e8cf.png

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

4f51bf57291a59db.png

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

63e32478a5652fbc.png

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) :

b8bd9548a0d89165.png

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 :

1c7779f6028730cc.png

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 :

e639f7a409741dcb.png

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 :

2be1d8fa96e10178.png

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.