Previsione della valutazione dei film con BQML utilizzando SQL

1. Introduzione

In questo codelab creeremo un modello di previsione del punteggio dei film con il modello personalizzato BigQuery ML utilizzando solo SQL ed eseguiremo il deployment del modello in VertexAI. Scoprirai:

  1. Come creare un set di dati BigQuery utilizzando Cloud Shell e caricare i dati da un file
  2. Come utilizzare BigQuery ML per l'apprendimento supervisionato per creare un modello di previsione di regressione multiclasse per la previsione del punteggio del film senza dover scrivere molto codice, ma utilizzando solo query SQL

Cosa creerai

Creerai un

  • Un set di dati BigQuery per contenere i componenti della tabella e del modello
  • Modello BigQuery ML per la previsione della classificazione dei film utilizzando query SQL
  • Esegui il deployment del modello in Vertex AI Model Registry

Requisiti

  • Un browser, ad esempio Chrome o Firefox
  • Un progetto Google Cloud con la fatturazione abilitata

2. Creazione di un progetto

  1. Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata in un progetto.
  3. Vai a BigQuery per abilitare l'API. Puoi anche aprire direttamente l'UI web di BigQuery inserendo il seguente URL nel browser: https://console.cloud.google.com/bigquery

3. Attiva Cloud Shell

  1. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud con bq preinstallato: dalla console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra: 6757b2fb50ddcc2d.png
  2. Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
  1. Esegui il seguente comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto
gcloud config list project
  1. Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <PROJECT_ID>

Consulta la documentazione per i comandi e l'utilizzo di gcloud.

4. Preparazione dei dati di addestramento

Si tratta di un passaggio fondamentale in tutti i progetti, i prodotti e le app relativi ai dati che richiede una grande esperienza nel dominio, oltre alla tecnologia per preparare un set di dati ottimale e renderlo pronto per il progetto di ML. Ai fini di questo codelab, utilizzeremo il file data già preparato.

5. Creazione e caricamento del set di dati

Un set di dati BigQuery è una raccolta di tabelle. Tutte le tabelle di un set di dati vengono archiviate nella stessa posizione dei dati. Puoi anche associare controlli di accesso personalizzati per limitare l'accesso a un set di dati e alle relative tabelle.

  1. In Cloud Shell, utilizza il comando bq mk per creare un set di dati denominato "movies".
bq mk --location=<<LOCATION>> movies

Imposta location su una regione (asia-south1).

  1. Assicurati di avere a disposizione il file di dati (.csv). Esegui i comandi seguenti in Cloud Shell per clonare il repository e vai al progetto:
git clone <<repository link>>

cd movie-score
  1. Utilizza il comando bq load per caricare il file CSV in una tabella BigQuery (tieni presente che puoi anche caricarlo direttamente dall'interfaccia utente di 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

Descrizione delle opzioni: –source_format=CSV: utilizza il formato dati CSV durante l'analisi del file di dati. –skip_leading_rows=1: salta la prima riga del file CSV perché è una riga di intestazione. Movies.movies: il primo argomento posizionale, che definisce la tabella in cui devono essere caricati i dati. ./movies.csv, il secondo argomento posizionale, definisce il file da caricare. Oltre ai file locali, il comando bq load può caricare file da Cloud Storage con gli URI gs://my_bucket/path/to/file. Uno schema, che può essere definito in un file di schema JSON o come elenco separato da virgole (ho utilizzato un elenco separato da virgole). Esatto. I nostri dati CSV sono ora caricati nella tabella movies.movies.

  1. Esegui una query in uno dei tre modi seguenti:

Possiamo interagire con BigQuery in tre modi, ne proveremo due: a. Interfaccia utente web di BigQuery b. Il comando bq c. API

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

Ho utilizzato l'area di lavoro SQL web di BigQuery per eseguire query. L'area di lavoro SQL ha questo aspetto:

109a0b2c7155e9b3.png

Utilizzo del comando bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. Predizione della classificazione del film su una scala da 1 a 10

BigQuery ML supporta l'apprendimento supervisionato con il tipo di modello di regressione logistica. Puoi utilizzare il tipo di modello di regressione logistica binaria per prevedere se un valore rientra in una delle due categorie oppure puoi utilizzare il tipo di modello di regressione multiclasse per prevedere se un valore rientra in una delle più categorie. Questi sono noti come problemi di classificazione, perché tentano di classificare i dati in due o più categorie.

Una breve nota sulla scelta del modello: si tratta di una scelta sperimentale del modello scelto qui, in base alla valutazione dei risultati ho eseguito inizialmente alcuni modelli e alla fine ho optato per LOGISTIC REG per mantenere la semplicità e ottenere risultati più vicini alla valutazione effettiva dei film da diversi database. Tieni presente che questo deve essere considerato solo come un esempio per l'implementazione del modello e NON è necessariamente il modello consigliato per questo caso d'uso. Un altro modo per implementare questa funzionalità è prevedere il risultato del film come BUONO / CATTIVO utilizzando questo modello di regressione logistica anziché prevedere il punteggio.

Seleziona i dati di addestramento

Abbiamo già suddiviso i dati dei film (in formato CSV) in tre categorie nella tabella utilizzando il campo "data_cat" che ha uno dei tre valori: TRAIN, TEST e PREDICT. La suddivisione del set di dati per scopi di test e addestramento è un aspetto importante del modello. Per ulteriori informazioni sulla suddivisione dei set di dati, consulta la documentazione.

Crea il modello di regressione logistica

Possiamo utilizzare l'istruzione CREATE MODEL con l'opzione "LOGISTIC_REG" per creare e addestrare un modello di regressione logistica.

Esegui la seguente query nell'area di lavoro SQL dell'UI web di 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';

Dettagli della query:

  1. L'istruzione CREATE MODEL addestra un modello utilizzando i dati di addestramento nell'istruzione SELECT
  2. La clausola OPTIONS specifica il tipo di modello e le opzioni di addestramento. Qui l'opzione LOGISTIC_REG specifica un tipo di modello di regressione logistica. Non è necessario specificare un modello di regressione logistica binaria rispetto a un modello di regressione logistica multiclasse: BigQuery ML può determinare quale addestrare in base al numero di valori univoci nella colonna delle etichette
  3. data_split_method='NO_SPLIT' forza BQML ad addestrarsi sui dati in base alle condizioni di query (data_cat = 'TRAIN'). Tieni inoltre presente che è meglio utilizzare "AUTO_SPLIT" in questa opzione per consentire al framework (o al servizio in questo caso) di randomizzare la partizione delle suddivisioni addestramento/test
  4. L'opzione input_label_cols specifica la colonna dell'istruzione SELECT da utilizzare come colonna delle etichette. Qui la colonna dell'etichetta è il punteggio, quindi il modello apprenderà quale dei 10 valori del punteggio è il più probabile in base agli altri valori presenti in ogni riga
  5. L'opzione "auto_class_weights=TRUE" bilancia le etichette delle classi nei dati di addestramento. Per impostazione predefinita, i dati di addestramento non sono ponderati. Se le etichette nei dati di addestramento non sono bilanciate, il modello potrebbe imparare a prevedere in modo più marcato la classe di etichette più popolare
  6. L'istruzione SELECT esegue una query sulla tabella che abbiamo caricato con i dati CSV. La clausola WHERE filtra le righe della tabella di input in modo che in questo passaggio venga selezionato solo il set di dati TRAIN

Una volta creato, nella sezione SCHEMA dell'area di lavoro SQL di BigQuery viene visualizzato quanto segue:

Etichette

93efd0c1a7883690.png

Funzionalità

8c539338df1a9652.png

Valutare il modello di regressione logistica

Dopo aver creato il modello, valuta le prestazioni del modello utilizzando la funzione ML.EVALUATE. La funzione ML.EVALUATE valuta i valori previsti rispetto ai dati effettivi. La query per valutare il modello è la seguente:

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

La funzione ML.EVALUATE prende il modello addestrato nel passaggio precedente e i dati di valutazione restituiti da una sottoquery SELECT. La funzione restituisce una singola riga di statistiche sul modello.

b54b0ebd6514a498.png

Poiché hai eseguito una regressione logistica, i risultati includono le metriche che vedi nello screenshot qui sopra: precisione, richiamo, accuratezza, punteggio F1, perdita logaritmica, auc roc, che sono molto importanti per valutare il rendimento del modello. Puoi anche chiamare ML.EVALUATE senza fornire dati di input. ML.EVALUATE recupera le metriche di valutazione derivate durante l'addestramento, che utilizza il set di dati di valutazione riservato automaticamente.

Metriche chiave a colpo d'occhio:

Precisione: quale percentuale di identificazioni positive era effettivamente corretta? Precisione = Veri positivi / (Veri positivi + Falsi positivi) Richiamo: quale percentuale di positivi effettivi è stata identificata correttamente? Precisione = veri positivi / (veri positivi + falsi negativi) Precisione: una metrica per la valutazione dei modelli di classificazione, è la frazione di previsioni che il nostro modello ha effettivamente ottenuto Precisione = numero di previsioni corrette / numero totale di previsioni

Prevedere la valutazione di un film utilizzando ML.PREDICT

La seguente query prevede il punteggio di ogni film nella parte PREDICT del set di dati.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

Di seguito è riportato uno snippet dei risultati:

1efb91967acc1f0c.png

Il risultato del modello mostra il PUNTEGGIO previsto del film su una scala da 1 a 10 (classificazione). Ti starai chiedendo perché ci sono diverse righe di previsione per ogni film. Questo perché il modello ha restituito le possibili etichette previste e la probabilità di occorrenza di ciascuna nell'ordine decrescente.

Analizzare i risultati previsti e il modello

Inoltre, puoi eseguire due importanti passaggi di analisi nell'ambito dei risultati di previsione:

  1. Per capire perché il tuo modello sta generando questi risultati di previsione, puoi utilizzare la funzione ML.EXPLAIN_PREDICT
  2. Per sapere quali caratteristiche sono le più importanti per determinare la fascia di reddito in generale, puoi utilizzare la funzione ML.GLOBAL_EXPLAIN

Puoi leggere questi passaggi in dettaglio nella documentazione.

7. Prevedere la classificazione dei film utilizzando BigQuery AutoML

AutoML è ideale se vuoi lasciare che sia il servizio BigQuery a creare il modello per te e non preoccuparti fino a quando non vengono generati i risultati del modello. La funzionalità AUTOML è disponibile direttamente in BQML (model_type=AUTOML_CLASSIFIER o AUTOML_REGRESSOR) ed è molto più facile da chiamare se i dati sono già in 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;

Una volta creato il modello, puoi eseguire i passaggi per EVALUATE, PREDICT ed EXPLAIN_PREDICT, come abbiamo discusso nel modello BQML personalizzato. Scopri di più su BigQuery AutoML nella documentazione.

8. Eseguire il deployment dei modelli BQML in Vertex AI Model Registry con un solo clic

Ora puoi vedere tutti i tuoi modelli ML in Vertex AI Model Registry, semplificando la gestione e il deployment dei modelli per la tua organizzazione. Sono inclusi i modelli creati con BigQuery ML, AutoML e i modelli addestrati in modo personalizzato. A tale scopo:

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

Includi l'opzione model_registry="vertex_ai" nella query CREATE MODEL in modo che BigQuery ML possa scegliere quali modelli registrare esplicitamente in Vertex AI Model Registry. Scopri di più in questo post del blog.

9. Riepilogo

In meno di 30 minuti, abbiamo:

  1. Configurare BigQuery come database per il progetto di analisi
  2. È stato creato un modello di previsione personalizzato utilizzando solo query SQL dei dati BigQuery e nessuna altra programmazione
  3. Modello BQ Auto ML creato utilizzando solo query SQL
  4. Modello BQML di cui è stato eseguito il deployment in Vertex AI Model Registry

10. Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina
  3. Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminarlo.

11. Complimenti

Complimenti! Hai creato un modello di previsione del punteggio dei film con BQML personalizzato e AutoML e lo hai implementato in Vertex AI Model Registry, il tutto utilizzando solo SQL.