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 Vertex AI. Scoprirai:

  1. 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 dei film senza molto codice ma solo utilizzando query SQL

Cosa creerai

Dovrai creare un

  • Un set di dati BigQuery per contenere i componenti della tabella e del modello
  • Modello BigQuery ML per prevedere la classificazione del 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 fatturazione abilitata

2. Creazione di un progetto

  1. Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto.
  3. Vai a BigQuery per abilitare l'API. Puoi anche aprire direttamente la UI web di BigQuery inserendo nel browser il seguente URL: 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 in cui è precaricato bq: 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 questo comando in Cloud Shell per confermare che il comando gcloud sia a conoscenza del tuo progetto
gcloud config list project
  1. Se il progetto non è configurato, utilizza il comando seguente 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 passo importante in tutti i progetti, i prodotti e le app relativi ai dati che richiede molta esperienza nel settore, oltre alla tecnologia, per preparare un set di dati ottimale e renderlo pronto per il tuo progetto ML. Ai fini di questo codelab, utilizzeremo il file di dati 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 sono archiviate nella stessa località dei dati. Puoi anche collegare 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 chiamato "movies".
bq mk --location=<<LOCATION>> movies

Imposta location su una regione (asia-south1).

  1. Assicurati che il file di dati (.csv) sia pronto. Esegui questi comandi in Cloud Shell per clonare il repository e accedere al progetto:
git clone <<repository link>>

cd movie-score
  1. Usa il comando bq load per caricare il file CSV in una tabella BigQuery (tieni presente che puoi anche caricarlo direttamente dalla UI 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 opzioni: –source_format=CSV. Viene utilizzato il formato dati CSV durante l'analisi del file di dati. –skip_Lead_rows=1: salta la prima riga del file CSV perché è una riga di intestazione. Movies.movies: il primo argomento posizionale, definisce la tabella in cui caricare i dati. ./movies.csv, il secondo argomento posizionale, definisce quale file caricare. Oltre ai file locali, il comando bq load può caricare file da Cloud Storage con 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 dati CSV vengono ora caricati nella tabella movies.movies.

  1. Puoi eseguire query in uno dei tre modi seguenti:

Possiamo interagire con BigQuery in tre modi, ne proveremo due: a. UI 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 di BigQuery per eseguire query. L'area di lavoro SQL ha il seguente aspetto:

109a0b2c7155e9b3.png

Utilizzando il comando bq:

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

6. Previsione della classificazione dei film su una scala da 1 a 10

BigQuery ML supporta l'apprendimento supervisionato con il tipo di modello di regressione logistica. Puoi usare 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. All'inizio ho esaminato alcuni modelli e alla fine ho usato LOGISTIC REG per semplificare le cose e ottenere risultati più vicini alla classificazione effettiva dei film da diversi database. Tieni presente che questo deve essere considerato solo come 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 invece di 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" con uno di tre valori: TRAIN, TEST e PREDICT. La suddivisione del set di dati per scopi di test e addestramento è un aspetto importante del modello. Per saperne di più sulla suddivisione dei set di dati, consulta la documentazione.

Creare il modello di regressione logistica

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

Esegui questa query nell'area di lavoro SQL della 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 contenuti nell'istruzione SELECT
  2. La clausola OPTIONS specifica il tipo di modello e le opzioni di addestramento. In questo caso, l'opzione LOGISTIC_REG specifica un tipo di modello di regressione logistica. Non è necessario specificare un modello di regressione logistica binaria anziché un modello di regressione logistica multiclasse: BigQuery ML può determinare quale addestrare in base al numero di valori univoci nella colonna dell'etichetta.
  3. data_split_method=‘NO_SPLIT&#39; obbliga BQML ad eseguire l'addestramento sui dati in base alle condizioni della query (data_cat = "TRAIN"). Tieni inoltre presente che è meglio usare il parametro "AUTO_SPLIT" in questa opzione per consentire al framework (o al servizio in questo caso) di randomizzare la partizione delle suddivisioni di addestramento/test
  4. L'opzione input_label_cols specifica quale colonna dell'istruzione SELECT utilizzare come colonna dell'etichetta. In questo caso la colonna dell'etichetta indica un punteggio, quindi il modello imparerà quale dei 10 valori del punteggio è più probabile in base agli altri valori presenti in ogni riga
  5. Il parametro "auto_class_weights=TRUE" bilancia le etichette della classe 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ù intensivo la classe di etichette più popolare
  6. L'istruzione SELECT esegue 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, il codice seguente viene visualizzato nella sezione SCHEMA dell'area di lavoro SQL di BigQuery:

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 utilizza 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 in alto, precisione, richiamo, accuratezza, punteggio f1, log_loss e roc_auc, che sono davvero fondamentali per valutare le prestazioni 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.

Riepilogo delle metriche principali:

Precisione: in che percentuale le identificazioni positive erano effettivamente corrette? Precisione = veri positivi / (veri positivi + falso positivo) richiamo: qual è la percentuale di positivi effettivi identificata correttamente? Richiamo = vero positivo / (vero positivo + falso negativo) Accuratezza - Una metrica per valutare i modelli di classificazione, è la frazione di previsioni che il nostro modello ha effettivamente ottenuto in modo corretto Accuratezza = numero di previsioni corrette / numero totale di previsioni

Prevedere la classificazione dei 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 filmato su una scala da 1 a 10 (classificazione). Forse 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 ognuna in ordine decrescente.

Analizzare i risultati previsti e il modello

Inoltre, puoi eseguire due importanti passaggi di analisi come parte dei risultati della 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

Per ulteriori informazioni su questi passaggi, consulta la documentazione.

7. Prevedere la classificazione dei film con BigQuery AutoML

AutoML è la soluzione ideale se vuoi consentire al servizio BigQuery di creare il modello per te e rilassarti finché 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, proprio come abbiamo visto nel modello BQML personalizzato. Scopri di più su BigQuery AutoML nella documentazione.

8. Deployment di modelli BQML in Vertex AI Model Registry con un solo clic

Ora puoi visualizzare tutti i tuoi modelli ML all'interno di Vertex AI Model Registry, semplificando la gestione e il deployment dei modelli da parte della tua organizzazione. Sono inclusi i modelli creati con BigQuery ML, AutoML e modelli addestrati personalizzati. 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 model_registry="vertex_ai" nella query CREATE MODEL in modo che BigQuery ML possa scegliere i modelli da registrare esplicitamente nel Vertex AI Model Registry. Puoi scoprire di più in questo 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 SQL di dati BigQuery e nessun'altra programmazione.
  3. Creazione del modello ML automatico BQ utilizzando solo query SQL
  4. Deployment del modello BQML 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, quindi fai clic su Arresta per eliminare il progetto

11. Complimenti

Complimenti! Hai creato correttamente un modello di previsione del punteggio dei film con BQML personalizzato e AutoML e hai eseguito il deployment del modello in Vertex AI Model Registry. Tutto questo solo utilizzando SQL.