Creazione di un modello k-means per raggruppare il set di dati per i noleggi di biciclette a Londra

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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 Hire di biciclette di Londra. I dati di London Cycle Hires contengono il numero di treni del programma di noleggio biciclette Santander di Londra dal 2011 a oggi. I dati includono timestamp di inizio e 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:

  • Creare un modello di clustering k-means.
  • Prendi decisioni basate sui dati in base alla visualizzazione dei cluster di BigQuery ML.

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 la pagina 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 pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

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

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

    Vai al selettore progetti

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

  6. La funzionalità BigQuery viene attivata automaticamente nei nuovi progetti. Per attivare BigQuery in un progetto preesistente, vai a

    Attiva l'API BigQuery.

    Abilita l'API

Introduzione

I dati possono contenere raggruppamenti naturali di dati o cluster di dati. Potresti identificare questi gruppi in modo descrittivo per prendere decisioni basate sui dati. Ad esempio, un rivenditore potrebbe voler identificare raggruppamenti naturali di 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 che hanno visitato, quali articoli hanno acquistato, quanto hanno pagato e così via. Potresti creare un modello per provare a capire come sono questi gruppi di utenti tipo dei clienti, in modo da poter progettare elementi che attirano i membri del gruppo.

Potresti trovare gruppi di prodotti anche tra gli articoli acquistati. In questo caso, raggrupperai gli elementi in base a chi li ha acquistati, quando sono stati acquistati, dove sono stati acquistati e così via. Potresti 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 Cycle Hires in base agli attributi delle stazioni di bike.

La creazione del modello k-means prevede i seguenti passaggi.

  • Passaggio 1: crea un set di dati per archiviare il modello.
    Il primo passaggio consiste nel creare un set di dati in cui è archiviato il modello.
  • Passaggio 2: esamina i dati di addestramento.
    Il passaggio successivo consiste nell'esaminare i dati che utilizzi 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 la suddivisione dei dati in dati di addestramento e valutazione.
  • Passaggio 3: crea un modello k-means.
    Il passaggio 3 prevede la creazione del 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.
    Quindi, utilizzi la funzione ML.PREDICT per prevedere il cluster per un dato 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 potrebbero trarre vantaggio da una capacità aggiuntiva.

Passaggio 1: crea il set di dati

Il primo passaggio consiste nel creare un set di dati BigQuery per archiviare il tuo modello. Per creare il set di dati:

  1. In Google Cloud Console, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nel pannello di navigazione, nella sezione Risorse, fai clic sul nome del tuo progetto.

  3. Sul lato destro, nel riquadro dei dettagli, fai clic su Crea set di dati.

    Crea set di dati

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci bqml_tutorial.
    • Per Località dei dati, scegli Unione europea (UE). Il set di dati pubblico London Cycle Hire è archiviato nella località multiregionale EU. Il set di dati deve trovarsi nella stessa località.

      Crea la pagina del set di dati

  5. Lascia invariate tutte le altre impostazioni predefinite e fai clic su Crea set di dati.

Passaggio 2: esamina i dati di addestramento

Quindi, esaminerai i dati utilizzati per addestrare il modello k-means. In questo tutorial, raggrupperai le stazioni per biciclette in base ai seguenti attributi:

  • Durata dei noleggi
  • Numero di corse al giorno
  • Distanza dal centro città

La seguente query 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 della stazione, tra cui distance-from-city-center. Calcola quindi gli attributi della stazione di stationstats, compresi 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 query secondarie. 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 del modello:

  1. In Google Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    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. Quando la query è completa, fai clic sulla scheda Risultati sotto l'area del testo della query. La scheda Risultati mostra le colonne oggetto di query utilizzate per addestrare il tuo modello: station_name, duration, num_trips, distance_from_city_center. I risultati dovrebbero avere l'aspetto seguente.

    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: 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 ogni stazione_nome e solo le funzionalità sono citate nell'istruzione SELECT.

Se ometti l'opzione num_clusters, BigQuery ML sceglierà un valore predefinito 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 una query CREATE MODEL per valori diversi di num_clusters, trovare la misura di errore e scegliere il punto in cui la misura di errore corrisponde al suo valore minimo. Per ottenere la misura di errore, seleziona il tuo 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 modello k-means:

  1. In Google Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    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 di stazione che BigQuery ML utilizzava per eseguire il clustering. Lo schema dovrebbe essere simile all'esempio 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 più importanti delle caratteristiche numeriche per ogni 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 che contiene la stringa "Kennington".

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 della colonna station_name che contengono la stringa "Kennington". La funzione ML.PREDICT utilizza questi valori per prevedere quali cluster conterranno tali stazioni.

Esegui la query ML.PREDICT

Per eseguire la query ML.PREDICT:

  1. In Google Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    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. Quando la query è completa, fai clic sulla scheda Risultati sotto l'area del testo della query. I risultati dovrebbero avere l'aspetto seguente.

    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 animata della città vicina al centro città. Cluster#2 mostra la seconda stazione meno affollata. Cluster#1 mostra una sottostazione meno affollata, con noleggi di durata maggiore. Cluster#4 mostra un'altra stazione suburbana con corse più brevi. In base a questi risultati, puoi utilizzare i dati per prendere decisioni al meglio. 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 di Cluster#1, Cluster#2 o Cluster#4 sembrano scelte logiche perché non sono quelle più affollate.

  • Supponiamo che tu voglia immagazzinare alcune stazioni con biciclette da corsa. Quali stazioni dovresti scegliere? Cluster#1 è il gruppo di stazioni distanti dal centro città e hanno i percorsi più lunghi. Questi sono probabilmente candidati per 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.

Eliminazione del set di dati

L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle che contiene. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati che hai creato in questo tutorial:

  1. Se necessario, apri la pagina BigQuery in Google Cloud Console.

    Vai alla pagina BigQuery

  2. Nella navigazione, fai clic sul set di dati bqml_tutorial che hai 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.

Eliminazione del progetto in corso...

Per eliminare il progetto:

  1. In Google Cloud Console, 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