Guida introduttiva a BigQuery ML

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

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

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

select-bq_0.png

Scorri fino in fondo al menu e fai clic su BigQuery:

select-bq.png

La console BigQuery si aprirà in una nuova scheda del browser, simile a questa:

8b0218390329e8cf.png

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.

4f51bf57291a59db.png

Quindi, denomina il set di dati bqml_codelab e fai clic su OK.

63e32478a5652fbc.png

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:

b8bd9548a0d89165.png

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:

1c7779f6028730cc.png

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:

e639f7a409741dcb.png

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:

2be1d8fa96e10178.png

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