Utilizzare BigQuery ML per prevedere il peso dei pinguini


In questo tutorial utilizzerai un modello di regressione lineare in BigQuery ML per prevedere il peso di un pinguino in base alle sue informazioni demografiche. Una regressione lineare è un tipo di modello di regressione che genera un valore continuo da una combinazione lineare di caratteristiche di input.

Questo tutorial utilizza il set di dati bigquery-public-data.ml_datasets.penguins.

Obiettivi

In questo tutorial, imparerai a:

  • Crea un modello di regressione lineare.
  • Valutare il modello.
  • Fai previsioni utilizzando il modello.

Costi

Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:

  • BigQuery
  • BigQuery ML

Per ulteriori informazioni sui costi di BigQuery, consulta la pagina relativa ai prezzi di BigQuery.

Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.

Prima di iniziare

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

Autorizzazioni obbligatorie

Per creare il modello utilizzando BigQuery ML, sono necessarie le seguenti autorizzazioni IAM:

  • bigquery.jobs.create
  • bigquery.models.create
  • bigquery.models.getData
  • bigquery.models.updateData
  • bigquery.models.updateMetadata

Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:

  • bigquery.models.getData sul modello
  • bigquery.jobs.create

Crea un 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 il set di dati.

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).

      I set di dati pubblici sono archiviati nella US multiregione. Per semplicità, archivia il set di dati nella stessa posizione.

    • Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.

      Pagina Crea set di dati.

Crea il modello

Crea un modello di regressione lineare utilizzando il set di dati di esempio di Analytics per BigQuery.

SQL

Puoi creare un modello di regressione lineare utilizzando l'istruzione CREATE MODEL e specificando LINEAR_REG per il tipo di modello. La creazione del modello include anche la sua addestramento.

Di seguito sono riportate alcune informazioni utili sulla dichiarazione CREATE MODEL:

  • L'opzione input_label_cols specifica la colonna nell'istruzione SELECT da utilizzare come colonna delle etichette. In questo caso, la colonna dell'etichetta è body_mass_g. Per i modelli di regressione lineare, la colonna dell'etichetta deve avere valori reali, ovvero i valori della colonna devono essere numeri reali.
  • L'istruzione SELECT di questa query utilizza le seguenti colonne della tabella bigquery-public-data.ml_datasets.penguins per prevedere il peso di un pinguino:

    • species: la specie di pinguino.
    • island: l'isola su cui risiede il pinguino.
    • culmen_length_mm: la lunghezza del culmen del pinguino in millimetri.
    • culmen_depth_mm: la profondità del culmen del pinguino in millimetri.
    • flipper_length_mm: la lunghezza delle pinne del pinguino in millimetri.
    • sex: il sesso del pinguino.
  • La clausola WHERE nell'istruzione SELECT di questa query, WHERE body_mass_g IS NOT NULL, esclude le righe in cui la colonna body_mass_g è NULL.

Esegui la query che crea il modello di regressione lineare:

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

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente query:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
    OPTIONS
      (model_type='linear_reg',
      input_label_cols=['body_mass_g']) AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
  3. La creazione del modello penguins_model richiede circa 30 secondi. Per visualizzare il modello, vai al riquadro Explorer, espandi il set di dati bqml_tutorial, quindi espandi la cartella Modelli.

BigQuery DataFrames

Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Drop rows with nulls to get training data
training_data = bq_df.dropna(subset=["body_mass_g"])

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data.drop(columns=["body_mass_g"])
label_columns = training_data[["body_mass_g"]]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
    replace=True,
)

La creazione del modello richiede circa 30 secondi. Per visualizzare il modello, vai al riquadro Explorer, espandi il set di dati bqml_tutorial e poi la cartella Modelli.

Visualizzare le statistiche di addestramento

Per visualizzare i risultati dell'addestramento del modello, puoi utilizzare la funzione ML.TRAINING_INFO o visualizzare le statistiche nella console Google Cloud. In questo tutorial utilizzi la console Google Cloud.

Un algoritmo di machine learning crea un modello esaminando molti esempi e tentando di trovare un modello che minimizzi la perdita. Questo processo è noto come minimizzazione empirica del rischio.

La perdita è la penalità per una previsione errata. È un numero che indica quanto fosse negativa la previsione del modello su un singolo esempio. Se la previsione del modello è perfetta, la perdita è zero; in caso contrario, la perdita è maggiore. L'obiettivo dell'addestramento di un modello è trovare un insieme di ponderazioni e bias che presentino, in media, una perdita lieve in tutti gli esempi.

Visualizza le statistiche di addestramento del modello generate durante l'esecuzione della queryCREATE MODEL:

  1. Nel riquadro Explorer, espandi il set di dati bqml_tutorial e poi la cartella Modelli. Fai clic su penguins_model per aprire il riquadro delle informazioni sul modello.

  2. Fai clic sulla scheda Addestramento e quindi su Tabella. I risultati dovrebbero essere simili ai seguenti:

    Output di ML.TRAINING_INFO

    La colonna Perdita di dati di addestramento rappresenta la metrica relativa alla perdita calcolata dopo che il modello è stato addestrato sul set di dati di addestramento. Poiché hai eseguito una regressione lineare, questa colonna mostra il valore dell'errore quadratico medio. Per questo addestramento viene utilizzata automaticamente una strategia di ottimizzazione normal_equation, pertanto è necessaria una sola iterazione per convergere al modello finale. Per ulteriori informazioni sull'impostazione della strategia di ottimizzazione del modello, consulta optimize_strategy.

Valuta il modello

Dopo aver creato il modello, valutane le prestazioni utilizzando la funzione ML.EVALUATE o la funzione BigQuery DataFrames score per valutare i valori previsti generati dal modello rispetto ai dati effettivi.

SQL

Come input, la funzione ML.EVALUATE prende il modello addestrato e un set di dati corrispondente allo schema dei dati utilizzati per addestrare il modello. In un ambiente di produzione, devi valutare il modello su dati diversi da quelli utilizzati per addestrarlo. Se esegui ML.EVALUATE senza fornire dati di input, la funzione recupera le metriche di valutazione calcolate durante l'addestramento. Queste metriche vengono calcolate utilizzando il set di dati di valutazione riservato automaticamente:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL bqml_tutorial.penguins_model);
    

Esegui la query ML.EVALUATE:

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

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente query:

      SELECT
        *
      FROM
        ML.EVALUATE(MODEL `bqml_tutorial.penguins_model`,
          (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL));
      

BigQuery DataFrames

Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

import bigframes.pandas as bpd

# Select the model you will be evaluating. `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model` object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
)

# Score the model with input data defined in an earlier step to compare
# model predictions on feature_columns to true labels in label_columns.
score = model.score(feature_columns, label_columns)
# Expected output results:
# index  mean_absolute_error  mean_squared_error  mean_squared_log_error  median_absolute_error  r2_score  explained_variance
#   0        227.012237         81838.159892            0.00507                173.080816        0.872377    0.872377
#   1 rows x 6 columns

I risultati dovrebbero essere simili ai seguenti:

Output di ML.EVALUATE

Poiché hai eseguito una regressione lineare, i risultati includono le seguenti colonne:

  • mean_absolute_error
  • mean_squared_error
  • mean_squared_log_error
  • median_absolute_error
  • r2_score
  • explained_variance

Una metrica importante nei risultati della valutazione è il coefficiente R2. Il coefficiente R2 è una misura statistica che determina se le previsioni della regressione lineare si avvicinano ai dati effettivi. Un valore pari a 0 indica che il modello non spiega nessuna delle variabilità dei dati di risposta attorno alla media. Un valore 1 indica che il modello spiega tutta la variabilità degli dati di risposta attorno alla media.

Puoi anche esaminare il riquadro delle informazioni del modello nella console Google Cloud per visualizzare le metriche di valutazione:

Output di ML.EVALUATE

Utilizza il modello per prevedere i risultati

Ora che hai valutato il modello, il passaggio successivo consiste nell'utilizzarlo per prevedere un risultato. Puoi eseguire la funzione ML.PREDICT o la funzione predict BigQuery DataFrames sul modello per prevedere la massa corporea in grammi di tutti i pinguini che vivono sulle isole Biscoe.

SQL

Per input, la funzione ML.PREDICT prende il modello addestrato e un set di dati che corrisponde allo schema dei dati utilizzati per addestrare il modello, esclusa la colonna delle etichette.

Esegui la query ML.PREDICT:

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

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente query:

    SELECT
    *
    FROM
    ML.PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'));

BigQuery DataFrames

Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

# Select the model you'll use for predictions. `read_gbq_model` loads
# model data from BigQuery, but you could also use the `model` object
# object from previous steps.
model = bpd.read_gbq_model(
    your_model_id,
    # For example: "bqml_tutorial.penguins_model",
)

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Use 'contains' function to filter by island containing the string
# "Biscoe".
biscoe_data = bq_df.loc[bq_df["island"].str.contains("Biscoe")]

result = model.predict(biscoe_data)

# Expected output results:
#     predicted_body_mass_g  	      species	                island	 culmen_length_mm  culmen_depth_mm   body_mass_g 	flipper_length_mm	sex
# 23	  4681.782896	   Gentoo penguin (Pygoscelis papua)	Biscoe	      <NA>	            <NA>	        <NA>	          <NA>	        <NA>
# 332	  4740.7907	       Gentoo penguin (Pygoscelis papua)	Biscoe	      46.2	            14.4	        214.0	          4650.0	    <NA>
# 160	  4731.310452	   Gentoo penguin (Pygoscelis papua)	Biscoe	      44.5	            14.3	        216.0	          4100.0	    <NA>

I risultati dovrebbero essere simili ai seguenti:

Output di ML.PREDICT

Spiega i risultati della previsione

Per capire perché il modello sta generando questi risultati di previsione, puoi utilizzare la funzione ML.EXPLAIN_PREDICT.

ML.EXPLAIN_PREDICT è una versione estesa della funzione ML.PREDICT. ML.EXPLAIN_PREDICT non solo restituisce i risultati della previsione, ma anche colonne aggiuntive per spiegarli. In pratica, puoi eseguire ML.EXPLAIN_PREDICT anziché ML.PREDICT. Per ulteriori informazioni, consulta Panoramica dell'AI spiegabile di BigQuery ML.

Esegui la query ML.EXPLAIN_PREDICT:

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

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente query:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'),
      STRUCT(3 as top_k_features));
  3. I risultati dovrebbero essere simili ai seguenti:

    Output di ML.EXPLAIN_PREDICT

Per i modelli di regressione lineare, vengono utilizzati i valori di Shapley per generare valori di attribuzione di caratteristiche per ogni caratteristica nel modello. ML.EXPLAIN_PREDICT restituisce le prime tre attribuzioni di caratteristiche per riga della tabella penguins perché top_k_features è stato impostato su 3 nella query. Queste attribuzioni sono ordinate in base al valore assoluto dell'attribuzione in ordine decrescente. In tutti gli esempi, la caratteristica sex ha contribuito maggiormente alla previsione complessiva.

Spiega il modello a livello globale

Per sapere quali caratteristiche sono in genere le più importanti per determinare il peso del pinguino, puoi utilizzare la funzione ML.GLOBAL_EXPLAIN. Per utilizzare ML.GLOBAL_EXPLAIN, devi riaddestrare il modello con l'opzione ENABLE_GLOBAL_EXPLAIN impostata su TRUE.

Addestramento e generazione di spiegazioni globali per il modello:

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

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente query per addestrare nuovamente il modello:

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
      OPTIONS (
        model_type = 'linear_reg',
        input_label_cols = ['body_mass_g'],
        enable_global_explain = TRUE)
    AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
  3. Nell'editor di query, esegui la seguente query per ottenere spiegazioni globali:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `bqml_tutorial.penguins_model`)
  4. I risultati dovrebbero essere simili ai seguenti:

    Output di ML.GLOBAL_EXPLAIN

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 conservare il progetto ed eliminare il set di dati.

Eliminare il set di dati

L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati 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 che hai creato.

  3. Fai clic su Elimina set di dati sul lato destro della finestra. Questa azione elimina il set di dati, la tabella e tutti i dati.

  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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi