Prédiction de classement d'un film avec BQML à l'aide de SQL

1. Introduction

Dans cet atelier de programmation, nous allons créer un modèle de prédiction de score de film avec un modèle personnalisé BigQuery ML en utilisant uniquement SQL, puis déployer le modèle dans Vertex AI. Vous allez découvrir comment :

  1. Créer un ensemble de données BigQuery à l'aide de Cloud Shell et charger des données à partir d'un fichier
  2. Utiliser BigQuery ML pour l'apprentissage supervisé afin de créer un modèle de prédiction de régression multiclasse pour la prédiction du score d'un film, sans codage spécifique, mais uniquement à l'aide de requêtes SQL

Objectifs de l'atelier

Vous allez créer un

  • un ensemble de données BigQuery qui contiendra les composants de table et de modèle ;
  • Modèle BigQuery ML permettant de prédire la notation d'un film à l'aide de requêtes SQL
  • Déployer le modèle dans Vertex AI Model Registry

Conditions requises

  • Un navigateur tel que Chrome ou Firefox
  • Un projet Google Cloud avec facturation activée

2. Créer un projet

  1. Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
  2. 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.
  3. 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

  1. Vous allez utiliser Cloud Shell, un environnement de ligne de commande qui s'exécute dans Google Cloud et qui est préchargé avec bq. Dans la console Cloud, cliquez sur "Activer Cloud Shell" en haut à droite : 6757b2fb50ddcc2d.png
  2. 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
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud reconnaît votre projet
gcloud config list project
  1. 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. Elle nécessite une grande expertise dans le domaine, en plus de la technologie, pour préparer un ensemble de données optimal et le préparer pour votre projet de ML. Pour les besoins de cet atelier de programmation, nous allons utiliser le fichier data déjà préparé.

5. Créer et charger l'ensemble de données

Un ensemble de données BigQuery est un ensemble de tables. Toutes les tables d'un ensemble de données sont stockées dans le même emplacement de données. 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.

  1. Dans Cloud Shell, créez un ensemble de données intitulé "movies" à l'aide de la commande bq mk.
bq mk --location=<<LOCATION>> movies

Définissez l'emplacement sur une région (asia-south1).

  1. Vérifiez que le fichier de données (.csv) est à portée de main. 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
  1. Utilisez la commande bq load pour charger votre fichier CSV dans une table BigQuery (notez que vous pouvez également importer 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_leader_rows=1 : ignore la première ligne du fichier CSV, car il s'agit d'une ligne d'en-tête. Movies.movies (premier argument positionnel) définit la table dans laquelle les données doivent être chargées. ./movies.csv (deuxième argument positionnel) définit le fichier à charger. En plus des fichiers locaux, la commande bq load permet de charger des fichiers depuis 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 d'éléments séparés par une virgule (j'ai utilisé une liste d'éléments séparés par une virgule). Bonne réponse ! Nos données csv sont maintenant chargées dans le tableau movies.movies.

  1. Effectuez une requête de l'une des trois manières suivantes:

Nous pouvons interagir avec BigQuery de trois manières, que nous allons tester en deux temps: a. Interface utilisateur Web de BigQuery b. La commande bq c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

J'ai utilisé l'espace de travail BigQuery Web SQL pour exécuter des requêtes. L'espace de travail SQL se présente comme suit:

109a0b2c7155e9b3.png

Avec 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 est compatible avec 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 appartient à l'une des deux catégories suivantes : Vous pouvez également utiliser le type de modèle de régression à classes multiples pour prédire si une valeur appartient à l'une des différentes catégories. Ceux-ci sont appelés problèmes de classification, car ils tentent de classer les données en deux catégories ou plus.

Remarque rapide sur le choix du modèle: il s'agit d'un choix expérimental du modèle choisi ici, sur la base de l'évaluation des résultats que j'ai d'abord exécutés sur quelques modèles. J'ai finalement utilisé LOGISTIC REG pour rester simple et obtenir des résultats plus proches de la note réelle du film à partir de plusieurs bases de données. Veuillez noter qu'il ne s'agit que d'un exemple pour l'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 / MAL en utilisant ce modèle de régression logistique au lieu de prédire le score.

Sélectionner vos données d'entraînement

Nous avons déjà divisé les données du film (au format csv) en trois catégories dans le tableau à 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. Pour en savoir plus sur la division d'un ensemble 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'UI 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:

  1. L'instruction CREATE MODEL entraîne un modèle à l'aide des données d'entraînement de l'instruction SELECT.
  2. 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 un modèle de régression logistique binaire et un modèle de régression logistique multiclasse: BigQuery ML peut déterminer quel modèle entraîner en fonction du nombre de valeurs uniques dans la colonne d'étiquettes.
  3. data_split_method=‘NO_SPLIT&#39; 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 la valeur "AUTO_SPLIT" cette option pour permettre au framework (ou au service, dans ce cas) de randomiser la partition des divisions entraînement/test.
  4. L'option "input_label_cols" spécifie la colonne de l'instruction SELECT à utiliser comme colonne d'étiquette. Ici, la colonne d'étiquette correspond au 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.
  5. La valeur "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
  6. 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 apparaît dans la section SCHEMA de l'espace de travail BigQuery SQL:

Libellés

93efd0c1a7883690.png

Fonctionnalités

8c539338df1a9652.png

Évaluer votre modèle de régression logistique

Après avoir créé votre modèle, évaluez 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 utilise 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.

b54b0ebd6514a498.png

Comme 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, perte logistique, roc_auc), qui sont vraiment essentielles pour évaluer les performances du modèle. Vous pouvez également appeler 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, lequel utilise l'ensemble de données d'évaluation réservé automatiquement.

Aperçu des métriques clés:

Précision : quelle proportion d'identifications positives était réellement correcte ? Précision = Vrai positif / Rappel (vrai positif + faux positif) - Quelle proportion de positifs réels a été identifiée correctement ? Rappel = Vrai positif / Précision (Vrai positif + Faux négatif) - Métrique permettant d'évaluer les modèles de classification, c'est la fraction de prédictions que notre modèle a réellement correctes Précision = Nombre de prédictions correctes / Nombre total de prédictions

Prédire la classification d'un film avec ML.PREDICT

La requête suivante prédit le score 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 aperçu des résultats:

1efb91967acc1f0c.png

Le résultat du modèle affiche le SCORE prédit du film sur une échelle de 1 à 10 (classification). Vous devez vous demander pourquoi il y a plusieurs lignes de prédiction pour chaque film. En effet, le modèle a renvoyé les étiquettes prédites possibles et la probabilité d'occurrence de chacune d'elles dans l'ordre décroissant.

Analyser les résultats prédits et le modèle

De plus, vous pouvez effectuer deux grandes étapes d'analyse dans le cadre des résultats de prédiction:

  1. Pour comprendre pourquoi votre modèle génère ces résultats de prédiction, vous pouvez utiliser la fonction ML.EXPLAIN_PREDICT.
  2. 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 classification d'un film avec BigQuery AutoML

AutoML est idéal si vous souhaitez laisser le service BigQuery créer le modèle à votre place et vous détendre le temps 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 exécuter les étapes d'ÉVALUATION, de PRÉDICT et d'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 BigQuery ML 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 facilite la gestion et le déploiement des modèles pour votre organisation. Cela inclut les modèles créés avec BigQuery ML et AutoML, ainsi que 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 le champ model_registry="vertex_ai" de la requête CREATE MODEL pour que BigQuery ML puisse choisir les modèles qu'il souhaite explicitement enregistrer dans Vertex AI Model Registry. Pour en savoir plus, consultez ce blog.

9. Résumé

En moins de 30 minutes, nous avons les résultats suivants:

  1. Configurer BigQuery comme base de données pour le projet d'analyse
  2. Création d'un modèle de prédiction personnalisé en utilisant uniquement des données SQL de données BigQuery, sans aucun autre codage
  3. Création d'un modèle BQ Auto ML en utilisant uniquement des requêtes SQL
  4. Modèle BQML déployé dans Vertex AI Model Registry

10. Effectuer un nettoyage

Pour éviter que les ressources utilisées dans cet article soient facturées sur votre compte Google Cloud, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.
  2. Dans la liste des projets, sélectionnez le projet 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.

11. Félicitations !

Félicitations ! Vous avez créé un modèle de prédiction de score de film avec BQML personnalisé et AutoML, puis déployé le modèle dans Vertex AI Model Registry, en utilisant uniquement SQL.