Creazione e utilizzo di un modello di classificazione sui dati del censimento

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

BigQuery ML supporta l'apprendimento supervisionato con il tipo di modello regressione logistica. Puoi utilizzare il tipo di modello di regressione logistica binaria per prevedere se un valore rientra in una di due categorie oppure puoi utilizzare il tipo di modello di regressione multi-classe per prevedere se un valore rientra in una di più categorie. Questi sono noti come problemi di classificazione, perché tentano di classificare i dati in due o più categorie.

In questo tutorial, utilizzerai un modello di regressione logistica binaria in BigQuery ML per prevedere la fascia di reddito degli intervistati nel set di dati del censimento degli Stati Uniti. Questo set di dati contiene le informazioni demografiche e di reddito dei residenti negli Stati Uniti dal 2000 al 2010. I dati includono stato sul lavoro, categoria lavorativa, livello di istruzione e reddito.

Obiettivi

In questo tutorial, eseguirai le seguenti attività:

  • Crea un modello di regressione logistica.
  • Valuta il modello di regressione logistica.
  • Fare previsioni utilizzando il modello di regressione logistica.

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 dei prezzi di BigQuery.

Per ulteriori 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. BigQuery viene abilitato automaticamente nei nuovi progetti. Per attivare BigQuery in un progetto preesistente, vai a

    Attiva l'API BigQuery.

    Abilita l'API

Introduzione

Un problema comune del machine learning consiste nel classificare i dati in uno di due tipi, noti come etichette. Ad esempio, un rivenditore potrebbe prevedere se un determinato cliente acquisterà un nuovo prodotto in base ad altre informazioni su quel cliente. In questo caso, le due etichette potrebbero essere "comprano" e "non comprare". Puoi creare il tuo set di dati in modo che una colonna rappresenti l'etichetta. I dati che puoi utilizzare per addestrare un modello di regressione logistica binaria includono la località del cliente, i suoi acquisti precedenti, le preferenze segnalate dal cliente e così via.

In questo tutorial utilizzerai BigQuery ML per creare un modello di regressione logistica binaria che prevede se il reddito di una persona che risponde al censimento negli Stati Uniti rientra in uno di due intervalli in base agli attributi demografici di chi risponde.

Per creare il modello di regressione logistica procedi nel seguente modo.

  • Passaggio 1: crea un set di dati per archiviare il modello.
    Il primo passaggio consiste nel creare un set di dati BigQuery per archiviare il modello.
  • Passaggio 2. Esamina i dati.
    In questo passaggio, esamina il set di dati e identifica le colonne da utilizzare come dati di addestramento per il tuo modello di regressione logistica.
  • Passaggio 3: seleziona i dati di addestramento.
    Il passaggio successivo consiste nel preparare i dati che utilizzi per addestrare il tuo modello di regressione binaria eseguendo una query sulla tabella census_adult_income. Questo passaggio identifica le funzionalità pertinenti e le memorizza in una visualizzazione per le query successive da utilizzare come dati di input.
  • Passaggio 4: crea un modello di regressione logistica.
    In questo passaggio, utilizza l'istruzione CREATE MODEL per creare il tuo modello di regressione logistica.
  • Passaggio 5. Utilizza la funzione ML.EVALUATE per valutare il modello.
    Utilizza poi la funzione ML.EVALUATE per fornire statistiche sulle prestazioni del modello.
  • Passaggio 6: utilizza la funzione ML.PREDICT per prevedere il reddito di un partecipante.
    Infine, puoi utilizzare la funzione ML.PREDICT per prevedere la fascia di reddito per un determinato insieme di partecipanti a un censimento.

Passaggio 1: crea il tuo set di dati

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

  1. Nella console Google Cloud, 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 del 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 census.
    • In Località dei dati, scegli Stati Uniti (US). Attualmente, i set di dati pubblici vengono archiviati nella località a più aree geografiche US. Per semplicità, devi collocare il set di dati nella stessa posizione.
  5. Lascia invariate tutte le altre impostazioni predefinite e fai clic su Crea set di dati.

Passaggio 2: esamina i dati

Il passaggio successivo consiste nell'analizzare il set di dati e identificare le colonne da utilizzare come dati di addestramento per il tuo modello di regressione logistica. Puoi utilizzare una query SQL standard per restituire le righe dal set di dati.

La seguente query restituisce 100 righe dal set di dati del censimento degli Stati Uniti:

SELECT
  age,
  workclass,
  marital_status,
  education_num,
  occupation,
  hours_per_week,
  income_bracket
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
LIMIT
  100;

Esegui la query

Per eseguire la query che restituisce le righe dal set di dati:

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

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

    SELECT
      age,
      workclass,
      marital_status,
      education_num,
      occupation,
      hours_per_week,
      income_bracket
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    LIMIT
      100;
    
  3. Fai clic su Esegui.

  4. Quando la query è completa, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto:

    Dati di 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. Inoltre, indica che le colonne education e education_num nella tabella census_adult_income esprimono gli stessi dati in formati diversi. La colonna functional_weight indica il numero di persone che secondo il censimento ritiene che una determinata riga sia rappresentativa; i valori di questa colonna non sono correlati al valore di income_bracket per una determinata riga.

Passaggio 3: seleziona i dati di addestramento

Quindi, selezioni i dati utilizzati per addestrare il modello di regressione logistica. In questo tutorial, prevedi il reddito dei partecipanti al censimento in base ai seguenti attributi:

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

La query seguente crea una vista che compila i dati di addestramento. Questa visualizzazione è inclusa nell'istruzione CREATE MODEL più avanti in questo tutorial.

CREATE OR REPLACE VIEW
  `census.input_view` 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`

Dettagli query

Questa query estrae i dati dei partecipanti a un 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 categorie 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. La colonna dataframe utilizza la colonna functional_weight esclusa per etichettare l'80% dell'origine dati per l'addestramento e riserva i dati rimanenti per la valutazione e la previsione. La query crea una vista contenente queste colonne, in modo da poterle utilizzare per eseguire l'addestramento e la previsione in un secondo momento.

Esegui la query

Per eseguire la query che compila i dati di addestramento per il tuo modello:

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

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

    CREATE OR REPLACE VIEW
      `census.input_view` 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. Fai clic su Esegui.

  4. Nel pannello di navigazione, nella sezione Risorse, fai clic sul nome del tuo progetto. La visualizzazione dovrebbe apparire al di sotto.

  5. Fai clic sulla visualizzazione. Lo schema per la vista è riportato nella scheda Schema sotto l'editor di query.

    Risultati delle query

Passaggio 4: crea un modello di regressione logistica

Dopo aver esaminato i dati di addestramento, il passaggio successivo consiste nel creare un modello di regressione logistica utilizzando i dati.

Puoi creare e addestrare un modello di regressione logistica utilizzando l'istruzione CREATE MODEL con l'opzione 'LOGISTIC_REG'. La seguente query utilizza un'istruzione CREATE MODEL per addestrare un nuovo modello di regressione logistica binaria nella vista dalla query precedente.

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    input_label_cols=['income_bracket']
  ) AS
SELECT
  * EXCEPT(dataframe)
FROM
  `census.input_view`
WHERE
  dataframe = 'training'

Dettagli query

L'istruzione CREATE MODEL addestra un modello utilizzando i dati di addestramento nell'istruzione SELECT.

La clausola OPTIONS specifica il tipo di modello e le opzioni di addestramento. Qui, l'opzione LOGISTIC_REG specifica un tipo di modello di regressione logistica. Non è necessario specificare un modello di regressione logistica binaria rispetto a un modello di regressione logistica multiclasse: BigQuery ML può determinare quale addestrare in base al numero di valori unici nella colonna dell'etichetta.

L'opzione input_label_cols specifica quale colonna dell'istruzione SELECT utilizzare come colonna di etichetta. Qui la colonna dell'etichetta è income_bracket, pertanto il modello apprenderà quale dei due valori di income_bracket si basa più probabilmente sugli altri valori presenti in ogni riga.

L'opzione 'auto_class_weights=TRUE' bilancia le etichette delle classi 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 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 una fascia di reddito inferiore troppo pesante. Le ponderazioni vengono bilanciate dalle etichette della classe calcolando le ponderazioni di ogni classe in proporzione inversa rispetto alla frequenza di quella classe.

L'istruzione SELECT richiede la visualizzazione del Passaggio 2. Questa vista contiene solo le colonne contenenti i dati delle funzionalità per l'addestramento del modello. La clausola WHERE filtra le righe in input_view in modo che siano incluse solo i dati che appartengono al frame di dati di addestramento.

Esegui la query CREATE MODEL

Per eseguire la query che crea il modello di regressione logistica, completa i seguenti passaggi:

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

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

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_view`
WHERE
  dataframe = 'training'
  1. Fai clic su Esegui.

  2. Nel pannello di navigazione, nella sezione Risorse, espandi [PROJECT_ID] > censimento e fai clic su census_model.

  3. Fai clic sulla scheda Schema. Lo schema del modello elenca gli attributi che BigQuery ML ha utilizzato per eseguire la regressione logistica. Lo schema dovrebbe essere simile al seguente:

    Informazioni sullo schema del cluster

Passaggio 5. Utilizza la funzione ML.EVALUATE per valutare il modello

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

La query per valutare il modello è la seguente:

SELECT
  *
FROM
  ML.EVALUATE (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'evaluation'
    )
  )

Dettagli query

La funzione ML.EVALUATE prende il modello addestrato nel Passaggio 1 e raccoglie i dati di valutazione restituiti da una query secondaria SELECT. La funzione restituisce una sola riga di statistiche sul modello. Questa query utilizza i dati di input_view come dati di valutazione. La clausola WHERE filtra i dati di input in modo che la sottoquery contenga solo righe nel frame dati evaluation.

Esegui la query ML.EVALUATE

Per eseguire la query ML.EVALUATE che valuta il modello, procedi nel seguente modo:

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

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

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_view`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. (Facoltativo) Per impostare la località di elaborazione, fai clic su Altro > Impostazioni query. In Località di elaborazione, scegli US. Questo passaggio è facoltativo perché la località di elaborazione viene rilevata automaticamente in base alla località del set di dati.

    Impostazioni query

  4. Fai clic su Esegui.

  5. Quando la query è completa, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto:

    Output ML.EVALUATE

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

    • precision
    • recall
    • accuracy
    • f1_score
    • log_loss
    • roc_auc

Puoi anche chiamare ML.EVALUATE senza fornire dati di input. ML.EVALUATE recupera le metriche di valutazione calcolate durante l'addestramento, che utilizza il set di dati di valutazione prenotato automaticamente. In questa query CREATE MODEL con NO_SPLIT specificato per l'opzione di addestramento data_split_method, viene utilizzato l'intero set di dati di input sia per l'addestramento che per la valutazione. La chiamata a ML.EVALUATE senza dati di input recupera le metriche di valutazione su un set di dati di addestramento. Questa valutazione è meno efficace di una esecuzione di una valutazione su un set di dati che è stato mantenuto separato da quello di addestramento del modello.

Puoi anche utilizzare la console Google Cloud per visualizzare le metriche di valutazione calcolate durante l'addestramento. I risultati dovrebbero avere il seguente aspetto:

Output ML.EVALUATE

Passaggio 6. Utilizza la funzione ML.PREDICT per prevedere la fascia di reddito

Per identificare la fascia di reddito a cui appartiene un determinato partecipante, utilizza la funzione ML.PREDICT. La seguente query prevede la fascia di reddito di ogni partecipante nel frame di dati prediction.

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )

Dettagli query

La funzione ML.PREDICT prevede i risultati utilizzando il modello e i dati di input_view, filtrati in modo da includere solo le righe nel frame di previsione. L'istruzione SELECT più in alto recupera l'output della funzione ML.PREDICT.

Esegui la query ML.PREDICT

Per eseguire la query ML.PREDICT, procedi nel seguente modo:

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

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

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )
  1. Fai clic su Esegui.

  2. Quando la query è completa, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto:

    Risultati ML.PREDICT

    predicted_income_bracket è il valore previsto di income_bracket.

Passaggio 7: spiega i risultati della previsione con metodi AI spiegabili

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

ML.EXPLAIN_PREDICT è una versione estesa di ML.PREDICT. ML.EXPLAIN_PREDICT non solo genera risultati di previsione, ma anche colonne aggiuntive per spiegare i risultati della previsione. In pratica, è sufficiente eseguire ML.EXPLAIN_PREDICT senza saltare ML.PREDICT. Per una spiegazione più approfondita dei valori di Shapley e delle offerte di AI spiegabili in BigQuery ML, consulta Panoramica di Explainable AI di BigQuery.

La query utilizzata per generare spiegazioni è la seguente:

#standardSQL
SELECT
  *
FROM
  ML.EXPLAIN_PREDICT(MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'evaluation'),
    STRUCT(3 as top_k_features))

Esegui la query ML.EXPLAIN_PREDICT

Per eseguire la query ML.EXPLAIN_PREDICT che spiega il modello:

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

  2. Inserisci la seguente query SQL standard nell'Editor query.

    #standardSQL
    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `census.census_model`,
      (
      SELECT
        *
      FROM
        `census.input_view`
      WHERE
        dataframe = 'evaluation'),
      STRUCT(3 as top_k_features))
    
  3. Fai clic su Esegui.

  4. Al termine della query, fai clic sulla scheda Risultati sotto l'editor delle query. I risultati dovrebbero avere il seguente aspetto:

    Output ML.EXPLAIN_PREDICT

Per i modelli di regressione logistica, vengono utilizzati i valori di Shapley per generare i valori di attribuzione delle caratteristiche per ciascuna caratteristica del modello. ML.EXPLAIN_PREDICT restituisce le tre principali attribuzioni di funzionalità per riga della tabella fornita perché top_k_features è stato impostato su 3 nella query. Queste attribuzioni sono ordinate in base al valore assoluto dell'attribuzione in ordine decrescente. Nella riga 1 di questo esempio, la funzionalità hours_per_week ha dato il maggior contributo alla previsione complessiva, ma per la riga 2 di questo esempio occupation ha contribuito maggiormente alla previsione globale. Per una spiegazione dettagliata delle colonne di output della query ML.EXPLAIN_PREDICT, consulta la documentazione sulla sintassi ML.EXPLAIN_PREDICT

(Facoltativo) Passaggio otto: spiega il modello a livello globale

Per sapere quali funzionalità sono più importanti per determinare la fascia di reddito in generale, puoi utilizzare la funzione ML.GLOBAL_EXPLAIN. Per utilizzare ML.GLOBAL_EXPLAIN, il modello deve essere riaddestrato con l'opzione ENABLE_GLOBAL_EXPLAIN=TRUE. Esegui di nuovo la query di addestramento con questa opzione utilizzando la seguente query:

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_view
WHERE
  dataframe = 'training'
  

Accedi alle spiegazioni globali tramite ML.GLOBAL_EXPLAIN

La query utilizzata per generare spiegazioni globali è la seguente:

#standardSQL
SELECT
  *
FROM
  ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)

Esegui la query ML.GLOBAL_EXPLAIN

Per eseguire la query ML.GLOBAL_EXPLAIN:

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

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

#standardSQL
SELECT
  *
FROM
  ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
  1. (Facoltativo) Per impostare la località di elaborazione, fai clic su Altro > Impostazioni query. In Località di elaborazione, scegli US. Questo passaggio è facoltativo perché la località di elaborazione viene rilevata automaticamente in base alla località del set di dati.

    Impostazioni query

  2. Fai clic su Esegui.

  3. Quando la query è completa, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto:

    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.

Eliminazione del set di dati

L'eliminazione del progetto comporta la rimozione di tutti i set di dati e di 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 navigazione, fai clic sul set di dati censimento 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 Elimina digitando il nome del set di dati (census), quindi fai clic su Elimina.

Eliminazione del progetto

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