Eseguire il feature engineering con la clausola TRANSFORM


Questo tutorial ti insegna a utilizzare la clausola TRANSFORM dell'istruzione CREATE MODEL per eseguire la feature engineering contemporaneamente alla creazione e all'addestramento di un modello. Utilizzando la clausola TRANSFORM, puoi specificare una o più funzioni di preelaborazione per trasformare i dati di input utilizzati per addestrare il modello. La preelaborazione applicata al modello viene applicata automaticamente quando utilizzi il modello con le funzioni ML.EVALUATE e ML.PREDICT.

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

Obiettivi

Questo tutorial ti guiderà nel completamento delle seguenti attività:

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 Prezzi di BigQuery.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

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

    Go to project selector

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

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

    Enable the BigQuery API.

    Enable the API

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 per prevedere il peso dei pinguini e addestrarlo sulla tabella di esempio penguins.

La clausola OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) indica che stai creando un modello di regressione lineare. Un modello di regressione lineare genera un valore continuo da una combinazione lineare di caratteristiche di input. La colonna body_mass_g è la colonna dell'etichetta di input. Per i modelli di regressione lineare, la colonna dell'etichetta deve avere valori reali (ovvero i valori della colonna devono essere numeri reali).

La clausola TRANSFORM di questa query utilizza le seguenti colonne dell'istruzione SELECT:

  • body_mass_g: utilizzato nell'addestramento senza alcuna modifica.
  • culmen_depth_mm: utilizzato nell'addestramento senza alcuna modifica.
  • flipper_length_mm: utilizzato nell'addestramento senza alcuna modifica.
  • bucketized_culmen_length: generato da culmen_length_mm mediante la suddivisione in bucket di culmen_length_mm in base ai quantili utilizzando la funzione analitica ML.QUANTILE_BUCKETIZE().
  • culmen_length_mm: il valore culmen_length_mm originale, eseguito il casting in un valore STRING e utilizzato nell'addestramento.
  • species_sex: generato dall'intersezione di species e sex utilizzando la funzione ML.FEATURE_CROSS.

Non è necessario utilizzare tutte le colonne della tabella di addestramento nella clausolaTRANSFORM.

La clausola WHERE,WHERE body_mass_g IS NOT NULL AND RAND() < 0.2, esclude le righe in cui il peso dei pinguini è NULL e utilizza la funzione RAND per estrarre un campione casuale dei dati.

Per creare il modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform`
      TRANSFORM(
        body_mass_g,
        culmen_depth_mm,
        flipper_length_mm,
        ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length,
        CAST(culmen_length_mm AS string) AS culmen_length_mm,
        ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex)
      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
      AND RAND() < 0.2;

    Il completamento della query richiede circa 15 minuti, dopodiché il penguin_transform modello viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non vengono visualizzati i risultati della query.

Valuta il modello

Valuta le prestazioni del modello utilizzando la funzione ML.EVALUATE. La funzione ML.EVALUATE valuta i pesi dei pinguini previsti restituiti dal modello rispetto ai pesi effettivi dei pinguini ricavati dai dati di addestramento.

L'istruzione SELECT e la clausola FROM nidificate di questa query sono le stesse della query CREATE MODEL. Poiché hai utilizzato la clausola TRANSFORM per creare il modello, non devi specificare di nuovo le colonne e le trasformazioni nella funzione ML.EVALUATE. La funzione li recupera automaticamente dal modello.

Per valutare il modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

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

    I risultati dovrebbero essere simili ai seguenti:

    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |   64.21134350607677 | 13016.433317859564 |   7.140935762696211E-4 |     15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    Una metrica importante nei risultati della valutazione è il coefficiente R2. Il coefficiente R2 è una misura statistica che determina se le predizioni della regressione lineare si avvicinano ai dati effettivi. Un valore 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à dei dati di risposta attorno alla media.

    Per ulteriori informazioni sull'output della funzione ML.EVALUATE, consulta Modelli di regressione.

    Puoi anche chiamare ML.EVALUATE senza fornire i dati di input. Utilizzerà le metriche di valutazione calcolate durante l'addestramento.

Utilizza il modello per prevedere il peso dei pinguini

Utilizza il modello con la funzione ML.PREDICT per prevedere il peso dei pinguini maschi.

La funzione ML.PREDICT restituisce il valore previsto nella colonnapredicted_label_column_name, in questo casopredicted_body_mass_g.

Quando utilizzi la funzione ML.PREDICT, non devi passare tutte le colonne utilizzate nell'addestramento del modello. Sono obbligatorie solo le colonne utilizzate nella clausolaTRANSFORM. Analogamente a ML.EVALUATE, la funzione ML.PREDICT recupera automaticamente le colonne e le trasformazioni TRANSFORM dal modello.

Per ottenere le previsioni dal modello:

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

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
      predicted_body_mass_g
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            sex = 'MALE'
        ));

    I risultati dovrebbero essere simili ai seguenti:

    +-----------------------+
    | predicted_body_mass_g |
    +-----------------------+
    |    2810.2868541725757 |
    +-----------------------+
    |    3813.6574220842676 |
    +-----------------------+
    |     4098.844698262214 |
    +-----------------------+
    |     4256.587135004173 |
    +-----------------------+
    |     3008.393497302691 |
    +-----------------------+
    |     ...               |
    +-----------------------+
    

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 consoleGoogle Cloud .

    Vai alla pagina BigQuery

  2. Nel pannello di navigazione, fai clic sul set di dati bqml_tutorial che hai creato.

  3. Sul lato destro della finestra, fai clic su Elimina set di dati. 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