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 attraverso l'eliminazione della 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 effettuerà 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 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 tra tutti i progetti Google Cloud (il nome sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID.

  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.

L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Apri la console di BigQuery

Nella Google Developer Console, fai clic sull'icona Menu in alto a sinistra dello schermo.

select-bq_0.png

Scorri verso il basso fino alla fine del menu e fai clic su BigQuery:

select-bq.png

Si aprirà la console BigQuery 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 giù accanto al nome del progetto e seleziona Crea nuovo set di dati.

4f51bf57291a59db.png

Successivamente, assegna al set di dati il nome bqml_codelab e fai clic su Ok.

63e32478a5652fbc.png

4. Crea un modello

Regressione logistica per Analytics 360

Ora passiamo al nostro compito. Ecco come creare un modello per prevedere se un visitatore effettuerà 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;

Qui utilizziamo il sistema operativo del dispositivo del visitatore, se è un dispositivo mobile, il paese del visitatore e il numero di visualizzazioni di pagina come criteri per stabilire 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ò che stiamo cercando di adattare. Tieni presente che se ti interessa solo una colonna, questo è un modo alternativo per impostare input_label_cols. Stiamo inoltre limitando i nostri dati di addestramento a quelli raccolti dal 1° agosto 2016 al 30 giugno 2017. Lo facciamo per salvare i dati dell'ultimo mese per la "previsione". Inoltre, per risparmiare tempo,abbiamo fissato un limite di 100.000 punti dati. 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 in modo da poter, 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 opzioni di addestramento utilizzate per produrre il modello. In Statistiche allenamento, 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 del machine learning o esegui una ricerca su Google per capire come vengono calcolate queste metriche e cosa significano.

In concreto, ti renderai conto che le parti SELECT e FROM della query sono identiche a quelle utilizzate durante l'addestramento. La parte WHERE riflette la modifica del periodo di tempo e la parte FROM mostra che stiamo chiamando ml.EVALUATE. Dovresti vedere una tabella simile alla seguente:

1c7779f6028730cc.png

6. Utilizzare il modello

Prevedi gli acquisti per paese

In questo caso, proviamo a prevedere il numero di transazioni effettuate dai visitatori di ciascun paese, ordiniamo i risultati e selezioniamo i primi 10 paesi in base agli 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;

Tieni presente che questa query è molto simile alla query di valutazione che abbiamo mostrato nella sezione precedente. Invece di ml.EVALUATE, qui utilizziamo ml.PREDICT e racchiudiamo la parte BQML della query con comandi SQL standard. Nello specifico, ci interessano il paese e la somma degli acquisti per ciascun paese, ecco perché utilizziamo SELECT, GROUP BY e ORDER BY. LIMIT viene utilizzato qui per assicurarci di ottenere solo i primi 10 risultati. Dovresti vedere una tabella simile alla seguente:

e639f7a409741dcb.png

Prevedi gli acquisti per utente

Ecco un altro esempio. Questa volta proviamo a prevedere il numero di transazioni effettuate da ciascun visitatore, ordiniamo i risultati e selezioniamo 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 completato questo codelab. Cerchi una sfida? Prova a creare un modello di regressione lineare con BQML.

Argomenti trattati

  • Crea un modello di regressione logistica binaria
  • Valuta il modello
  • Utilizzare il modello per fare previsioni

Passaggi successivi