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

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

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'));

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 :

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

e639f7a409741dcb.png

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 :

2be1d8fa96e10178.png

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.