Accedi a oltre 700 lab e corsi

Prevedi la durata dei viaggi in bicicletta con un modello di regressione in BQML 2.5

Lab 1 ora universal_currency_alt 5 crediti show_chart Avanzati
info Questo lab potrebbe incorporare strumenti di AI a supporto del tuo apprendimento.
Accedi a oltre 700 lab e corsi

Panoramica

BigQuery è il database di analisi NoOps a basso costo e completamente gestito di Google. Con BigQuery puoi interrogare molti terabyte di dati senza dover gestire alcuna infrastruttura o aver bisogno di un amministratore del database. BigQuery utilizza SQL e sfrutta i vantaggi offerti dal modello di pagamento a consumo. BigQuery permette di concentrarsi sull'analisi dei dati per trovare insight significativi.

BigQuery Machine Learning è una funzionalità di BigQuery in cui gli analisti di dati possono creare, addestrare, valutare e prevedere tramite modelli di machine learning con una programmazione minima.

In questo lab userai il set di dati delle biciclette di Londra per creare un modello di regressione in BigQuery ML per prevedere la durata dei viaggi. Ipotizziamo che tu abbia un'attività di noleggio di biciclette che offre ai clienti due tipi di biciclette: un modello robusto per il traffico pendolare e un modello da corsa veloce ma fragile. Nel caso dei noleggi di lunga durata, dobbiamo avere a disposizione bici da corsa, viceversa nel caso dei noleggi per periodi brevi, dobbiamo avere a disposizione biciclette per il traffico pendolare. Per poter creare un sistema che consenta di mettere in inventario le biciclette appropriate, abbiamo bisogno di prevedere la durata dei noleggi delle biciclette.

Obiettivi

In questo lab imparerai a:

  • Eseguire query nel set di dati delle biciclette di Londra per il feature engineering
  • Creare un modello di regressione lineare in BigQuery ML
  • Valutare le prestazioni del tuo modello di machine learning
  • Estrarre i pesi del tuo modello

Che cosa ti serve

  • Un progetto Google Cloud
  • Un browser, ad esempio Google Chrome o Mozilla Firefox

Configura l'ambiente

Per ciascun lab, riceverai un nuovo progetto Google Cloud e un insieme di risorse per un periodo di tempo limitato senza alcun costo aggiuntivo.

  1. Accedi a Qwiklabs utilizzando una finestra di navigazione in incognito.

  2. Tieni presente la durata dell'accesso al lab (ad esempio, 1:15:00) e assicurati di finire entro quell'intervallo di tempo.
    Non è disponibile una funzionalità di pausa. Se necessario, puoi riavviare il lab ma dovrai ricominciare dall'inizio.

  3. Quando è tutto pronto, fai clic su Inizia lab.

  4. Annota le tue credenziali del lab (Nome utente e Password). Le userai per accedere a Google Cloud Console.

  5. Fai clic su Apri console Google.

  6. Fai clic su Utilizza un altro account e copia/incolla le credenziali per questo lab nei prompt.
    Se utilizzi altre credenziali, compariranno errori oppure ti verranno addebitati dei costi.

  7. Accetta i termini e salta la pagina di ripristino delle risorse.

Apri la console di BigQuery

  1. Nella console Google Cloud, seleziona Menu di navigazione > BigQuery.

Si aprirà la finestra con il messaggio Ti diamo il benvenuto in BigQuery nella console Cloud. Questa finestra fornisce un link alla guida rapida ed elenca gli aggiornamenti dell'interfaccia utente.

  1. Fai clic su Fine.

Attività 1: esplora i dati relativi alle biciclette per il feature engineering

Il primo passaggio per risolvere un problema di ML consiste nel formularlo: identificare le caratteristiche del nostro modello e l'etichetta. Poiché l'obiettivo del nostro primo modello è prevedere la durata di un noleggio sulla base del set di dati storico dei noleggi di biciclette, l'etichetta è la durata del noleggio.

Se crediamo che la durata varierà in base alla stazione in cui verrà noleggiata la bicicletta, il giorno della settimana e l'ora del giorno, queste potrebbero essere le nostre caratteristiche. Prima di proseguire e creare un modello con queste caratteristiche, però, è una buona idea verificare che questi fattori incidano davvero sull'etichetta.

Il processo mediante il quale stabiliamo le caratteristiche per un modello di machine learning è chiamato feature engineering. Spesso il feature engineering è la fase più importante della creazione di modelli di ML accurati e può avere un impatto più significativo della decisione di quali algoritmi usare o dell'ottimizzazione degli iperparametri. Un buon feature engineering richiede una profonda conoscenza dei dati e del dominio. Si tratta spesso di un processo di verifica delle ipotesi: hai un'idea per una caratteristica, controlli che funzioni (ha delle informazioni reciproche con l'etichetta), quindi la aggiungi al modello. Se non funziona, riprovi.

Impatto della stazione

Per controllare se la durata del noleggio varia in base alla stazione, possiamo visualizzare i risultati della query riportata di seguito in Looker Studio.

  1. Nell'EDITOR di query, incolla questa query:
SELECT start_station_name, AVG(duration) AS duration FROM `bigquery-public-data`.london_bicycles.cycle_hire GROUP BY start_station_name
  1. Fai clic su ESEGUI.
  2. Fai clic su APRI IN > Looker Studio nella console Cloud di BigQuery.
  3. Quando richiesto, seleziona il pulsante INIZIA.
  4. Fai clic sul grafico presente nel canvas.
  5. Nella scheda CONFIGURAZIONE sul lato destro del menu laterale, configura le impostazioni come segue:
  • Dimensioni: start_station_name
  • Metrica: duration
  • Ordina: per duration in ordine Decrescente.
  • Interazione con i grafici: abilita Filtro incrociato e Modifica ordinamento.

Dettagli grafico

  1. Nella scheda STILE sul lato destro del menu laterale, configura le impostazioni come segue:
  • Grafico a barre: Verticale

  • Barre: 100

  • Assi: Mostra assi

    Pagina Stile a schede

Il tuo grafico dovrebbe assomigliare a questo:

Grafico a barre della durata

È evidente che alcune stazioni sono associate a noleggi di lunga durata (più di 3000 secondi), ma che la maggior parte delle stazioni registra durate relativamente brevi. Se tutte le stazioni di Londra fossero associate a durate brevi, la stazione in cui è iniziato il noleggio non sarebbe una buona caratteristica. Ma, come dimostra il grafico, in questo problema la caratteristica start_station_name è importante.

Nota: non possiamo usare la caratteristica end_station_name perché quando viene noleggiata una bicicletta non sappiamo dove verrà restituita.

Siccome stiamo creando un modello di machine learning per prevedere eventi futuri, dobbiamo prestare molta attenzione a non usare colonne che non saranno note al momento in cui viene fatta la previsione. Questo criterio di tempo/causalità impone dei vincoli sulle caratteristiche che è possibile usare.

Impatto del giorno della settimana e dell'ora del giorno

Per la successiva potenziale caratteristica, il processo è simile. Possiamo verificare se dayofweek (o, analogamente, hourofday) è importante.

  1. Nella finestra dell'editor di query, incolla questa query:
SELECT EXTRACT(dayofweek FROM start_date) AS dayofweek, AVG(duration) AS duration FROM `bigquery-public-data`.london_bicycles.cycle_hire GROUP BY dayofweek
  1. Fai clic su APRI IN > Looker Studio nella console Cloud di BigQuery.
Nota: se vedi un messaggio di errore di sistema, devi effettuare alcune modifiche per visualizzare i dati in Looker Studio descritti nei passaggi da 3 a 11.
  1. Fai clic sulla tabella che contiene i dati relativi a duration e dayofweek.

  2. In Configurazione > Metrica, passa il mouse sopra dayofweek e fai clic sull'icona di modifica con la matita.

  3. Nel menu a discesa Formato visualizzazione, fai clic su Numero settimana, poi scegli Formato data personalizzato.

  4. Modifica la data personalizzata selezionando 'Day' w, quindi fai clic su Applica. Nel grafico, il campo dayofweek ora mostra dal giorno 1 al giorno 7.

  5. Fai clic sul grafico che restituisce l'errore di sistema.

  6. In Configurazione > Dimensione, fai clic su duration e seleziona dayofweek.

  7. In Configurazione > Dimensione, passa il mouse sopra dayofweek e fai clic sull'icona di modifica con la matita.

  8. Nel menu a discesa Formato visualizzazione, seleziona Formato data personalizzato e modifica la data personalizzata selezionando 'Day' w. Quindi, fai clic su Applica.

  9. In Configurazione > Metrica, fai clic su dayofweek e seleziona duration.

Per il giorno della settimana la visualizzazione dovrebbe essere simile alla seguente:

Grafico a barre della durata per il giorno della settimana

Per l'ora della settimana la visualizzazione dovrebbe essere simile alla seguente:

Grafico a barre della durata per l'ora del giorno

Nota: come nei passaggi precedenti, potresti dover modificare le proprietà in Looker Studio per vedere l'output desiderato.

È evidente che la durata varia in base sia al giorno della settimana sia all'ora del giorno. Sembra che le durate siano maggiori durante i fine settimana (giorni 1 e 7) rispetto ai giorni infrasettimanali. Allo stesso modo, le durate sono maggiori di mattina presto e a metà pomeriggio. Pertanto, sia dayofweek sia hourofday sono buone caratteristiche.

Impatto del numero di biciclette

Un'altra potenziale caratteristica è il numero di biciclette nella stazione. Forse, ipotizziamo, le persone tengono le biciclette più a lungo se nella stazione in cui effettuano il noleggio ce ne sono meno disponibili.

  1. Nella finestra dell'editor di query, incolla questa query:
SELECT bikes_count, AVG(duration) AS duration FROM `bigquery-public-data`.london_bicycles.cycle_hire JOIN `bigquery-public-data`.london_bicycles.cycle_stations ON cycle_hire.start_station_name = cycle_stations.name GROUP BY bikes_count
  1. Visualizza i dati in Looker Studio.

Grafico a barre della durata

Notiamo che la relazione è rumorosa e non presenta una tendenza visibile (fai un confronto, ad esempio, con l'ora del giorno). Questo indica che il numero di biciclette non è una buona caratteristica.

Attività 2: crea un set di dati di addestramento

Basandoci sull'esplorazione del set di dati delle biciclette e sulla relazione delle varie colonne con la colonna dell'etichetta, possiamo preparare il set di dati di addestramento estraendo le caratteristiche selezionate e l'etichetta:

SELECT duration, start_station_name, CAST(EXTRACT(dayofweek FROM start_date) AS STRING) AS dayofweek, CAST(EXTRACT(hour FROM start_date) AS STRING) AS hourofday FROM `bigquery-public-data`.london_bicycles.cycle_hire

Le colonne delle caratteristiche devono essere numeriche (INT64, FLOAT64 e così via) o categoriche (STRING). Se la caratteristica è numerica, ma deve essere trattata come categorica, dobbiamo trasmetterla come stringa, questo spiega perché abbiamo trasmesso le colonne dayofweek e hourofday che sono numeri interi (negli intervalli 1-7 e 0-23, rispettivamente) in stringhe.

Se la preparazione dei dati implica trasformazioni o unioni che richiedono molte risorse di calcolo, potrebbe essere una buona idea salvare i dati di addestramento ben organizzati in forma di tabella in modo da non dover ripetere l'operazione durante la sperimentazione. Se le trasformazioni sono poco significative ma la query stessa è molto lunga, potrebbe convenire evitare ripetitività salvandoli come visualizzazione.

In questo caso la query è semplice e breve, quindi per chiarezza non la salveremo.

  1. Crea un set di dati in BigQuery chiamato bike_model per archiviare il tuo modello. Imposta il Tipo di località su Più regioni e seleziona la regione UE (più regioni nell'Unione Europea), poiché i dati che stiamo addestrando si riferiscono all'UE. Fai clic su Crea set di dati.

Finestra di dialogo Crea set di dati

Per addestrare un modello di ML e salvarlo nel set di dati bike_model, dobbiamo chiamare CREA MODELLO, che funziona in modo simile a CREA TABELLA. Poiché l'etichetta che stiamo cercando di prevedere è numerica, si tratta di un problema di regressione, per cui l'opzione più appropriata è scegliere il tipo di modello linear_reg nella sezione OPZIONI.

  1. Inserisci la seguente query nell'editor di query:
CREATE OR REPLACE MODEL bike_model.model OPTIONS (input_label_cols=['duration'], model_type='linear_reg') AS SELECT duration, start_station_name, CAST(EXTRACT(dayofweek FROM start_date) AS STRING) AS dayofweek, CAST(EXTRACT(hour FROM start_date) AS STRING) AS hourofday FROM `bigquery-public-data`.london_bicycles.cycle_hire WHERE `duration` IS NOT NULL

Tieni presente che l'addestramento del modello impiega 2-3 minuti.

  1. Per vedere alcune metriche relative all'addestramento del modello, inserisci la seguente query nella finestra dell'editor di BigQuery:
SELECT * FROM ML.EVALUATE(MODEL `bike_model.model`)

L'errore assoluto medio è di 1025 secondi o circa 17 minuti. Questo significa che dovremmo aspettarci di riuscire a prevedere la durata dei noleggi di biciclette con un errore medio di 17 minuti.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea un set di dati di addestramento

Attività 3: migliora il modello mediante il feature engineering

Combina i giorni della settimana

Esistono altri modi che avremmo potuto scegliere per rappresentare le nostre caratteristiche. Ad esempio, ricorda che quando abbiamo esplorato la relazione tra le caratteristiche dei noleggi dayofweek e duration, abbiamo scoperto che le durate erano maggiori durante i fine settimana rispetto ai giorni infrasettimanali. Quindi, invece che trattare il valore non elaborato di dayofweek come caratteristica, possiamo impiegare questo insight fondendo diversi valori dayofweek nella categoria weekday.

  1. Crea un modello di ML di BigQuery con la caratteristica giorni della settimana combinati usando la seguente query:
CREATE OR REPLACE MODEL bike_model.model_weekday OPTIONS (input_label_cols=['duration'], model_type='linear_reg') AS SELECT duration, start_station_name, IF (EXTRACT(dayofweek FROM start_date) BETWEEN 2 AND 6, 'weekday', 'weekend') AS dayofweek, CAST(EXTRACT(hour FROM start_date) AS STRING) AS hourofday FROM `bigquery-public-data`.london_bicycles.cycle_hire WHERE `duration` IS NOT NULL
  1. Per vedere le metriche per questo modello, inserisci questa query nella finestra dell'editor di BigQuery:
SELECT * FROM ML.EVALUATE(MODEL `bike_model.model_weekday`)

Questo modello restituisce un errore assoluto medio di 966 secondi, inferiore ai 1025 secondi del modello originale. Significa che c'è stato un miglioramento.

Suddividi in bucket l'ora del giorno

In base alla relazione tra hourofday e duration, possiamo sperimentare con la suddivisione in bucket della variabile in 4 bin; (-inf,5), [5,10), [10,17) e [17,inf).

  1. Crea un modello di ML di BigQuery con le caratteristiche ora del giorno suddivisa in bucket e giorni della settimana combinati usando la seguente query:
CREATE OR REPLACE MODEL bike_model.model_bucketized OPTIONS (input_label_cols=['duration'], model_type='linear_reg') AS SELECT duration, start_station_name, IF (EXTRACT(dayofweek FROM start_date) BETWEEN 2 AND 6, 'weekday', 'weekend') AS dayofweek, ML.BUCKETIZE(EXTRACT(hour FROM start_date), [5, 10, 17]) AS hourofday FROM `bigquery-public-data`.london_bicycles.cycle_hire WHERE `duration` IS NOT NULL
  1. Per vedere le metriche per questo modello, inserisci questa query nella finestra dell'editor di BigQuery:
SELECT * FROM ML.EVALUATE(MODEL `bike_model.model_bucketized`)

Questo modello restituisce un errore assoluto medio di 904 secondi, inferiore ai 966 secondi del modello basato su giorno della settimana e fine settimana. C'è stato un ulteriore miglioramento.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Migliora il modello mediante il feature engineering

Attività 4: fai previsioni

Il nostro modello migliore contiene diverse trasformazioni dei dati. Non sarebbe bello se BigQuery potesse ricordare i set di trasformazioni che abbiamo creato durante l'addestramento e li applicasse automaticamente al momento della previsione? Lo può fare, usando la clausola TRANSFORM.

In questo caso il modello risultante richiede solo i valori start_station_name e start_date per prevedere il valore duration. Le trasformazioni vengono salvate ed eseguite sui dati non elaborati forniti per creare caratteristiche di input per il modello. Il principale vantaggio di inserire tutte le caratteristiche di pre-elaborazione nella clausola TRANSFORM è che i client del modello non devono sapere che tipo di pre-elaborazione è stata svolta.

  1. Crea un modello di ML di BigQuery con la clausola TRANSFORM che incorpora le caratteristiche ora del giorno suddivisa in bucket e giorni della settimana combinati usando la seguente query:
CREATE OR REPLACE MODEL bike_model.model_bucketized TRANSFORM(* EXCEPT(start_date), IF (EXTRACT(dayofweek FROM start_date) BETWEEN 2 AND 6, 'weekday', 'weekend') AS dayofweek, ML.BUCKETIZE(EXTRACT(HOUR FROM start_date), [5, 10, 17]) AS hourofday ) OPTIONS (input_label_cols=['duration'], model_type='linear_reg') AS SELECT duration, start_station_name, start_date FROM `bigquery-public-data`.london_bicycles.cycle_hire WHERE `duration` IS NOT NULL
  1. Con la clausola TRANSFORM in funzione, inserisci questa query per prevedere la durata di un noleggio da Park Lane in questo momento (i risultati saranno variabili):
SELECT * FROM ML.PREDICT(MODEL bike_model.model_bucketized, ( SELECT 'Park Lane , Hyde Park' AS start_station_name, CURRENT_TIMESTAMP() AS start_date) )

Risultati delle query

  1. Per eseguire previsioni batch su un campione di 100 righe nel set di addestramento, usa la query:
SELECT * FROM ML.PREDICT(MODEL bike_model.model_bucketized, ( SELECT start_station_name, start_date FROM `bigquery-public-data`.london_bicycles.cycle_hire LIMIT 100) )

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Fai previsioni

Attività 5: esamina i pesi del modello

Un modello di regressione lineare prevede l'output come una somma ponderata dei suoi input. Spesso, i pesi del modello devono essere utilizzati in un ambiente di produzione.

  • Esamina (o esporta) i pesi del modello usando la seguente query:

    SELECT * FROM ML.WEIGHTS(MODEL bike_model.model_bucketized)

    Tieni presente che le caratteristiche numeriche hanno un singolo peso, mentre le caratteristiche categoriche hanno un peso per ogni valore possibile. Ad esempio, la caratteristica dayofweek ha i seguenti pesi:

    peso del fine settimana: 2084.4003…, peso del giorno infrasettimanale: 1709.4363…

    Questo significa che se il giorno è infrasettimanale, il contributo di questa caratteristica alla durata prevista generale è di 1709 secondi (i pesi che offrono le prestazioni ottimali non sono univoci, quindi potresti ottenere un valore diverso).

    Fai clic su Controlla i miei progressi per verificare l'obiettivo. Esamina i pesi del modello

Termina il lab

Una volta completato il lab, fai clic su Termina lab. Google Cloud Skills Boost rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.

Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.

Il numero di stelle corrisponde alle seguenti valutazioni:

  • 1 stella = molto insoddisfatto
  • 2 stelle = insoddisfatto
  • 3 stelle = esperienza neutra
  • 4 stelle = soddisfatto
  • 5 stelle = molto soddisfatto

Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.

Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.

Copyright 2020 Google LLC Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.

Prima di iniziare

  1. I lab creano un progetto e risorse Google Cloud per un periodo di tempo prestabilito
  2. I lab hanno un limite di tempo e non possono essere messi in pausa. Se termini il lab, dovrai ricominciare dall'inizio.
  3. In alto a sinistra dello schermo, fai clic su Inizia il lab per iniziare

Utilizza la navigazione privata

  1. Copia il nome utente e la password forniti per il lab
  2. Fai clic su Apri console in modalità privata

Accedi alla console

  1. Accedi utilizzando le tue credenziali del lab. L'utilizzo di altre credenziali potrebbe causare errori oppure l'addebito di costi.
  2. Accetta i termini e salta la pagina di ripristino delle risorse
  3. Non fare clic su Termina lab a meno che tu non abbia terminato il lab o non voglia riavviarlo, perché il tuo lavoro verrà eliminato e il progetto verrà rimosso

Questi contenuti non sono al momento disponibili

Ti invieremo una notifica via email quando sarà disponibile

Bene.

Ti contatteremo via email non appena sarà disponibile

Un lab alla volta

Conferma per terminare tutti i lab esistenti e iniziare questo

Utilizza la navigazione privata per eseguire il lab

Utilizza una finestra del browser in incognito o privata per eseguire questo lab. In questo modo eviterai eventuali conflitti tra il tuo account personale e l'account Studente, che potrebbero causare addebiti aggiuntivi sul tuo account personale.