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 di 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 sul reddito dei residenti negli Stati Uniti dal 2000 al 2010. Questi dati includono lo stato del lavoro, la categoria lavorativa, il livello di istruzione e i dati sul reddito.

Obiettivi

In questo tutorial, dovrai eseguire le seguenti attività:

  • Creare 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 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. 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

Un problema comune nel machine learning è 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 relative al cliente in questione. In tal caso, le due etichette potranno essere "comprano" e "non lo compreranno". Puoi costruire il tuo set di dati in modo che una colonna rappresenti l'etichetta. I dati che puoi utilizzare per addestrare questo 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 un censore degli Stati Uniti rientra in uno dei due intervalli in base agli attributi demografici di chi risponde.

La creazione di un modello di regressione logistica è composta dai seguenti passaggi.

  • 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 tuo 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 modello di regressione logistica.
  • Passaggio 3: seleziona i dati di addestramento.
    Il passaggio successivo è preparare i dati che utilizzi per addestrare il modello di regressione logistica binaria eseguendo una query sulla tabella census_adult_income. Questo passaggio identifica le funzionalità pertinenti e le archivia 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 modello di regressione logistica.
  • Passaggio 5: utilizza la funzione ML.EVALUATE per valutare il modello.
    Quindi, utilizza 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, utilizzi la funzione ML.PREDICT per prevedere la fascia di reddito per un determinato insieme di partecipanti al censimento.

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 census.
    • Per Località dei dati, scegli Stati Uniti (US). Attualmente, i set di dati pubblici sono archiviati nella località multiregione US. Per semplicità, devi posizionare 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 modello di regressione logistica. Puoi utilizzare una query SQL standard per restituire 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 del set di dati:

  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:

    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 del testo della query. I risultati dovrebbero avere l'aspetto seguente:

    Dati di un censimento

    I risultati della query mostrano che la colonna income_bracket nella tabella census_adult_income contiene solo uno dei due valori: <=50K o >50K. Mostra inoltre che le colonne education e education_num nella tabella census_adult_income esprimono gli stessi dati in formati diversi. La colonna functional_weight contiene il numero di persone che secondo le organizzazioni censite corrisponde a una determinata riga; 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, dovrai selezionare i dati utilizzati per addestrare il modello di regressione logistica. In questo tutorial prevedi il reddito degli intervistati dal censimento in base ai seguenti attributi:

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

La seguente query crea una vista che compila i dati di addestramento. Questa visualizzazione è inclusa nell'estratto conto di 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 sugli intervistati del censimento, tra cui education_num, che rappresenta il livello di istruzione di chi risponde, e workclass, che rappresenta il tipo di lavoro svolto da chi risponde. 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, perciò la 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 poterla 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 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:

    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 vista dovrebbe essere visualizzata al di sotto.

  5. Fai clic sulla visualizzazione. Lo schema della vista viene visualizzato nella scheda Schema dell'Editor query.

    Risultati delle query

Passaggio 4: crea un modello di regressione logistica

Ora che hai 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 query seguente 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 univoci nella colonna dell'etichetta.

L'opzione input_label_cols specifica quale colonna dell'istruzione SELECT utilizzare come colonna di etichetta. In questo caso la colonna relativa all'etichetta è income_bracket, quindi il modello apprenderà quale dei due valori di income_bracket molto probabilmente si basa sugli altri valori presenti in ogni riga.

L'opzione 'auto_class_weights=TRUE' bilancia le etichette di classe nei dati di addestramento. Per impostazione predefinita, i dati di addestramento non sono ponderati. Se le etichette dei dati di addestramento non sono bilanciate, il modello potrebbe apprendere 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 inferiore. Ciò può portare a un modello che prevede una fascia di reddito inferiore troppo pesante. Le ponderazioni delle classi bilanciano le etichette delle classi calcolando le ponderazioni per ciascuna classe in proporzione inversa alla frequenza di quella classe.

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

Esegui la query CREATE MODEL

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

  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
  `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] > census e fai clic su census_model.

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

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 a fronte dei 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 utilizza il modello addestrato nel Passaggio 1 e i dati di valutazione restituiti da una sottoquery SELECT. La funzione restituisce una singola 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 di dati evaluation.

Esegui la query ML.EVALUATE

Per eseguire la query ML.EVALUATE che valuta il modello, procedi come riportato di seguito:

  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:

    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 Altre impostazioni di 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 del testo della query. I risultati dovrebbero avere l'aspetto seguente:

    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 il numero 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, l'intero set di dati di input viene utilizzato sia per l'addestramento sia per la valutazione. Chiamare 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 è stata mantenuta separata dai dati di addestramento del modello.

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

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 per includere solo le righe nel 'previsione' frame di dati. L'istruzione SELECT più in alto recupera l'output della funzione ML.PREDICT.

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.

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 del testo della query. I risultati dovrebbero avere l'aspetto seguente:

    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 della 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. Quindi, in pratica, devi eseguire ML.EXPLAIN_PREDICT solo quando salti ML.PREDICT. Per una spiegazione più approfondita dei valori di Shapley e delle offerte di AI spiegabili in BigQuery ML, consulta la Panoramica di Explainable AI di BigQuery ML.

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. In Google Cloud Console, 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. Quando la query è completa, fai clic sulla scheda Risultati sotto l'editor query. I risultati dovrebbero avere l'aspetto seguente:

    Output ML.EXPLAIN_PREDICT

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

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

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 addestrato nuovamente 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. In Google Cloud Console, 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 Altre impostazioni di 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 del testo della query. I risultati dovrebbero avere l'aspetto seguente:

    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 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 del 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 di eliminazione digitando il nome del set di dati (census) 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