Creare un modello k-means per raggruppare il set di dati dei noleggi di biciclette a Londra


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

  1. 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.
  2. Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.

  4. Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.

  6. BigQuery è abilitato automaticamente nei nuovi progetti. Per attivare BigQuery in un progetto preesistente, vai a

    Attiva l'API BigQuery.

    Abilita l'API

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 stringa Kennington.
  • 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:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nel riquadro Explorer, fai clic sul nome del progetto.

  3. Fai clic su Visualizza azioni > Crea set di dati.

    Crea set di dati.

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

      Crea la pagina del 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:

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. 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
    
    
  3. Fai clic su Esegui.

  4. 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 e distance_from_city_center. I risultati dovrebbero avere il seguente aspetto.

    Risultati delle query

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.

Scheda Formazione

Esegui la query CREATE MODEL

Per eseguire la query che crea il tuo modello k-means:

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. 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
    
    
  3. Fai clic su Esegui.

  4. Nel pannello di navigazione, nella sezione Risorse, espandi il nome del progetto, fai clic su bqml_tutorial e poi su london_station_clusters.

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

    Informazioni sullo schema del cluster

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

    Grafici numerici delle funzionalità

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:

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. 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')))
    
    
  3. Fai clic su Esegui.

  4. Al termine della query, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto.

    Risultati ML.PREDICT

Passaggio 5: utilizza il modello per prendere decisioni basate sui dati

I risultati della valutazione possono aiutarti a interpretare i diversi cluster.

Grafici numerici delle funzionalità

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 o Cluster#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:

  1. Se necessario, apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina BigQuery

  2. Nella barra di navigazione, fai clic sul set di dati bqml_tutorial creato.

  3. Fai clic su Elimina set di dati sul lato destro della finestra. Questa azione elimina il set di dati e il modello.

  4. 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:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi