1. Introduction
Dans cet atelier de programmation, nous allons créer un modèle de prédiction de notes de films avec un modèle personnalisé BigQuery ML en utilisant uniquement SQL, puis le déployer dans Vertex AI. Vous pourrez découvrir :
- Comment créer un ensemble de données BigQuery à l'aide de Cloud Shell et charger des données à partir d'un fichier
- Comment utiliser BigQuery ML pour l'apprentissage supervisé afin de créer un modèle de prédiction de régression multiclasses pour la prédiction de notes de films sans avoir à écrire beaucoup de code, mais en utilisant uniquement des requêtes SQL
Objectifs de l'atelier
Vous allez créer :
- un ensemble de données BigQuery qui contiendra les composants de table et de modèle ;
- un modèle BigQuery ML pour prédire la note du film à l'aide de requêtes SQL ;
- un déploiement du modèle dans Vertex AI Model Registry.
Conditions requises
2. Créer un projet
- Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
- Accédez à BigQuery pour activer l'API. Vous pouvez également ouvrir l'interface utilisateur Web de BigQuery directement en saisissant l'URL suivante dans votre navigateur : https://console.cloud.google.com/bigquery
3. Activer Cloud Shell
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud et fourni avec bq : dans Cloud Console, cliquez sur "Activer Cloud Shell" en haut à droite :

- Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est déjà défini avec votre ID de projet. Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud reconnaît votre projet
gcloud config list project
- Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <PROJECT_ID>
Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.
4. Préparer des données d'entraînement
Il s'agit d'une étape majeure dans tous les projets, produits et applications liés aux données, qui nécessite une expertise approfondie du domaine en plus de la technologie pour préparer un ensemble de données optimal et le rendre prêt pour votre projet de ML. Pour cet atelier de programmation, nous allons utiliser le fichier de données déjà préparé.
5. Créer et charger l'ensemble de données
Un ensemble de données BigQuery est une collection de tables. Toutes les tables d'un ensemble de données sont stockées au même emplacement de données location. Vous pouvez également associer des contrôles d'accès personnalisés pour limiter l'accès à un ensemble de données et à ses tables.
- Dans Cloud Shell, utilisez la commande bq mk pour créer un ensemble de données appelé "movies".
bq mk --location=<<LOCATION>> movies
Définissez l'emplacement sur une région (asia-south1).
- Assurez-vous que le fichier de données (.csv) est prêt. Exécutez les commandes suivantes dans Cloud Shell pour cloner le dépôt et accéder au projet :
git clone <<repository link>>
cd movie-score
- Utilisez la commande bq load pour charger votre fichier CSV dans une table BigQuery (notez que vous pouvez également effectuer l'importation directement depuis l'interface utilisateur de BigQuery) :
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
Description des options : –source_format=CSV : utilise le format de données CSV lors de l'analyse du fichier de données. –skip_leading_rows=1 : ignore la première ligne du fichier CSV, car il s'agit d'une ligne d'en-tête. Movies.movies : le premier argument positionnel définit la table dans laquelle les données doivent être chargées. ./movies.csv : le deuxième argument positionnel définit le fichier à charger. En plus des fichiers locaux, la commande bq load peut charger des fichiers à partir de Cloud Storage avec des URI gs://my_bucket/path/to/file. Un schéma, qui peut être défini dans un fichier de schéma JSON ou sous forme de liste séparée par des virgules (j'ai utilisé une liste séparée par des virgules). Bonne réponse ! Nos données CSV sont maintenant chargées dans la table movies.movies.
- Interrogez les données de l'une des trois manières suivantes :
Nous pouvons interagir avec BigQuery de trois manières. Nous allons en essayer deux : a. Interface utilisateur Web de BigQuery b. Commande bq c. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
J'ai utilisé l'espace de travail SQL Web de BigQuery pour exécuter des requêtes. L'espace de travail SQL se présente comme suit :

Utiliser la commande bq :
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. Prédire la note d'un film sur une échelle de 1 à 10
BigQuery ML accepte l'apprentissage supervisé avec le type de modèle de régression logistique. Vous pouvez utiliser le type de modèle de régression logistique binaire pour prédire si une valeur tombe dans une catégorie parmi deux catégories possibles. Vous pouvez également utiliser le type de modèle de régression à classes multiples pour prédire si une valeur tombe dans une catégorie parmi plusieurs possibles. Ces modèles sont appelés problèmes de classification, car ils tentent de classer les données en au moins deux catégories.
Remarque rapide concernant le choix du modèle : il s'agit d'un choix de modèle expérimental effectué ici, basé sur l'évaluation des résultats. J'ai d'abord exécuté quelques modèles, puis j'ai opté pour LOGISTIC REG afin de simplifier le processus et d'obtenir des résultats plus proches de la note réelle du film à partir de plusieurs bases de données. Veuillez noter que cela ne doit être considéré que comme un exemple d'implémentation du modèle et qu'il ne s'agit PAS nécessairement du modèle recommandé pour ce cas d'utilisation. Une autre façon d'implémenter cela consiste à prédire le résultat du film comme BON / MAUVAIS à l'aide de ce modèle de régression logistique au lieu de prédire la note.
Sélectionner les données d'entraînement
Nous avons déjà divisé les données de films (au format CSV) en trois catégories dans la table à l'aide du champ "data_cat", qui comporte l'une des trois valeurs suivantes : TRAIN, TEST et PREDICT. La division de l'ensemble de données à des fins de test et d'entraînement est un aspect important du modèle. Si vous avez besoin de plus d'informations sur la division des ensembles de données, consultez la documentation.
Créer le modèle de régression logistique
Nous pouvons utiliser l'instruction CREATE MODEL avec l'option "LOGISTIC_REG" pour créer et entraîner un modèle de régression logistique.
Exécutez la requête ci-dessous dans l'espace de travail SQL de l'interface utilisateur Web de BigQuery :
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Détails de la requête :
- L'instruction CREATE MODEL entraîne un modèle à l'aide des données d'entraînement de l'instruction SELECT.
- La clause OPTIONS spécifie le type de modèle et les options d'entraînement. Ici, l'option LOGISTIC_REG spécifie un type de modèle de régression logistique. Il n'est pas nécessaire de spécifier s'il s'agit d'un modèle de régression logistique binaire ou d'un modèle de régression logistique à classes multiples. En effet, BigQuery ML peut déterminer lequel entraîner en fonction du nombre de valeurs uniques de la colonne d'étiquette.
- data_split_method=‘NO_SPLIT' force BQML à s'entraîner sur les données en fonction des conditions de la requête (data_cat = ‘TRAIN'). Notez également qu'il est préférable d'utiliser ‘AUTO_SPLIT' dans cette option pour permettre au framework (ou au service dans ce cas) d'aléatoriser la partition des divisions d'entraînement/de test.
- L'option input_label_cols spécifie la colonne de l'instruction SELECT à utiliser comme colonne d'étiquette. Ici, la colonne d'étiquette indique score. Le modèle détermine donc laquelle des 10 valeurs de score est la plus probable en fonction des autres valeurs présentes dans chaque ligne.
- L'option ‘auto_class_weights=TRUE' équilibre les étiquettes de classe dans les données d'entraînement. Par défaut, les données d'entraînement ne sont pas pondérées. Si les étiquettes des données d'entraînement sont déséquilibrées, le modèle peut apprendre à prédire en priorité la classe d'étiquettes la plus populaire.
- L'instruction SELECT interroge la table que nous avons chargée avec les données CSV. La clause WHERE filtre les lignes de la table d'entrée afin que seul l'ensemble de données TRAIN soit sélectionné à cette étape.
Une fois créé, le code ci-dessous s'affiche dans la section SCHEMA de l'espace de travail SQL de BigQuery :
Libellés

Fonctionnalités

Évaluer le modèle de régression logistique
Après avoir créé le modèle, vous allez évaluer ses performances à l'aide de la fonction ML.EVALUATE. La fonction ML.EVALUATE compare les valeurs prédites aux données réelles. La requête permettant d'évaluer le modèle est la suivante :
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
La fonction ML.EVALUATE accepte le modèle entraîné à l'étape précédente et les données d'évaluation renvoyées par une sous-requête SELECT. La fonction renvoie une seule ligne de statistiques concernant le modèle.

Étant donné que vous avez effectué une régression logistique, les résultats incluent les métriques que vous voyez dans la capture d'écran ci-dessus : précision, rappel, justesse, score F1, log_loss et roc_auc, qui sont essentiels pour évaluer les performances du modèle. Vous pouvez également appeler la fonction ML.EVALUATE sans fournir de données d'entrée. ML.EVALUATE récupère les métriques d'évaluation dérivées pendant l'entraînement, qui utilise l'ensemble de données d'évaluation réservé automatiquement.
Principales métriques en un coup d'œil :
Précision : quelle proportion d'identifications positives était effectivement correcte ? Précision = Vrai positif / (Vrai positif + Faux positif) Rappel : quelle proportion de résultats positifs réels a été identifiée correctement ? Rappel = Vrai positif / (Vrai positif + Faux négatif) Justesse : métrique d'évaluation des modèles de classification, il s'agit de la fraction de prédictions que notre modèle a réellement obtenues Justesse = Nombre de prédictions correctes / Nombre total de prédictions
Prédire la note d'un film à l'aide de ML.PREDICT
La requête suivante prédit la note de chaque film dans la partie PREDICT de l'ensemble de données.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
Voici un extrait des résultats :

Le résultat du modèle affiche la note prédite du film sur une échelle de 1 à 10 (classification). Vous vous demandez peut-être pourquoi il existe plusieurs lignes de prédiction pour chaque film. En effet, le modèle a renvoyé les libellés prédits possibles et la probabilité d'occurrence de chacun d'eux par ordre décroissant.
Analyser les résultats prédits et le modèle
Vous pouvez également effectuer deux étapes d'analyse importantes dans le cadre des résultats de prédiction :
- Pour comprendre pourquoi votre modèle génère ces résultats de prédiction, vous pouvez utiliser la fonction ML.EXPLAIN_PREDICT.
- Afin d'identifier les caractéristiques les plus importantes pour déterminer la tranche de revenu en général, vous pouvez utiliser la fonction ML.GLOBAL_EXPLAIN.
Pour en savoir plus sur ces étapes, consultez la documentation.
7. Prédire la note d'un film à l'aide de BigQuery AutoML
AutoML est idéal si vous souhaitez laisser le service BigQuery créer le modèle pour vous et vous détendre jusqu'à ce que les résultats du modèle soient générés. La fonctionnalité AutoML est disponible directement dans BQML (model_type=AUTOML_CLASSIFIER ou AUTOML_REGRESSOR) et est beaucoup plus facile à appeler si les données se trouvent déjà dans BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
Une fois le modèle créé, vous pouvez suivre les étapes pour EVALUATE, PREDICT et EXPLAIN_PREDICT, comme nous l'avons vu dans le modèle BQML personnalisé. Pour en savoir plus sur BigQuery AutoML, consultez la documentation.
8. Déployer des modèles BQML dans Vertex AI Model Registry en un clic
Vous pouvez désormais afficher tous vos modèles de ML dans Vertex AI Model Registry, ce qui permet à votre organisation de gérer et de déployer plus facilement des modèles. Cela inclut les modèles créés avec BigQuery ML, AutoML et les modèles entraînés personnalisés. Procédez comme suit :
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Incluez l'option model_registry="vertex_ai" dans la requête CREATE MODEL afin que BigQuery ML puisse choisir les modèles qu'il souhaite enregistrer explicitement dans Vertex AI Model Registry. Pour en savoir plus, consultez cet article de blog.
9. Résumé
En moins de 30 minutes, nous avons effectué les opérations suivantes :
- Nous avons configuré BigQuery comme base de données pour le projet d'analyse.
- Nous avons créé un modèle de prédiction personnalisé en utilisant uniquement des requêtes SQL de données BigQuery et aucun autre code.
- Nous avons créé un modèle BQ Auto ML en utilisant uniquement des requêtes SQL.
- Nous avons déployé le modèle BQML dans Vertex AI Model Registry.
10. Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cet atelier soient facturées sur votre compte Google Cloud, procédez comme suit :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur "Supprimer".
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur "Arrêter" pour supprimer le projet.
11. Félicitations
Félicitations ! Vous avez créé un modèle de prédiction de notes de films avec BQML personnalisé et AutoML, et vous l'avez déployé dans Vertex AI Model Registry, le tout en utilisant uniquement SQL.