1. Introduzione
In questo codelab creeremo un modello di previsione del punteggio di un film con il modello personalizzato BigQuery ML utilizzando solo SQL ed eseguiremo il deployment del modello in Vertex AI. Scoprirai:
- Come creare un set di dati BigQuery utilizzando Cloud Shell e caricare i dati dal file
- Come utilizzare BigQuery ML per l'apprendimento supervisionato per creare un modello di previsione della regressione multiclasse per la previsione del punteggio dei film senza molto codice, ma utilizzando solo query SQL
Cosa creerai
Creerai un
- Un set di dati BigQuery che contenga i componenti della tabella e del modello
- Modello BigQuery ML per prevedere la valutazione dei film utilizzando query SQL
- Esegui il deployment del modello in Vertex AI Model Registry
Requisiti
2. Creazione di un progetto
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
- Vai a BigQuery per abilitare l'API. Puoi anche aprire direttamente la UI web di BigQuery inserendo il seguente URL nel browser: https://console.cloud.google.com/bigquery
3. Attiva Cloud Shell
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq: nella console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

- 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
- Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto
gcloud config list project
- 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 correlati ai dati, che richiede molta esperienza nel dominio, 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 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 allegare controlli dell'accesso personalizzati per limitare l'accesso a un set di dati e alle relative tabelle.
- In Cloud Shell, utilizza il comando bq mk per creare un set di dati denominato "movies".
bq mk --location=<<LOCATION>> movies
Imposta la località su una regione (asia-south1).
- Assicurati di avere pronto il file di dati (.csv). Esegui i seguenti comandi in Cloud Shell per clonare il repository e passare al progetto:
git clone <<repository link>>
cd movie-score
- Utilizza il comando bq load per caricare il file CSV in una tabella BigQuery (tieni presente che puoi anche caricare direttamente dall'interfaccia utente 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
Opzioni Descrizione: –source_format=CSV: utilizza il formato dei dati CSV durante l'analisi del file di dati. -skip_leading_rows=1: ignora la prima riga del file CSV perché è una riga di intestazione. Movies.movies, il primo argomento posizionale, 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 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 sono ora caricati nella tabella movies.movies.
- Esegui la query in uno dei tre modi seguenti:
Possiamo interagire con BigQuery in tre modi. Ne proveremo due: 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:

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 regressione logistica. Puoi utilizzare il tipo di modello di regressione logistica binaria per prevedere se un valore rientra in una delle due categorie oppure 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, basata sulla valutazione dei risultati che ho ottenuto con diversi modelli. Alla fine ho scelto la regressione logistica per semplificare e ottenere risultati più vicini alla valutazione effettiva del 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 / SCARSO utilizzando questo modello di regressione logistica anziché prevedere il punteggio.
Selezionare 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 a scopo di test e addestramento è un aspetto importante del modello. Se hai bisogno di 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 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:
- L'istruzione CREATE MODEL addestra un modello utilizzando i dati di addestramento nell'istruzione SELECT
- 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 unici nella colonna dell'etichetta
- data_split_method=‘NO_SPLIT' impone a BQML di eseguire l'addestramento sui dati in base alle condizioni della query (data_cat = ‘TRAIN'). Tieni 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 di addestramento/test
- L'opzione input_label_cols specifica quale colonna dell'istruzione SELECT utilizzare come colonna delle etichette. In questo caso, la colonna dell'etichetta è il punteggio, quindi il modello apprenderà quale dei 10 valori del punteggio è più probabile in base agli altri valori presenti in ogni riga
- L'opzione "auto_class_weights=TRUE" bilancia le etichette di classe nei dati di addestramento. Per impostazione predefinita, i dati di addestramento non sono ponderati. Se le etichette nei dati di addestramento sono sbilanciate, il modello potrebbe imparare a prevedere la classe di etichette più popolare in modo più marcato
- L'istruzione SELECT esegue una query sulla tabella che abbiamo caricato con i dati CSV. La clausola WHERE filtra le righe nella tabella di input in modo che in questo passaggio venga selezionato solo il set di dati TRAIN
Una volta creato, viene visualizzato quanto segue nella sezione SCHEMA dell'area di lavoro SQL di BigQuery:
Etichette

Funzionalità

Valuta 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.

Poiché hai eseguito una regressione logistica, i risultati includono le metriche che vedi nello screenshot sopra: precisione, richiamo, accuratezza, punteggio F1, perdita logaritmica, auc roc, che sono fondamentali 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 in sintesi:
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? Richiamo = Veri positivi / (Veri positivi + Falsi negativi) Accuratezza: una metrica per valutare i modelli di classificazione, è la frazione di previsioni che il nostro modello ha effettivamente indovinato. Accuratezza = Numero di previsioni corrette / Numero totale di previsioni
Prevedi la valutazione dei film utilizzando ML.PREDICT
La seguente query prevede il punteggio di ogni film nella sezione 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:

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 in ordine decrescente.
Analizzare i risultati previsti e il modello
Inoltre, puoi eseguire due ottimi passaggi di analisi nell'ambito dei risultati della previsione:
- Per capire perché il tuo modello sta generando questi risultati di previsione, puoi utilizzare la funzione ML.EXPLAIN_PREDICT.
- 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. Prevedi la valutazione dei film utilizzando BigQuery AutoML
AutoML è ideale se vuoi che il servizio BigQuery crei il modello per te e rilassarti fino alla generazione dei 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 discusso nel modello BQML personalizzato. Scopri di più su BigQuery AutoML nella documentazione.
8. Un clic per eseguire il deployment dei modelli BQML in Vertex AI Model Registry
Ora puoi visualizzare tutti i tuoi modelli ML in Vertex AI Model Registry, il che semplifica la gestione e il deployment dei modelli per la tua organizzazione. Sono inclusi i modelli creati con BigQuery ML, AutoML e i 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 l'opzione model_registry="vertex_ai" nella query CREATE MODEL in modo che BigQuery ML possa scegliere i modelli da registrare esplicitamente in Vertex AI Model Registry. Per saperne di più, leggi questo blog.
9. Riepilogo
In meno di 30 minuti, abbiamo:
- Configurare BigQuery come database per il progetto di analisi
- Creazione di un modello di previsione personalizzato utilizzando solo SQL per i dati BigQuery e nessun altro codice
- Creato modello BQ Auto ML utilizzando solo query SQL
- 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:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi 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, il tutto utilizzando solo SQL.