Creare e utilizzare un modello di classificazione sui dati del censimento


In questo tutorial, utilizzerai un modello di regressione logistica binario in BigQuery ML per prevedere la fascia di reddito delle persone in base ai relativi dati demografici. Un modello di regressione logistica binaria prevede se un valore rientra in una delle due categorie, in questo caso se il reddito annuo di un individuo è superiore o inferiore a 50.000 $.

Questo tutorial utilizza il set di dati di bigquery-public-data.ml_datasets.census_adult_income. Questo set di dati contiene i dati demografici e sul reddito dei residenti negli Stati Uniti dal 2000 al 2010.

Obiettivi

In questo tutorial imparerai a:

  • Creare un modello di regressione logistica.
  • Valutare il modello.
  • Eseguire previsioni utilizzando il modello.
  • Spiegare i risultati prodotti dal 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 Prezzi di BigQuery.

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

Prima di iniziare

  1. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Attiva l'API BigQuery.

    Abilita l'API

Autorizzazioni obbligatorie

Per creare il modello utilizzando BigQuery ML, devi disporre delle 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

Introduzione

Un'attività comune nel machine learning è classificare i dati in uno di due tipi, noti come etichette. Ad esempio, un rivenditore potrebbe voler prevedere se un determinato cliente acquisterà un nuovo prodotto in base ad altre informazioni sul cliente. In questo caso, le due etichette potrebbero essere will buy e won't buy. Il rivenditore può creare un set di dati in modo che una colonna rappresenti entrambe le etichette e contenga anche informazioni sul cliente come la località, gli acquisti precedenti e le preferenze indicate. Il rivenditore può quindi utilizzare un modello di regressione logistica binaria che utilizza queste informazioni sul cliente per prevedere quale etichetta rappresenta meglio ciascun cliente.

In questo tutorial creerai un modello di regressione logistica binaria che prevede se il reddito di un intervistato di un censimento degli Stati Uniti rientra in uno dei due intervalli in base agli attributi demografici del partecipante.

Crea un set di dati

Crea un set di dati BigQuery per archiviare il modello:

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

    Vai a 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, segui questi passaggi:

    • In ID set di dati, inserisci census.

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

      I set di dati pubblici vengono archiviati in US più regioni. Per semplicità, memorizza il set di dati nella stessa posizione.

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

Esaminare i dati

Esamina il set di dati e identifica le colonne da utilizzare come dati di addestramento per il modello di regressione logistica. Esegui una query GoogleSQL per restituire 100 righe dalla tabella census_adult_income:

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

    Vai a BigQuery

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

    SELECT
      age,
      workclass,
      marital_status,
      education_num,
      occupation,
      hours_per_week,
      income_bracket,
      functional_weight
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    LIMIT
      100;
    
  3. I risultati dovrebbero essere simili ai seguenti:

    Dati del censimento

I risultati della query mostrano che la colonna income_bracket nella tabella census_adult_income ha solo uno dei due valori: <=50K o >50K. La colonna functional_weight riporta il numero di persone che l'organizzazione di censimento ritiene che una determinata riga. I valori di questa colonna appaiono non correlati al valore di income_bracket per una determinata riga.

prepara i dati di esempio

In questo tutorial, puoi prevedere le entrate degli intervistati al censimento in base ai seguenti attributi:

  • Età
  • Tipo di lavoro svolto
  • Stato civile
  • Livello di istruzione
  • Professione
  • Ore lavorate a settimana

A questo scopo, devi creare una vista che contenga i dati da utilizzare per addestrare e valutare il modello, nonché per fare previsioni. Questa visualizzazione verrà utilizzata dall'istruzione CREATE MODEL più avanti in questo tutorial.

La query che crea la vista estrae i dati sugli intervistati del censimento, tra cui education_num, che rappresenta il livello di istruzione del partecipante, e workclass, che rappresenta il tipo di lavoro svolto. Questa query esclude diverse colonne che duplicano dati: ad esempio, le colonne education e education_num nella tabella census_adult_income esprimono gli stessi dati in formati diversi, pertanto questa query esclude la colonna education. Viene creata una nuova colonna dataframe che utilizza la colonna functional_weight della tabella census_adult_income per etichettare l'80% dell'origine dati per l'addestramento del modello e riserva i dati rimanenti per la valutazione e la previsione.

Esegui la query che prepara i dati di esempio:

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

    Vai a BigQuery

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

    CREATE OR REPLACE VIEW
      `census.input_data` AS
    SELECT
      age,
      workclass,
      marital_status,
      education_num,
      occupation,
      hours_per_week,
      income_bracket,
      CASE
        WHEN MOD(functional_weight, 10) < 8 THEN 'training'
        WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
        WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
      END AS dataframe
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    
  3. Nel riquadro Explorer, espandi il set di dati census e individua la visualizzazione input_data.

  4. Fai clic sul nome della visualizzazione per aprire il riquadro delle informazioni. Lo schema di visualizzazione viene mostrato nella scheda Schema.

    Risultati delle query

Creare un modello di regressione logistica

Puoi creare un modello di regressione logistica utilizzando l'istruzione CREATE MODEL e specificando LOGISTIC_REG per il tipo di modello. Parte della creazione del modello include l'addestramento con i dati di addestramento che hai etichettato nella sezione precedente.

Di seguito sono riportate alcune informazioni utili da conoscere sull'istruzione CREATE MODEL:

  • L'opzione input_label_cols specifica quale colonna dell'istruzione SELECT utilizzare come colonna dell'etichetta. Qui la colonna dell'etichetta è income_bracket, in modo che il modello apprende quale dei due valori di income_bracket è più probabile per una determinata riga in base agli altri valori presenti in quella riga.

  • Non è necessario specificare se un modello di regressione logistica è binario o multiclasse. BigQuery può stabilire quale tipo di modello addestrare in base al numero di valori univoci nella colonna dell'etichetta.

  • L'opzione auto_class_weights è impostata su TRUE per bilanciare le etichette della classe nei dati di addestramento. Per impostazione predefinita, i dati di addestramento non sono ponderati. Se le etichette nei dati di addestramento non sono bilanciate, il modello potrebbe imparare a prevedere in modo più approfondito la classe di etichette più popolare. In questo caso, la maggior parte degli intervistati nel set di dati si trova nella fascia di reddito più bassa. Ciò può portare a un modello che prevede troppo la fascia di reddito più bassa. Le ponderazioni delle classi bilanciano le etichette delle classi calcolando le ponderazioni di ogni classe in modo inversamente proporzionale alla frequenza di quella classe.

  • L'istruzione SELECT esegue una query sulla vista input_data che contiene i dati di addestramento. La clausola WHERE filtra le righe in input_data in modo che per addestrare il modello vengano utilizzate solo quelle etichettate come dati di addestramento.

Esegui la query che crea il modello di regressione logistica:

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

    Vai a BigQuery

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

    CREATE OR REPLACE MODEL
      `census.census_model`
    OPTIONS
      ( model_type='LOGISTIC_REG',
        auto_class_weights=TRUE,
        data_split_method='NO_SPLIT',
        input_label_cols=['income_bracket'],
        max_iterations=15) AS
    SELECT * EXCEPT(dataframe)
    FROM
      `census.input_data`
    WHERE
      dataframe = 'training'
    
  3. Nel riquadro Explorer, espandi il set di dati census, quindi la cartella Modelli.

  4. Fai clic sul modello census_model per aprire il riquadro delle informazioni.

  5. Fai clic sulla scheda Schema. Lo schema del modello elenca gli attributi utilizzati da BigQuery ML per eseguire la regressione logistica. Lo schema dovrebbe essere simile al seguente:

    Informazioni sullo schema del cluster

Utilizza la funzione ML.EVALUATE per valutare il modello

Dopo aver creato il modello, valuta le sue prestazioni utilizzando la funzione ML.EVALUATE. La funzione ML.EVALUATE valuta i valori previsti generati dal modello in base ai dati effettivi.

Per l'input, la funzione ML.EVALUATE prende il modello addestrato e le righe della visualizzazione input_data che hanno evaluation come valore della colonna dataframe. La funzione restituisce una singola riga di statistiche sul modello.

Esegui la query ML.EVALUATE:

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

    Vai a BigQuery

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

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. I risultati dovrebbero essere simili ai seguenti:

    Output ML.EVALUATE

Puoi anche consultare il riquadro delle informazioni sul modello nella console Google Cloud per visualizzare le metriche di valutazione calcolate durante l'addestramento:

Output ML.EVALUATE

Usare la funzione ML.PREDICT per prevedere la fascia di reddito

Per identificare la fascia di reddito a cui appartiene un determinato intervistato, utilizza la funzione ML.PREDICT.

Per l'input, la funzione ML.PREDICT prende il modello addestrato e le righe della visualizzazione input_data che hanno prediction come valore della colonna dataframe.

Esegui la query ML.PREDICT:

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

    Vai a BigQuery

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

    SELECT
      *
    FROM
      ML.PREDICT (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'prediction'
        )
      )
    
  3. I risultati dovrebbero essere simili ai seguenti:

    Risultati di ML.PREDICT

    predicted_income_bracket è il valore previsto di income_bracket.

Spiegare i risultati della previsione

Per capire perché il modello genera questi risultati della 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 genera anche colonne aggiuntive per spiegare i risultati. Nella pratica, puoi eseguire ML.EXPLAIN_PREDICT anziché ML.PREDICT. Per ulteriori informazioni, consulta la panoramica sull'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 query, esegui la query seguente:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `census.census_model`,
      (
      SELECT
        *
      FROM
        `census.input_data`
      WHERE
        dataframe = 'evaluation'),
      STRUCT(3 as top_k_features))
    
  3. I risultati dovrebbero essere simili ai seguenti:

    Output ML.EXPLAIN_PREDICT

Per i modelli di regressione logistica, i valori di Shapley vengono utilizzati per generare valori di attribuzione delle caratteristiche per ogni caratteristica nel modello. ML.EXPLAIN_PREDICT restituisce le prime tre attribuzioni delle funzionalità per riga della visualizzazione input_data perché top_k_features è stato impostato su 3 nella query. Queste attribuzioni sono ordinate in base al valore assoluto dell'attribuzione. Nella riga 1 di questo esempio, la caratteristica hours_per_week ha contribuito maggiormente alla previsione complessiva, ma nella riga 2 la funzionalità occupation ha contribuito maggiormente alla previsione complessiva.

Spiegare il modello a livello globale

Per sapere quali caratteristiche sono generalmente le più importanti per determinare la fascia di reddito, 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.

Riaddestra e ricevi spiegazioni globali per il modello:

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

    Vai a BigQuery

  2. Nell'editor query, esegui la query seguente per riaddestrare il modello:

    CREATE OR REPLACE MODEL `census.census_model`
    OPTIONS
      ( model_type='LOGISTIC_REG',
        auto_class_weights=TRUE,
        enable_global_explain=TRUE,
        input_label_cols=['income_bracket']
      ) AS
    SELECT * EXCEPT(dataframe)
    FROM
      `census.input_data`
    WHERE
      dataframe = 'training'
    
  3. Nell'editor query, esegui la query seguente per ricevere spiegazioni globali:

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

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

Elimina 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 che hai creato in questo tutorial:

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

    Vai alla pagina di BigQuery

  2. Nella barra di navigazione, fai clic sul set di dati census 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 (census), quindi 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