Ce tutoriel présente aux analystes de données le modèle de factorisation matricielle dans BigQuery ML. 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 apprendrez à créer un modèle de factorisation matricielle à partir de commentaires implicites et à l'aide de l'exemple de table GA360_test.ga_sessions_sample
. Vous pourrez ainsi formuler des recommandations à partir d'un ID de visiteur et d'un ID de contenu.
La table ga_sessions_sample
contient des informations concernant une tranche de données de session collectées par Google Analytics 360 et envoyées à BigQuery.
Objectifs
Dans ce tutoriel, vous allez utiliser :
- BigQuery ML, pour créer un modèle de recommandations implicite à l'aide de l'instruction
CREATE MODEL
; - la fonction
ML.EVALUATE
, pour évaluer les modèles de ML ; - la fonction
ML.WEIGHTS
, pour inspecter les pondérations des facteurs latents générées lors de l'entraînement ; - la fonction
ML.RECOMMEND
, pour produire des recommandations pour un utilisateur.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, dont :
- BigQuery
- BigQuery ML
Pour plus d'informations sur les coûts de BigQuery, consultez la page Tarifs de BigQuery.
Pour en savoir plus sur les coûts associés à BigQuery ML, consultez la page Tarifs de BigQuery ML.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery est automatiquement activé dans les nouveaux projets.
Pour activer BigQuery dans un projet préexistant, accédez à .
Enable the BigQuery API.
Étape 1 : Créer un ensemble de données
Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :
Dans la console Google Cloud, accédez à la page "BigQuery".
Dans le volet Explorateur, cliquez sur le nom de votre projet.
Cliquez sur
Afficher les actions > Créer un ensemble de données.Sur la page Créer un ensemble de données, procédez comme suit :
Dans le champ ID de l'ensemble de données, saisissez
bqml_tutorial
.Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).
Les ensembles de données publics sont stockés dans l'emplacement multirégional
US
. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.
Étape 2 : Charger les données Analytics 360 dans BigQuery
La plupart du temps, les notes présentes dans vos données ne reflètent pas une valeur explicitement définie par l'utilisateur. Dans de tels scénarios, nous pouvons concevoir un proxy pour ces valeurs en tant que note implicite, et utiliser un algorithme différent pour calculer les recommandations. Dans cet exemple, nous allons utiliser un exemple d'ensemble de données Analytics 360. Cet exemple est basé sur l'article suivant.
La requête ci-dessous crée un ensemble de données issu de cloud-training-demos.GA360_test.ga_sessions_sample
. Cet ensemble comporte des notes implicites basées sur la durée de session d'un visiteur sur une page. L'objectif de cette requête est de créer un ensemble de données avec trois colonnes que nous pouvons mapper à une colonne "user" (utilisateur), une colonne "item" (élément) et une colonne "rating" (note).
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL CREATE OR REPLACE TABLE bqml_tutorial.analytics_session_data AS WITH visitor_page_content AS ( SELECT fullVisitorID, ( SELECT MAX( IF (index=10, value, NULL)) FROM UNNEST(hits.customDimensions)) AS latestContentId, (LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time) AS session_duration FROM `cloud-training-demos.GA360_test.ga_sessions_sample`, UNNEST(hits) AS hits WHERE # only include hits on pages hits.type = "PAGE" GROUP BY fullVisitorId, latestContentId, hits.time ) # aggregate web stats SELECT fullVisitorID AS visitorId, latestContentId AS contentId, SUM(session_duration) AS session_duration FROM visitor_page_content WHERE latestContentId IS NOT NULL GROUP BY fullVisitorID, latestContentId HAVING session_duration > 0 ORDER BY latestContentId
(Facultatif) Pour définir l'emplacement de traitement, cliquez sur Plus > Paramètres de requête. Pour Processing location (Emplacement de traitement), choisissez
US
. Cette étape est facultative, car l'emplacement de traitement est automatiquement détecté selon l'emplacement de l'ensemble de données.Cliquez sur Run (Exécuter).
Une fois la requête terminée, (
bqml_tutorial.analytics_session_data
) apparaît dans le panneau de navigation. Étant donné que la requête utilise une instructionCREATE TABLE
pour créer une table, les résultats de la requête ne sont pas affichés.Dans la table générée, vous devriez y voir un résultat semblable à celui-ci :
Notez que ce résultat est spécifique à la manière dont les données ont été exportées vers BigQuery. La requête d'extraction de vos propres données peut être différente.
Étape 3 : Créer votre modèle de recommandations implicite
Vous allez ensuite créer un modèle de recommandations implicite à l'aide de la table Google Analytics chargée à l'étape précédente. La requête GoogleSQL suivante permet de créer le modèle qui permettra de prédire un indice de confiance pour chaque paire ID de visiteur/ID de contenu (visitorId
/contentId
). Un indice est créé en recentrant les données et en appliquant une mise à l'échelle en fonction de la durée moyenne de session, puis en filtrant les enregistrements dont la durée de session est supérieure à 3,33 fois la moyenne (ces enregistrements sont considérés comme des anomalies).
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` OPTIONS (model_type='matrix_factorization', feedback_type='implicit', user_col='visitorId', item_col='contentId', rating_col='rating', l2_reg=30, num_factors=15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data` WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1
Détails de la requête
La clause CREATE MODEL
permet de créer et d'entraîner le modèle nommé bqml_tutorial.my_implicit_mf_model
.
La clause OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT',
user_col='visitorId', ...)
indique que vous créez un modèle de factorisation matricielle. Comme feedback_type='IMPLICIT'
est spécifié, un modèle de factorisation matricielle implicite sera entraîné.
Vous trouverez un exemple de création d'un modèle de factorisation matricielle explicite dans la section Créer un modèle de factorisation matricielle explicite.
L'instruction SELECT
de cette requête utilise les colonnes suivantes pour générer des recommandations.
visitorId
: ID de visiteur (INT64)contentId
: ID de contenu (INT64)rating
: note implicite comprise entre 0 et 1, calculée pour les ID de visiteur (visitorId
) et leurs ID de contenu (contentId
) respectifs, centrée et mise à l'échelle (FLOAT64)
La clause FROM
(bqml_tutorial.analytics_session_data
) indique que vous interrogez la table analytics_session_data
de l'ensemble de données bqml_tutorial
. Cet ensemble de données se trouve dans votre projet BigQuery si les instructions des étapes 2 et 8 ont été suivies.
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 :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` OPTIONS (model_type='matrix_factorization', feedback_type='implicit', user_col='visitorId', item_col='contentId', rating_col='rating', l2_reg=30, num_factors=15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data`
Cliquez sur Exécuter.
La requête prend environ 12 minutes, après quoi votre modèle (
my_implicit_mf_model
) apparaît dans le panneau de navigation. Étant donné que la requête utilise une instructionCREATE MODEL
pour créer un modèle, les résultats de la requête ne sont pas affichés.
Étape 4 (facultative) : Obtenir des statistiques d'entraînement
Pour afficher les résultats de l'entraînement du modèle, vous pouvez utiliser la fonction ML.TRAINING_INFO
ou afficher les statistiques dans la console Google Cloud. Dans ce tutoriel, vous utilisez la console Google Cloud.
Pour créer un modèle, un algorithme de machine learning examine de nombreux exemples et essaie de trouver un modèle qui minimise la perte. Ce processus est appelé minimisation du risque empirique.
Pour afficher les statistiques d'entraînement du modèle qui ont été générées lors de l'exécution de la requête CREATE MODEL
, procédez comme suit :
Dans la section Ressources du panneau de navigation de la console Google Cloud, développez [PROJECT_ID] > bqml_tutorial, puis cliquez sur my_implicit_mf_model.
Cliquez sur l'onglet Entraînement, puis sur Table. Les résultats doivent se présenter sous la forme suivante :
La colonne Training Data Loss (Perte de données d'entraînement) représente la métrique de perte calculée après entraînement du modèle dans l'ensemble de données d'entraînement. Étant donné que vous avez effectué une factorisation matricielle, cette colonne correspond à l'erreur quadratique moyenne. Par défaut, les modèles de factorisation matricielle ne répartissent pas les données. Par conséquent, la colonne Perte des données d'évaluation n'est présente que si un ensemble de données exclues est spécifié, car la répartition des données risque d'entraîner la perte de toutes les notes d'un utilisateur ou d'un élément. Le modèle ne disposera donc pas d'informations sur les facteurs de latence concernant les utilisateurs ou éléments manquants.
Pour en savoir plus sur la fonction
ML.TRAINING_INFO
, consultez la documentation de référence sur la syntaxe BigQuery ML.
Étape 5 : Évaluer votre modèle
Après avoir créé votre modèle, vous allez évaluer les performances de l'outil de recommandation à l'aide de la fonction ML.EVALUATE
. La fonction ML.EVALUATE
compare les prédictions aux notes réelles.
La requête permettant d'évaluer le modèle est la suivante :
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
Détails de la requête
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.my_implicit_mf_model
.
Exécuter la requête ML.EVALUATE
Pour exécuter la requête ML.EVALUATE
permettant d'évaluer le modèle, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
(Facultatif) Pour définir l'emplacement de traitement, cliquez sur Plus > Paramètres de requête. Pour Processing location (Emplacement de traitement), choisissez
US
. Cette étape est facultative, car l'emplacement de traitement est automatiquement détecté selon l'emplacement de l'ensemble de données.Cliquez sur Run (Exécuter).
Lorsque la requête est terminée, cliquez sur l'onglet Results (Résultats) sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :
Étant donné que vous avez effectué une factorisation matricielle implicite, les résultats incluent les colonnes suivantes :
mean_average_precision
mean_squared_error
normalized_discounted_cumulative_gain
average_rank
mean_average_precision
,normalized_discounted_cumulative_gain
etaverage_rank
sont des métriques de classement détaillées sur la page suivante : Métriques de factorisation matricielle implicite.
Étape 6 : Prédire les notes et émettre des recommandations
Vous allez utiliser votre modèle pour prédire les notes et émettre des recommandations.
Rechercher tous les indices de confiance des notes d'ID de contenu (contentId
) pour un ensemble d'ID de visiteur (visitorIds
)
La fonction ML.RECOMMEND
n'a pas besoin d'accepter d'arguments supplémentaires en plus du modèle, mais elle peut intégrer une table facultative. Si la table d'entrée ne comporte qu'une seule colonne qui correspond au nom de la colonne utilisateur (user
) d'entrée ou de la colonne élément (item
) d'entrée, toutes les prédictions de notes d'éléments pour chaque utilisateur (user
) seront générées, et inversement. Notez que si tous les utilisateurs (users
) ou tous les éléments (items
) se trouvent dans la table d'entrée, les résultats affichés seront les mêmes que si aucun argument facultatif n'avait été transmis à ML.RECOMMEND
.
Voici un exemple de requête qui récupère tous les indices de confiance de notes pour cinq visiteurs.
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5))
Détails des requêtes
La toute première instruction SELECT
récupère les colonnes visitorId
, contentId
et predicted_rating_confidence
. Cette dernière colonne est générée par la fonction ML.RECOMMEND
. Lorsque vous utilisez la fonction ML.RECOMMEND
, le nom de la colonne de résultats pour les modèles de factorisation matricielle implicites est predicted_rating-column-name_confidence
. Pour les modèles de factorisation matricielle implicites, predicted_rating_confidence
correspond à l'indice de confiance estimé pour la paire utilisateur-élément (user
/item
). Ce niveau de confiance se situe approximativement entre 0 et 1. Plus l'indice de confiance est élevé, plus l'utilisateur (user
) apprécie l'élément (item
). Plus l'indice de confiance est bas, moins il apprécie l'élément (item
).
La fonction ML.RECOMMEND
permet de prédire les notes à l'aide de votre modèle : bqml_tutorial.my_implicit_mf_model
.
L'instruction SELECT
imbriquée de cette requête sélectionne uniquement la colonne visitorId
de la table d'origine utilisée pour l'entraînement.
La clause LIMIT
(LIMIT 5
) filtre cinq ID utilisateur (visitorId
) à envoyer à ML.RECOMMEND
.
Rechercher les notes de toutes les paires ID de visiteur/ID de contenu
Maintenant que vous avez évalué votre modèle, l'étape suivante consiste à l'utiliser pour obtenir un indice de confiance pour les notes. Vous utilisez votre modèle pour prédire les indices de confiance de chaque combinaison utilisateur-élément de la requête suivante :
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Détails des requêtes
La toute première instruction SELECT
récupère les colonnes visitorId
, contentId
et predicted_rating_confidence
. Cette dernière colonne est générée par la fonction ML.RECOMMEND
. Lorsque vous utilisez la fonction ML.RECOMMEND
, le nom de la colonne de résultats pour les modèles de factorisation matricielle implicites est predicted_rating-column-name_confidence
. Pour les modèles de factorisation matricielle implicites, predicted_rating_confidence
correspond à l'indice de confiance estimé pour la paire utilisateur/élément (user
/item
). Ce niveau de confiance se situe approximativement entre 0 et 1. Plus l'indice de confiance est élevé, plus l'utilisateur (user
) apprécie l'élément (item
). Plus l'indice de confiance est bas, moins il apprécie l'élément (item
).
La fonction ML.RECOMMEND
permet de prédire les notes à l'aide de votre modèle : bqml_tutorial.my_implicit_mf_model
.
Pour enregistrer le résultat dans la table, vous pouvez procéder comme ci-dessous :
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Si ML.RECOMMEND
affiche l'erreur Query Exceeded Resource Limits
(la requête a excédé les limites de ressources), réessayez avec un niveau de facturation plus élevé. Dans l'outil de ligne de commande BigQuery, vous pouvez définir ce paramètre à l'aide de --maximum_billing_tier
.
Générer des recommandations
Dans la requête suivante, ML.RECOMMEND
permet de générer les cinq ID de contenu (contentId
) recommandées par ID de visiteur (visitorId
).
#standardSQL SELECT visitorId, ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId
Détails des requêtes
L'instruction SELECT
regroupe les résultats de la requête ML.RECOMMEND
imbriquée. Pour cela, elle utilise GROUP BY visitorId
pour agréger les données contentId
et predicted_rating_confidence
par ordre décroissant, et elle ne conserve que les cinq premiers ID de contenu.
À l'aide de la requête de recommandations précédente, nous pouvons trier les données selon la note prédite et générer pour chaque utilisateur les éléments ayant la plus haute note prédite. La requête suivante associe les ID d'élément (item_ids
) aux ID de film (movie_ids
) présents dans la table movielens.movie_titles
importée précédemment, et génère les cinq recommandations de films les mieux notés par utilisateur.
Exécuter la requête ML.RECOMMEND
Pour exécuter la requête ML.RECOMMEND
qui génère les cinq recommandations les mieux notées d'ID de contenu par ID de visiteur, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Cliquez sur Exécuter.
Une fois la requête terminée, (
bqml_tutorial.recommend_content
) apparaît dans le panneau de navigation de la console Google Cloud. Étant donné que la requête utilise une instructionCREATE TABLE
pour créer une table, les résultats de la requête ne sont pas affichés.Rédigez une autre requête. Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête, une fois la requête précédente terminée.
#standardSQL SELECT visitorId, ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId
(Facultatif) Pour définir l'emplacement de traitement, cliquez sur Plus > Paramètres de requête. Pour Processing location (Emplacement de traitement), choisissez
US
. Cette étape est facultative, car l'emplacement de traitement est automatiquement détecté selon l'emplacement de l'ensemble de données.Cliquez sur Run (Exécuter).
Lorsque la requête est terminée, cliquez sur l'onglet Results (Résultats) sous la zone de texte de la requête. Les résultats doivent se présenter sous la forme suivante :
Nettoyer
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
- Supprimez le projet que vous avez créé.
- Ou conservez le projet et supprimez l'ensemble de données.
Supprimer l'ensemble de données
Si vous supprimez votre projet, tous les ensembles de données et toutes les tables qui lui sont associés sont également supprimé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 :
Si nécessaire, ouvrez la page BigQuery dans Cloud Console.
Dans le panneau de navigation, cliquez sur l'ensemble de données bqml_tutorial que vous avez créé.
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.
Dans la boîte de dialogue Supprimer l'ensemble de données, confirmez la commande de suppression en saisissant le nom de votre ensemble de données (
bqml_tutorial
), puis cliquez sur Supprimer.
Supprimer votre projet
Pour supprimer le projet :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Étape suivante
- Pour en savoir plus sur le machine learning, consultez le Cours d'initiation au Machine Learning.
- Pour obtenir plus d'informations sur BigQuery ML, consultez la page Présentation de BigQuery ML.
- Pour en savoir plus sur la console Google Cloud, consultez la page Utiliser la console Google Cloud.