Premiers pas avec BigQuery ML à l'aide de l'interface utilisateur Web

Ce tutoriel est basé sur l'interface utilisateur Web de BigQuery. Pour consulter une version de ce tutoriel basée sur le notebook Jupyter, reportez-vous à la page Premiers pas avec BigQuery ML à l'aide de Cloud Datalab.

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

Dans ce tutoriel, vous allez vous servir de l'exemple d'ensemble de données Google Analytics pour BigQuery afin de créer un modèle capable de prévoir si un internaute effectuera une transaction. Pour en savoir plus sur le schéma de l'ensemble de données Analytics, consultez la page Schéma de BigQuery Export dans le centre d'aide Google Analytics.

Objectifs

Dans ce tutoriel, vous allez utiliser :

  • BigQuery ML pour créer un modèle de régression logistique binaire à l'aide de l'instruction CREATE MODEL ;
  • la fonction ML.EVALUATE pour évaluer le modèle de ML ;
  • la fonction ML.PREDICT pour réaliser des prédictions à l'aide du modèle de ML.

Coûts

Ce tutoriel utilise des composants facturables de Cloud Platform, dont :

  • BigQuery
  • BigQuery ML

Pour plus d'informations sur le coût de BigQuery, consultez la page Tarifs de BigQuery.

Pour plus d'informations sur le coût de BigQuery ML, consulter la page Tarifs de BigQuery ML.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Sélectionnez ou créez un projet Google Cloud Platform.

    Accéder à la page "Gérer les ressources"

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform.

    Découvrir comment activer la facturation

  4. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet pré-existant, accédez à Activez BigQueryl'API requise.

    Activer l'API.

Étape 1 : Créer un ensemble de données

La première étape consiste à créer un ensemble de données BigQuery afin de stocker votre modèle de ML. Procédez comme suit :

  1. Accédez à l'interface utilisateur Web de BigQuery dans la console GCP.

    Accéder à l'UI Web de BigQuery

  2. Dans la section Ressources du panneau de navigation, cliquez sur le nom du projet.

  3. Dans le panneau "Détails" situé à droite, cliquez sur Créer un ensemble de données.

    Créer un ensemble de données

  4. 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 bqml_tutorial.
    • 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.

      Créer une page d'ensemble de données

  5. Ne modifiez aucun autre paramètre par défaut et cliquez sur Créer un ensemble de données.

Étape 2 : Créer un modèle

Vous devez ensuite créer un modèle de régression logistique à l'aide de l'exemple d'ensemble de données Google Analytics pour BigQuery. La requête en SQL standard présentée ci-dessous permet de créer le modèle dont vous vous servez pour prévoir si un internaute effectuera une transaction.

#standardSQL
CREATE MODEL `bqml_tutorial.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 '20170630'

En plus de créer le modèle, vous devez exécuter une requête contenant l'instruction CREATE MODEL pour entraîner le modèle à l'aide des données récupérées par l'instruction SELECT de votre requête.

Détails des requêtes

La clause CREATE MODEL permet de créer et d'entraîner le modèle nommé bqml_tutorial.sample_model.

La clause OPTIONS(model_type='logistic_reg') indique que vous créez un modèle de régression logistique. Un modèle de régression logistique tente de scinder les données d'entrée en deux classes et détermine leur probabilité d'appartenance à l'une d'elles. Généralement, ce que vous essayez de déterminer (par exemple, si un e-mail est un spam) est représenté par un 1 et tout le reste par un 0. Si le modèle de régression logistique renvoie la valeur 0,9, il est probable à 90 % que l'entrée soit ce que vous essayez de déterminer (l'e-mail est un spam).

L'instruction SELECT de cette requête extrait les colonnes suivantes qui permettent au modèle de réaliser une prédiction sur la probabilité qu'un client effectue une transaction :

  • totals.transactions : nombre total de transactions e-commerce au cours de la session. Si le nombre de transactions est NULL, la valeur de la colonne label est définie sur 0. Sinon, la valeur est égale à 1. Ces valeurs correspondent aux résultats possibles. Plutôt que de définir l'option input_label_cols= dans l'instruction CREATE MODEL, vous pouvez créer un alias nommé label.
  • device.operatingSystem : système d'exploitation de l'appareil du visiteur.
  • device.isMobile : indique si l'appareil du visiteur est un appareil mobile.
  • geoNetwork.country : pays d'où les sessions proviennent, défini à partir de l'adresse IP.
  • totals.pageviews : nombre total de pages vues au cours de la session.

La clause FROM bigquery-public-data.google_analytics_sample.ga_sessions_* indique que vous interrogez l'exemple d'ensemble de données Google Analytics. Cet ensemble de données est dans le projet bigquery-public-data. Vous interrogez un ensemble de tables segmentées par date. Il est représenté par le caractère générique dans le nom de la table : google_analytics_sample.ga_sessions_*.

La clause WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170630' limite le nombre de tables analysées par la requête. La plage de dates analysée est comprise entre le 1er août 2016 et le 30 juin 2017.

Exécuter la requête CREATE MODEL

Pour exécuter la requête CREATE MODEL qui permet de créer et d'entraîner votre modèle, procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    CREATE MODEL `bqml_tutorial.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 '20170630'
    
  3. Cliquez sur Exécuter.

    L'exécution de la requête prend plusieurs minutes. À la fin de la première itération, votre modèle (sample_model) s'affiche dans le panneau de navigation de l'UI Web de BigQuery. Étant donné que la requête crée un modèle à l'aide d'une instruction CREATE MODEL, les résultats de la requête ne s'affichent pas.

    Vous pouvez observer le modèle en cours d'entraînement dans l'onglet Statistiques sur le modèle de l'UI Web de BigQuery. Dès que la première itération est terminée, l'onglet est mis à jour. Les statistiques sont actualisées à la fin de chaque itération.

(Facultatif) Étape 3 : Obtenir des statistiques d'entraînement

Pour afficher les résultats de l'entraînement du modèle, vous pouvez vous servir de la fonction ML.TRAINING_INFO. Vous avez également la possibilité d'afficher les statistiques dans l'interface utilisateur Web de BigQuery, comme vous allez le faire dans ce tutoriel.

Le machine learning consiste à créer un modèle capable d'utiliser des données pour réaliser une prédiction. Le modèle est avant tout une fonction qui sélectionne des entrées et leur applique des calculs afin de générer un résultat, à savoir une prédiction.

Les algorithmes de machine learning prennent plusieurs exemples pour lesquels la prédiction est déjà connue (comme les données de l'historique des achats des utilisateurs) et ajustent plusieurs pondérations de manière itérative dans le modèle afin que les prédictions de ce dernier correspondent aux valeurs réelles. Les algorithmes effectuent cette opération en limitant l'utilisation inappropriée d'une métrique par le modèle (aussi appelée "perte").

Le but est de réduire la perte à chaque itération (idéalement à zéro). Une perte de zéro signifie que le modèle est précis à 100 %.

Pour afficher les statistiques d'entraînement du modèle générées lors de l'exécution de la requête CREATE MODEL :

  1. Dans la section Ressources de l'interface utilisateur Web de BigQuery, développez [ID_PROJET] > bqml_tutorial, puis cliquez sur sample_model.

  2. Cliquez sur l'onglet Model stats (Statistiques sur le modèle). Les résultats doivent se présenter sous la forme suivante :

    Résultat ML.TRAINING_INFO

    La colonne Perte de données d'entraînement représente la statistique de perte calculée après l'itération donnée dans l'ensemble de données d'entraînement. Étant donné que vous avez effectué une régression logistique, cette colonne correspond à la perte logistique. La colonne Perte de données d'évaluation représente la même métrique de perte calculée sur l'ensemble de données exclues (données bloquées lors de l'entraînement pour valider le modèle).

    BigQuery ML scinde automatiquement vos données d'entrée en ensembles de données d'entraînement et de données exclues pour éviter le surapprentissage du modèle. Cette étape est nécessaire pour que l'algorithme d'entraînement ne s'adapte pas trop étroitement aux données connues et afin d'éviter qu'il les généralise pour de nouveaux exemples.

    La "Perte de données d'entraînement" et la "Perte de données d'évaluation" sont des valeurs de perte moyennes, calculées à partir de tous les exemples des ensembles correspondants.

    Pour en savoir plus sur la fonction ML.TRAINING_INFO, consultez la documentation de référence sur la syntaxe BigQuery ML.

Étape 4 : Évaluer le modèle

Après avoir créé votre modèle, vous pouvez évaluer les performances du classificateur à l'aide de la fonction ML.EVALUATE. La fonction ML.EVALUATE compare les valeurs estimées aux données réelles. Vous pouvez également utiliser la fonction ML.ROC_CURVE pour les métriques propres à la régression logistique.

Dans ce tutoriel, vous utilisez un modèle de classification binaire qui détecte les transactions. Les deux classes sont les valeurs de la colonne label : 0 (aucune transaction) et 1 (transaction effectuée).

La requête permettant d'évaluer le modèle est la suivante :

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.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'))

Détails des requêtes

La toute première instruction SELECT récupère les colonnes de votre modèle.

La clause FROM utilise la fonction ML.EVALUATE basée sur votre modèle : bqml_tutorial.sample_model.

L'instruction SELECT et la clause FROM imbriquées de cette requête sont identiques à celles de la requête CREATE MODEL.

La clause WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801' limite le nombre de tables analysées par la requête. La plage de dates analysée est comprise entre le 1er juillet 2017 et le 1er août 2017. Il s'agit des données dont vous vous servez pour évaluer les prévisions de performances du modèle. Elles ont été recueillies dans le mois qui a suivi la période couverte par les données d'entraînement.

Exécuter la requête ML.EVALUATE

Pour exécuter la requête ML.EVALUATE permettant d'évaluer le modèle :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.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'))
    
  3. Cliquez sur Exécuter.

  4. Lorsque la requête est terminée, cliquez sur l'onglet Résultats sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :

    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    |     precision      |       recall        |      accuracy      |      f1_score      |      log_loss       | roc_auc  |
    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    | 0.4451901565995526 | 0.08879964301651048 | 0.9716829479411401 | 0.1480654761904762 | 0.07921781778780206 | 0.970706 |
    +--------------------+---------------------+--------------------+--------------------+---------------------+----------+
    

    Étant donné que vous avez effectué une régression logistique, les résultats incluent les colonnes suivantes :

    • precision : métrique des modèles de classification. La précision correspond à la fréquence à laquelle le modèle prédit correctement la classe positive.
    • recall : métrique des modèles de classification qui répond à la question "Parmi toutes les étiquettes positives possibles, combien ont été correctement identifiées par le modèle ?"
    • accuracy : la justesse correspond à la fraction de prédictions correctement identifiées par un modèle de classification.
    • f1_score : mesure de la justesse du modèle. Le score f1 est la moyenne harmonique de la précision et du rappel. La meilleure valeur d'un score f1 est 1. La pire valeur est 0.
    • log_loss : fonction de perte utilisée dans une régression logistique. Il s'agit de la mesure de l'écart entre les prédictions du modèle et les étiquettes correctes.
    • roc_auc : aire sous la courbe ROC. Elle correspond à la probabilité que le niveau de confiance d'un classificateur soit supérieur pour un exemple positif choisi aléatoirement comparé à un exemple négatif choisi aléatoirement. Pour en savoir plus, consultez la page Classification dans le Cours d'initiation au Machine Learning.

Étape 5 : Prédire des résultats à l'aide du modèle

Maintenant que vous avez évalué le modèle, l'étape suivante consiste à vous en servir pour prédire un résultat. Votre modèle vous permet d'estimer le nombre de transactions effectuées par les internautes de chaque pays.

La requête exécutée pour prédire le résultat est la suivante :

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ML.PREDICT(MODEL `bqml_tutorial.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

Détails des requêtes

La toute première instruction SELECT récupère la colonne country et ajoute la colonne predicted_label. Cette colonne est générée par la fonction ML.PREDICT. Lorsque vous vous servez de la fonction ML.PREDICT, le nom de la colonne de résultat du modèle est predicted_<label_column_name>. Pour les modèles de régression linéaire, predicted_label est la valeur estimée de label. L'étiquette predicted_label est la plus susceptible d'être utilisée pour les modèles de régression logistique. Ici, la valeur est 0 ou 1.

La fonction ML.PREDICT sert à prédire les résultats à l'aide de votre modèle : bqml_tutorial.sample_model.

L'instruction SELECT et la clause FROM imbriquées de cette requête sont identiques à celles de la requête CREATE MODEL.

La clause WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801' limite le nombre de tables analysées par la requête. La plage de dates analysée est comprise entre le 1er juillet 2017 et le 1er août 2017. Il s'agit des données pour lesquelles vous réalisez des prédictions. Elles ont été recueillies dans le mois qui a suivi la période couverte par les données d'entraînement.

Les clauses GROUP BY et ORDER BY regroupent les résultats par pays, puis les trient en fonction de la somme d'achats prévus par ordre décroissant.

La clause LIMIT permet ici de n'afficher que les 10 premiers résultats.

Exécuter la requête ML.PREDICT

Pour exécuter la requête permettant de prédire un résultat à l'aide votre modèle, procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    SELECT
      country,
      SUM(predicted_label) as total_predicted_purchases
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.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
    
  3. Cliquez sur Exécuter.

  4. Lorsque la requête est terminée, cliquez sur l'onglet Résultats sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :

    +----------------+---------------------------+
    |    country     | total_predicted_purchases |
    +----------------+---------------------------+
    | United States  |                       209 |
    | Taiwan         |                         6 |
    | Canada         |                         4 |
    | Turkey         |                         2 |
    | India          |                         2 |
    | Japan          |                         2 |
    | Indonesia      |                         1 |
    | United Kingdom |                         1 |
    | Guyana         |                         1 |
    +----------------+---------------------------+
    

(Facultatif) Prévoir les achats par utilisateur

Dans cet exemple, vous tentez de prévoir le nombre de transactions que chaque internaute effectuera. Cette requête est identique à la précédente, à l'exception de la clause GROUP BY. La clause GROUP BY GROUP BY fullVisitorId permet ici de regrouper les résultats par ID de visiteur.

Pour exécuter la requête, procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, cliquez sur le bouton Saisir une nouvelle requête.

  2. Saisissez la requête suivante en SQL standard dans la zone de texte Éditeur de requête.

    #standardSQL
    SELECT
      fullVisitorId,
      SUM(predicted_label) as total_predicted_purchases
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.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
    
  3. Cliquez sur Exécuter.

  4. Lorsque la requête est terminée, cliquez sur l'onglet Résultats sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :

    +---------------------+---------------------------+
    |    fullVisitorId    | total_predicted_purchases |
    +---------------------+---------------------------+
    | 9417857471295131045 |                         4 |
    | 2158257269735455737 |                         3 |
    | 5073919761051630191 |                         3 |
    | 7104098063250586249 |                         2 |
    | 4668039979320382648 |                         2 |
    | 1280993661204347450 |                         2 |
    | 7701613595320832147 |                         2 |
    | 0376394056092189113 |                         2 |
    | 9097465012770697796 |                         2 |
    | 4419259211147428491 |                         2 |
    +---------------------+---------------------------+
    

Effectuer un nettoyage

Afin d'éviter que des frais ne soient facturés sur votre compte Google Cloud Platform pour les ressources utilisées dans ce tutoriel, procédez comme suit :

  • Supprimez le projet que vous avez créé.
  • Ou conservez le projet et supprimez l'ensemble de données.

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 :

  1. Si nécessaire, ouvrez l'UI Web de BigQuery.

    Accéder à l'UI Web de BigQuery

  2. Dans le panneau de navigation, sélectionnez l'ensemble de données bqml_tutorial que vous avez créé.

  3. 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, la table et toutes les données.

    Supprimer un ensemble de données

  4. Dans la boîte de dialogue Delete dataset (Supprimer l'ensemble de données), confirmez la commande de suppression en saisissant le nom de l'ensemble de données (bqml_tutorial), puis cliquez sur Delete (Supprimer).

Supprimer le projet

Pour supprimer le projet, procédez comme suit :

  1. Dans la console GCP, accédez à la page "Projets".

    Accéder à la page Projets

  2. Dans la liste des projets, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation sur BigQuery ML