1. Panoramica
BigQuery ML (BQML) consente agli utenti di creare ed eseguire modelli di machine learning in BigQuery utilizzando query SQL. L'obiettivo è democratizzare il machine learning consentendo a chi utilizza SQL di creare modelli con i propri strumenti esistenti e aumentare la velocità di sviluppo eliminando la necessità di spostare i dati.
Cosa creerai
Utilizzerai il set di dati di esempio di Analytics 360 per creare un modello che prevede se un visitatore eseguirà una transazione.
Obiettivi didattici
Come creare, valutare e utilizzare modelli di machine learning in BigQuery
Che cosa ti serve
- Un browser, ad esempio Chrome o Firefox
- Conoscenza di base di SQL o BigQuery
- Documentazione BQML
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome precedente è già stato utilizzato e non funzionerà correttamente). Verrà indicato più avanti in questo codelab come PROJECT_ID
.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
Eseguire questo codelab non dovrebbe costare molto. Assicurati di seguire le istruzioni nella sezione "Pulizia" in cui viene spiegato come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Apri la console di BigQuery
Nella Google Developers Console, fai clic sull'icona Menu in alto a sinistra dello schermo.
Scorri fino in fondo al menu e fai clic su BigQuery:
La console BigQuery si aprirà in una nuova scheda del browser, simile a questa:
Ma non c'è niente qui dentro! Fortunatamente, in BigQuery sono disponibili tantissimi set di dati pubblici da esplorare.
3. Crea un set di dati
Per creare un set di dati, fai clic sulla freccia accanto al nome del progetto e seleziona Crea nuovo set di dati.
Quindi, denomina il set di dati bqml_codelab e fai clic su OK.
4. Crea un modello
Regressione logistica per Analytics 360
Ora passiamo alla nostra attività. Ecco come si crea un modello per prevedere se un visitatore eseguirà una transazione.
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.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 '20170631' LIMIT 100000;
In questo caso, utilizziamo il sistema operativo del dispositivo del visitatore, sia che si tratti di un dispositivo mobile, sia il paese del visitatore e il numero di visualizzazioni di pagina come criteri per determinare se è stata effettuata una transazione.
In questo caso, "codelab" è il nome del set di dati e "sample_model" è il nome del nostro modello. Il tipo di modello specificato è la regressione logistica binaria. In questo caso, label
è ciò a cui stiamo cercando di adattarsi. Tieni presente che se ti interessa solo una colonna, questo è un modo alternativo per impostare input_label_cols
. Inoltre, stiamo limitando i nostri dati di addestramento a quelli raccolti dal 1° agosto 2016 al 31 giugno 2017. Lo scopo è salvare i dati dell'ultimo mese per le "previsioni". Inoltre, stiamo limitando a 100.000 punti dati per risparmiare tempo. Se non hai fretta, puoi rimuovere l'ultima riga.
L'esecuzione del comando CREATE MODEL crea un job di query che verrà eseguito in modo asincrono, quindi puoi, ad esempio, chiudere o aggiornare la finestra della UI di BigQuery.
[Facoltativo] Informazioni sul modello e statistiche di addestramento
Se ti interessa, puoi ottenere informazioni sul modello facendo clic su sample_model nel set di dati bqml_codelab nella UI. In Dettagli, dovresti trovare alcune informazioni di base sul modello e le opzioni di addestramento utilizzate per produrre il modello. In Statistiche addestramento, dovresti vedere una tabella simile a questa:
5. valuta il modello
Valuta il nostro modello
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.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'));
Se utilizzata con un modello di regressione lineare, la query precedente restituisce le seguenti colonne: mean_absolute_error
, mean_squared_error
, mean_squared_log_error
, median_absolute_error
, r2_score
, explained_variance
. Se utilizzata con un modello di regressione logistica, la query precedente restituisce le seguenti colonne: precision
, recall
, accuracy
, f1_score
, log_loss
, roc_auc
. Consulta il glossario sul machine learning o esegui una ricerca su Google per capire come vengono calcolate ognuna di queste metriche e cosa significano.
Concretamente, ti accorgerai che le parti SELECT
e FROM
della query sono identiche a quelle utilizzate durante l'addestramento. La parte WHERE
riflette la modifica dell'intervallo di tempo, mentre la parte FROM
indica che stiamo chiamando ml.EVALUATE
. Dovresti vedere una tabella simile alla seguente:
6. Utilizza il modello
Prevedere gli acquisti in base al paese
Qui cerchiamo di prevedere il numero di transazioni effettuate dai visitatori di ogni paese, ordinare i risultati e selezionare i primi 10 paesi per acquisti.
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.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;
Nota che questa query è molto simile alla query di valutazione che abbiamo dimostrato nella sezione precedente. Invece di ml.EVALUATE
, utilizziamo ml.PREDICT
qui e racchiudiamo la parte BQML della query con comandi SQL standard. Concretamente, siamo interessati al paese e alla somma degli acquisti per ogni paese, pertanto SELECT
, GROUP BY
e ORDER BY
sono questi. LIMIT
viene utilizzato qui per assicurarci di ottenere solo i primi 10 risultati. Dovresti vedere una tabella simile alla seguente:
Prevedere gli acquisti per utente
Ecco un altro esempio. Questa volta cerchiamo di prevedere il numero di transazioni effettuate da ogni visitatore, ordinare i risultati e selezionare i primi 10 visitatori in base alle transazioni.
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.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;
Dovresti vedere una tabella simile alla seguente:
7. Complimenti!
Hai terminato questo codelab. Cerchi una sfida? Prova a creare un modello di regressione lineare con BQML.
Argomenti trattati
- Creare un modello di regressione logistica binaria
- Valuta il modello
- Utilizza il modello per fare previsioni
Passaggi successivi
- Per saperne di più su BQML, consulta la documentazione.