BigQuery ML supporta l'apprendimento non supervisionato . Puoi applicare l'algoritmo k-means per raggruppare i dati in cluster. A differenza del machine learning supervisionato, che riguarda l'analisi predittiva, l'apprendimento non supervisionato riguarda l'analisi descrittiva. Si tratta di comprendere i tuoi dati per poter prendere decisioni basate sui dati.
In questo tutorial utilizzerai un modello k-means in BigQuery ML per creare cluster di dati nel set di dati pubblico London Bicycle Hire. I dati di London Bicycle Hires contengono il numero di oneri del programma di noleggio biciclette Santander di Londra dal 2011 a oggi. I dati comprendono timestamp di inizio e di fine, nomi delle stazioni e durata delle corse.
Le query in questo tutorial utilizzano le funzioni geografiche disponibili nell'analisi geospaziale. Per ulteriori informazioni sull'analisi geospaziale, consulta Introduzione all'analisi geospaziale.
Obiettivi
In questo tutorial, imparerai a:- Creare un modello di clustering k-means.
- Prendi decisioni basate sui dati basate sulla visualizzazione dei cluster da parte del machine learning.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:
- BigQuery
- BigQuery ML
Per informazioni sui costi di BigQuery, consulta la pagina Prezzi di BigQuery.
Per informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
- BigQuery è abilitato automaticamente nei nuovi progetti.
Per attivare BigQuery in un progetto preesistente, vai a
Attiva l'API BigQuery.
Introduzione
I dati potrebbero contenere raggruppamenti naturali di dati. Potresti identificare questi gruppi in modo descrittivo per prendere decisioni basate sui dati. Ad esempio, un rivenditore potrebbe voler identificare i raggruppamenti naturali dei clienti che hanno abitudini di acquisto o sedi simili. Questa procedura è nota come segmentazione dei clienti.
I dati utilizzati per eseguire la segmentazione dei clienti possono includere il negozio visitato, gli articoli acquistati, l'importo pagato e così via. Devi creare un modello per provare a capire come sono questi gruppi di utenti tipo in modo da poter progettare elementi che attirano i membri del gruppo.
Puoi anche trovare gruppi di prodotti tra gli articoli acquistati. In questo caso, raggruppi gli articoli in base a chi li ha acquistati, quando, al luogo in cui sono stati acquistati e così via. Dovresti creare un modello per determinare le caratteristiche di un gruppo di prodotti in modo da poter prendere decisioni informate, ad esempio come migliorare il cross-sell.
In questo tutorial, utilizzerai BigQuery ML per creare un modello k-means che raggruppa i dati di London Bicycle Hires in base agli attributi delle stazioni per biciclette.
Per creare il modello k-means devi procedere nel seguente modo.
- Passaggio 1: crea un set di dati per archiviare il modello.
- La prima cosa da fare è creare un set di dati in cui sia memorizzato il tuo modello.
- Passaggio 2: esamina i dati di addestramento.
- Il passaggio successivo consiste nell'esaminare i dati utilizzati per addestrare il modello di clustering eseguendo una query sulla tabella
london_bicycles
. Poiché k-means è una tecnica di apprendimento non supervisionato, l'addestramento del modello non richiede etichette né richiede di suddividere i dati in dati di addestramento e di valutazione.
- Passaggio 3. Crea un modello k-means.
- Il terzo passaggio consiste nel creare il tuo modello k-means. Quando crei il modello, il campo del clustering è
station_name
e raggruppi i dati in base all'attributo della stazione, ad esempio la distanza della stazione dal centro città.
- Passaggio 4. Utilizza la funzione
ML.PREDICT
per prevedere il cluster di una stazione. - A questo punto puoi utilizzare la funzione
ML.PREDICT
per prevedere il cluster per un determinato insieme di stazioni. Prevedi i cluster per tutti i nomi di stazioni che contengono la stringaKennington
.
- Passaggio 4. Utilizza la funzione
- Passaggio 5: utilizza il modello per prendere decisioni basate sui dati.
- L'ultimo passaggio consiste nell'utilizzare il modello per prendere decisioni basate sui dati. Ad esempio, in base ai risultati del modello, puoi determinare quali stazioni trarrebbero vantaggio da una capacità aggiuntiva.
Passaggio 1: crea il 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, procedi nel seguente modo:
In ID set di dati, inserisci
bqml_tutorial
.Per Tipo di località, seleziona Più aree geografiche e poi UE (più aree geografiche nell'Unione europea).
Il set di dati pubblico di London Bicycle Hires è archiviato nella multiregione
EU
. Il set di dati deve trovarsi nella stessa località.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Passaggio 2: esamina i dati di addestramento
Successivamente, esaminerai i dati utilizzati per addestrare il tuo modello k-means. In questo tutorial, imparerai a raggruppare le stazioni per biciclette in base ai seguenti attributi:
- Durata dei noleggi
- Numero di viaggi al giorno
- Distanza dal centro città
La query seguente compila i tuoi dati di addestramento. Questa query è inclusa nell'istruzione CREATE MODEL
più avanti in questo tutorial.
WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name ) SELECT * FROM stationstats ORDER BY distance_from_city_center ASC
Dettagli query
Questa query estrae i dati sui noleggi di biciclette, tra cui start_station_name
, e duration
e li unisce alle informazioni sulle stazioni, tra cui distance-from-city-center
. Quindi, calcola gli attributi della stazione di stationstats
, inclusa la durata media delle corse e il numero di corse, e passa attraverso l'attributo della stazione distance_from_city_center
.
Questa query utilizza la clausola WITH
per definire le sottoquery. La query utilizza anche le funzioni di analisi geospaziale ST_DISTANCE
e ST_GEOGPOINT
. Per ulteriori informazioni su queste funzioni, consulta la sezione Funzioni geografiche.
Per ulteriori informazioni sull'analisi geospaziale, consulta Introduzione all'analisi geospaziale.
Esegui la query
Per eseguire la query che compila i dati di addestramento per il modello:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Query editor.
WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name ) SELECT * FROM stationstats ORDER BY distance_from_city_center ASC
Fai clic su Esegui.
Al termine della query, fai clic sulla scheda Risultati sotto l'area di testo della query. Nella scheda Risultati vengono mostrate le colonne su cui hai eseguito query per addestrare il tuo modello:
station_name
,duration
,num_trips
edistance_from_city_center
. I risultati dovrebbero avere il seguente aspetto.
Passaggio 3: crea un modello k-means
Ora che hai esaminato i dati di addestramento, il passaggio successivo consiste nel creare un modello k-means utilizzando i dati.
Puoi creare e addestrare un modello k-means utilizzando l'istruzione CREATE MODEL
con l'opzione model_type=kmeans
. La seguente query aggiunge un'istruzione CREATE MODEL
alla query precedente e rimuove i campi id
nei dati.
CREATE OR REPLACE MODEL bqml_tutorial.london_station_clusters OPTIONS(model_type='kmeans', num_clusters=4) AS WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, isweekday, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name, isweekday) SELECT * EXCEPT(station_name, isweekday) FROM stationstats
Dettagli query
L'istruzione CREATE MODEL
specifica il numero desiderato di cluster, ovvero quattro. Nell'istruzione SELECT
, la clausola EXCEPT
esclude la colonna station_name
perché station_name
non è una funzionalità. La query crea una riga univoca per nome_stazione e solo le caratteristiche sono menzionate nell'istruzione SELECT
.
Se ometti l'opzione num_clusters
, BigQuery ML sceglierà un'impostazione predefinita ragionevole in base al numero totale di righe nei dati di addestramento. Puoi anche eseguire l'ottimizzazione degli iperparametri per trovare un numero valido. Per determinare un
numero ottimale di cluster, devi eseguire la query CREATE MODEL
per diversi
valori di num_clusters
, trovare la misura di errore e scegliere il punto in cui
la misura di errore è al suo valore minimo. Per ottenere la misurazione degli errori, seleziona il modello e fai clic sulla scheda Valutazione. Questa scheda mostra l'indice Davies-Bouldin.
Esegui la query CREATE MODEL
Per eseguire la query che crea il tuo modello k-means:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Query editor.
CREATE OR REPLACE MODEL bqml_tutorial.london_station_clusters OPTIONS(model_type='kmeans', num_clusters=4) AS WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, isweekday, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name, isweekday) SELECT * EXCEPT(station_name, isweekday) FROM stationstats
Fai clic su Esegui.
Nel pannello di navigazione, nella sezione Risorse, espandi il nome del progetto, fai clic su bqml_tutorial e poi su london_station_clusters.
Fai clic sulla scheda Schema. Lo schema del modello elenca i quattro attributi della stazione che BigQuery ML ha utilizzato per eseguire il clustering. Lo schema dovrebbe essere simile al seguente.
Fai clic sulla scheda Valutazione. Questa scheda mostra le visualizzazioni dei cluster identificati dal modello k-means. In Funzionalità numeriche, i grafici a barre mostrano fino a 10 dei valori di funzionalità numeriche più importanti per ciascun centroide. Puoi selezionare le funzionalità da visualizzare dal menu a discesa.
Passaggio 4: utilizza la funzione ML.PREDICT
per prevedere il cluster di una stazione
Per identificare il cluster a cui appartiene una determinata stazione, utilizza la funzione ML.PREDICT
. La query seguente prevede il cluster di ogni stazione
con la stringa "Kennington" nel nome.
WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name ) SELECT * EXCEPT(nearest_centroids_distance) FROM ML.PREDICT( MODEL bqml_tutorial.london_station_clusters, ( SELECT * FROM stationstats WHERE REGEXP_CONTAINS(station_name, 'Kennington')))
Dettagli query
Questa query utilizza la funzione REGEXP_CONTAINS
per trovare tutte le voci nella colonna station_name
che contengono la stringa "Kennington". La funzione ML.PREDICT
utilizza questi valori per prevedere quali cluster conterranno queste stazioni.
Esegui la query ML.PREDICT
Per eseguire la query ML.PREDICT
:
Nella console Google Cloud, fai clic sul pulsante Crea nuova query.
Inserisci la seguente query GoogleSQL nell'area di testo Query editor.
WITH hs AS ( SELECT h.start_station_name AS station_name, IF (EXTRACT(DAYOFWEEK FROM h.start_date) = 1 OR EXTRACT(DAYOFWEEK FROM h.start_date) = 7, "weekend", "weekday") AS isweekday, h.duration, ST_DISTANCE(ST_GEOGPOINT(s.longitude, s.latitude), ST_GEOGPOINT(-0.1, 51.5))/1000 AS distance_from_city_center FROM `bigquery-public-data.london_bicycles.cycle_hire` AS h JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS s ON h.start_station_id = s.id WHERE h.start_date BETWEEN CAST('2015-01-01 00:00:00' AS TIMESTAMP) AND CAST('2016-01-01 00:00:00' AS TIMESTAMP) ), stationstats AS ( SELECT station_name, AVG(duration) AS duration, COUNT(duration) AS num_trips, MAX(distance_from_city_center) AS distance_from_city_center FROM hs GROUP BY station_name ) SELECT * EXCEPT(nearest_centroids_distance) FROM ML.PREDICT( MODEL bqml_tutorial.london_station_clusters, ( SELECT * FROM stationstats WHERE REGEXP_CONTAINS(station_name, 'Kennington')))
Fai clic su Esegui.
Al termine della query, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto.
Passaggio 5: utilizza il modello per prendere decisioni basate sui dati
I risultati della valutazione possono aiutarti a interpretare i diversi cluster.
In questo esempio, Cluster#3
mostra una stazione della città animata vicina al centro città. Cluster#2
mostra la seconda stazione della città meno affollata.
Cluster#1
mostra una stazione della periferia meno affollata, con noleggi di durata maggiore.
Cluster#4
mostra un'altra stazione di periferia con corse più brevi. Sulla base di questi risultati, puoi utilizzare i dati per prendere decisioni. Ad esempio:
Supponiamo che tu debba sperimentare un nuovo tipo di blocco Quale cluster di stazioni dovresti scegliere come soggetto per questo esperimento? Le stazioni in
Cluster#1
,Cluster#2
oCluster#4
sembrano scelte logiche perché non sono le più trafficate.Supponiamo che tu voglia fornire alcune stazioni alle bici da corsa. Quali stazioni dovresti scegliere?
Cluster#1
è il gruppo di stazioni distanti dal centro città e hanno i viaggi più lunghi. Probabilmente sono candidati per le bici da corsa.
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
- Puoi eliminare il progetto che hai creato.
- In alternativa, puoi mantenere il progetto ed eliminare il set di dati.
Elimina il set di dati
L'eliminazione del progetto comporta la rimozione di tutti i set di dati e di tutte le tabelle al suo interno. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati che hai creato in questo tutorial:
Se necessario, apri la pagina BigQuery nella console Google Cloud.
Nella barra di navigazione, fai clic sul set di dati bqml_tutorial creato.
Fai clic su Elimina set di dati sul lato destro della finestra. Questa azione elimina il set di dati e il modello.
Nella finestra di dialogo Elimina set di dati, conferma il comando di eliminazione digitando il nome del set di dati (
bqml_tutorial
) e fai clic su Elimina.
Elimina il progetto
Per eliminare il progetto:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per informazioni sulla creazione di modelli, consulta la
CREATE MODEL
sintassi.