Creare modelli di machine learning in BigQuery ML
Questo tutorial mostra come creare un modello di regressione logistica utilizzando BigQuery ML nella console Google Cloud.
BigQuery ML consente di creare ed addestrare modelli di machine learning in BigQuery utilizzando query SQL. In questo modo, il machine learning diventa più accessibile, in quanto puoi utilizzare strumenti familiari come l'editor SQL di BigQuery, e aumenta anche la velocità di sviluppo, in quanto non è necessario spostare i dati in un ambiente di machine learning separato.
In questo tutorial utilizzerai il set di dati di esempio di Google Analytics per BigQuery per creare un modello che preveda se un visitatore del sito web effettuerà una transazione. Per informazioni sullo schema del set di dati di Analytics, consulta Schema di BigQuery Export nel Centro assistenza Analytics.
Obiettivi
Questo tutorial mostra come eseguire le seguenti attività:
- Utilizzo dell'istruzione
CREATE MODEL
per creare un modello di regressione logistica binaria. - Utilizza la
funzione
ML.EVALUATE
per valutare il modello. - Utilizza la
funzione
ML.PREDICT
per fare previsioni utilizzando il modello.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per ulteriori informazioni sui costi di BigQuery, consulta la pagina relativa ai prezzi di BigQuery.
Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery viene attivato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Enable the BigQuery API.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML:
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, fai clic sul nome del progetto.
Fai clic su
Visualizza azioni > Crea set di dati.Nella pagina Crea set di dati:
In ID set di dati, inserisci
bqml_tutorial
.Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).
I set di dati pubblici sono archiviati nella
US
multiregione. Per semplicità, archivia il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Creare un modello di regressione logistica
Crea un modello di regressione logistica utilizzando il set di dati di esempio di Analytics per BigQuery.
SQL
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, esegui la seguente istruzione:
CREATE OR REPLACE MODEL `bqml_tutorial.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
Il completamento della query richiede diversi minuti. Al termine della prima evoluzione, il modello (
sample_model
) viene visualizzato nel pannello di navigazione. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non vengono visualizzati i risultati della query.
Dettagli della query
L'istruzione CREATE MODEL
crea il modello e poi lo addestra utilizzando i dati recuperati dall'istruzione SELECT
della query.
La clausola OPTIONS(model_type='logistic_reg')
crea un modello di regressione logistica. Un
modello di regressione logistica suddivide i dati di input in due classi, quindi
stima la probabilità che i dati si trovino in una delle classi. Ciò che stai tentando di rilevare, ad esempio se un'email è spam, è rappresentato da 1 e gli altri valori sono rappresentati da 0. La probabilità che un determinato valore appartenga alla classe che stai cercando di rilevare è indicata da un valore compreso tra 0 e 1.
Ad esempio, se un'email riceve una stima di probabilità pari a 0,9, c'è una probabilità del 90% che sia spam.
L'istruzione SELECT
di questa query recupera le seguenti colonne utilizzate dal modello per prevedere la probabilità che un cliente completi una transazione:
totals.transactions
: il numero totale di transazioni e-commerce durante la sessione. Se il numero di transazioni èNULL
, il valore nella colonnalabel
è impostato su0
. In caso contrario, viene impostato su1
. Questi valori rappresentano i possibili risultati. La creazione di un alias denominatolabel
è un'alternativa all'impostazione dell'opzioneinput_label_cols=
nell'istruzioneCREATE MODEL
.device.operatingSystem
: il sistema operativo del dispositivo del visitatore.device.isMobile
: indica se il dispositivo del visitatore è un dispositivo mobile.geoNetwork.country
: il paese da cui hanno avuto origine le sessioni, in base all'indirizzo IP.totals.pageviews
: il numero totale di visualizzazioni di pagina all'interno della sessione.
La clausola FROM
: consente alla query di addestrare il modello utilizzando le tabelle di esempio bigquery-public-data.google_analytics_sample.ga_sessions
.
Queste tabelle sono suddivise in parti in base alla data, quindi puoi aggregarle utilizzando un carattere jolly nel nome della tabella: google_analytics_sample.ga_sessions_*
.
La clausola WHERE
- _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
limita il numero di tabelle analizzate dalla query. L'intervallo di date sottoposto a scansione va dal 1° agosto 2016 al 30 giugno 2017.
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configurare l'autenticazione per un ambiente di sviluppo locale.
Visualizzare le statistiche sulle perdite del modello
Il machine learning consiste nella creazione di un modello in grado di utilizzare i dati per fare una previsione. Il modello è essenzialmente una funzione che riceve input e applica calcoli per produrre un output, ovvero una previsione.
Gli algoritmi di machine learning funzionano prendendo diversi esempi in cui la predizione è già nota (ad esempio i dati storici degli acquisti degli utenti) e modificando in modo iterativo vari pesi nel modello in modo che le sue predizioni corrispondano ai valori reali. Per farlo, riduce al minimo l'errore del modello utilizzando una metrica chiamata perdita.
Si prevede che per ogni iterazione la perdita debba diminuire, ideally a zero. Una perdita pari a zero indica che il modello è preciso al 100%.
Durante l'addestramento del modello, BigQuery ML suddivide automaticamente i dati di input in set di addestramento e di valutazione, per evitare l'overfitting del modello. Questo è necessario affinché l'algoritmo di addestramento non si adatti così strettamente ai dati di addestramento da non poter generalizzare a nuovi esempi.
Utilizza la console Google Cloud per vedere come cambia la perdita del modello durante le sue iterazioni di addestramento:
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, espandi bqml_tutorial > Modelli e poi fai clic su modello_di_esempio.
Fai clic sulla scheda Addestramento e osserva il grafico Perdita. Il grafico Perdita mostra la variazione della metrica relativa alla perdita durante le iterazioni sul set di dati di addestramento. Se tieni premuto il cursore sul grafico, puoi vedere che esistono linee per Perdita di addestramento e Perdita di valutazione. Poiché hai eseguito una regressione logistica, il valore della perdita dell'addestramento viene calcolato come perdita di log utilizzando i dati di addestramento. La perdita di valutazione è la perdita di log calcolata sui dati di valutazione. Entrambi i tipi di perdita rappresentano valori medi di perdita, calcolati su tutti gli esempi dei rispettivi set di dati per ogni iterazione.
Puoi anche visualizzare i risultati dell'addestramento del modello utilizzando la
funzione ML.TRAINING_INFO
.
Valuta il modello
Valuta le prestazioni del modello utilizzando la funzione ML.EVALUATE
. La funzione
ML.EVALUATE
valuta i valori previsti generati dal modello
rispetto ai dati effettivi. Per calcolare le metriche specifiche della regressione logistica, puoi utilizzare la funzione SQL ML.ROC_CURVE
o la funzione DataFrame di BigQuery bigframes.ml.metrics.roc_curve
.
In questo tutorial utilizzi un modello di classificazione binaria che consente di rilevare le transazioni. I valori nella colonna label
sono le due classi generate dal modello: 0
(nessuna transazione) e 1
(transazione effettuata).
SQL
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, esegui la seguente istruzione:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
I risultati dovrebbero essere simili ai seguenti:
+--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | precision | recall | accuracy | f1_score | log_loss | roc_auc | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | 0.468503937007874 | 0.11080074487895716 | 0.98534315834767638 | 0.17921686746987953 | 0.04624221101176898 | 0.98174125874125873 | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
Poiché hai eseguito una regressione logistica, i risultati includono le seguenti colonne:
precision
: una metrica per i modelli di classificazione. La precisione identifica la frequenza con cui un modello è stato corretto nella previsione della classe positiva.recall
: una metrica per i modelli di classificazione che risponde alla seguente domand: tra tutte le possibili etichette positive, quante sono state identificate correttamente dal modello?accuracy
: la precisione è la frazione di previsioni che un modello di classificazione ha effettuato correttamente.f1_score
: una misura della precisione del modello. Il punteggio F1 è la media armonica di la precisione e il richiamo. Il valore migliore di un punteggio F1 è 1. Il valore peggiore è 0.log_loss
: la funzione di perdita utilizzata in una regressione logistica. Questa è la misura della distanza delle previsioni del modello dalle etichette corrette.roc_auc
: l'area sotto la curva ROC. Questa è la probabilità che un classificatore ritenga più probabile che un esempio positivo scelto a caso sia effettivamente positivo rispetto alla probabilità che un esempio negativo scelto a caso sia positivo. Per ulteriori informazioni, consulta Classificazione nel corso introduttivo al machine learning.
Dettagli della query
L'istruzione SELECT
iniziale recupera le colonne dal modello.
La clausola FROM
utilizza la funzione ML.EVALUATE
rispetto al tuo modello.
L'istruzione SELECT
e la clausola FROM
nidificate sono le stesse della query CREATE MODEL
.
La clausola WHERE
- _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
limita il numero di tabelle analizzate dalla query. L'intervallo di date sottoposto a scansione va dal 1° luglio 2017 al 1° agosto 2017. Si tratta dei dati che utilizzi per
valutare il rendimento predittivo del modello. È stato raccolto nel mese immediatamente successivo al periodo di tempo coperto dai dati di addestramento.
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configurare l'autenticazione per un ambiente di sviluppo locale.
Utilizza il modello per prevedere i risultati
Utilizza il modello per prevedere il numero di transazioni effettuate dai visitatori del sito web di ogni paese.
SQL
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, esegui la seguente istruzione:
SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10
I risultati dovrebbero essere simili ai seguenti:
+----------------+---------------------------+ | country | total_predicted_purchases | +----------------+---------------------------+ | United States | 220 | | Taiwan | 8 | | Canada | 7 | | India | 2 | | Turkey | 2 | | Japan | 2 | | Italy | 1 | | Brazil | 1 | | Singapore | 1 | | Australia | 1 | +----------------+---------------------------+
Dettagli della query
L'istruzione SELECT
iniziale recupera la colonna country
e somma la colonna predicted_label
. La colonna predicted_label
viene generata dalla funzione
ML.PREDICT
. Quando utilizzi la funzione ML.PREDICT
, il nome della colonna di output per il modello è predicted_<label_column_name>
. Per i modelli di regressione lineare, predicted_label
è il valore stimato di label
.
Per i modelli di regressione logistica, predicted_label
è l'etichetta che descrive meglio il valore del dato di input specificato, 0
o 1
.
La funzione ML.PREDICT
viene utilizzata per prevedere i risultati mediante il modello.
L'istruzione SELECT
e la clausola FROM
nidificate sono le stesse della query CREATE MODEL
.
La clausola WHERE
- _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
limita il numero di tabelle analizzate dalla query. L'intervallo di date sottoposto a scansione va dal 1° luglio 2017 al 1° agosto 2017. Si tratta dei dati per i quali stai
effettuando le previsioni. È stato raccolto nel mese immediatamente successivo al periodo di tempo coperto dai dati di addestramento.
Le clausole GROUP BY
e ORDER BY
raggruppano i risultati per paese e li ordinano in base alla somma degli acquisti previsti in ordine decrescente.
La clausola LIMIT
viene utilizzata qui per visualizzare solo i primi 10 risultati.
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configurare l'autenticazione per un ambiente di sviluppo locale.
Prevedi gli acquisti per utente
Prevedi il numero di transazioni effettuate da ciascun visitatore del sito web.
SQL
Questa query è identica a quella della sezione precedente, ad eccezione della clausola GROUP BY
. Qui la clausola GROUP BY
GROUP BY fullVisitorId
viene utilizzata per raggruppare i risultati per ID visitatore.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, esegui la seguente istruzione:
SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10
I risultati dovrebbero essere simili ai seguenti:
+---------------------+---------------------------+ | fullVisitorId | total_predicted_purchases | +---------------------+---------------------------+ | 9417857471295131045 | 4 | | 112288330928895942 | 2 | | 2158257269735455737 | 2 | | 489038402765684003 | 2 | | 057693500927581077 | 2 | | 2969418676126258798 | 2 | | 5073919761051630191 | 2 | | 7420300501523012460 | 2 | | 0456807427403774085 | 2 | | 2105122376016897629 | 2 | +---------------------+---------------------------+
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configurare l'autenticazione per un ambiente di sviluppo locale.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.
Puoi eliminare il progetto che hai creato o mantenerlo ed eliminare il set di dati.
Eliminazione del set di dati
L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati creato in questo tutorial:
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, seleziona il set di dati bqml_tutorial che hai creato.
Fai clic su > Elimina.
AzioniNella finestra di dialogo Elimina set di dati, conferma il comando di eliminazione digitando
delete
.Fai clic su Elimina.
Elimina il progetto
Per eliminare il progetto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Per saperne di più sul machine learning, consulta Machine Learning Crash Course.
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per scoprire di più sulla console Google Cloud, consulta Utilizzare la console Google Cloud.