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

BigQuery ML supporta l'apprendimento supervisionato tramite 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 problemi 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 di censimento degli Stati Uniti. Questo set di dati contiene informazioni demografiche e sul reddito dei residenti negli Stati Uniti dal 2000 al 2010. I dati includono lo stato del lavoro, la categoria lavorativa, il livello di istruzione e i dati sul reddito.

Obiettivi

Questo tutorial è composto dalle 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 Cloud Platform, 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. 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 è la classificazione dei 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 relative a tale cliente. In tal caso, le due etichette potrebbero essere "comprerà", e "non guadagnerà". 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 di questo tipo includono la località del cliente, i suoi acquisti precedenti, le preferenze segnalate del cliente e così via.

In questo tutorial, utilizzerai BigQuery ML per creare un modello di regressione logistica binaria che prevede se un reddito di un censimento degli Stati Uniti rientra in uno di due intervalli in base agli attributi demografici degli intervistati.

La creazione del modello di regressione logistica prevede i 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 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 binaria eseguendo una query sulla tabella census_adult_income. Questo passaggio identifica le funzionalità pertinenti e le archivia in una vista per mostrarle in un secondo momento da utilizzare come dati di input.
  • Passaggio 4: crea un modello di regressione logistica.
    In questo passaggio puoi utilizzare l'istruzione CREATE MODEL per creare il tuo modello di regressione logistica.
  • Passaggio 5: utilizza la funzione ML.EVALUATE per valutare il modello.
    Utilizza quindi la funzione ML.EVALUATE per fornire statistiche sul rendimento 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 Cloud Console, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nella sezione Risorse del pannello di navigazione, fai clic sul nome del progetto.

  3. Sul lato destro, fai clic su Crea set di dati nel riquadro dei dettagli.

    Crea set di dati

  4. Nella pagina Crea set di dati, per ID set di dati, inserisci census.

  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 righe dal set di dati.

La seguente query restituisce 100 righe dal set di dati di 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 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. Una volta completata la query, fai clic sulla scheda Risultati sotto l'area di testo della query. Il risultato dovrebbe essere simile all'esempio seguente:

    Dati censiti

    I risultati della query mostrano che la colonna income_bracket nella tabella census_adult_income ha 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 indica il numero di persone che secondo le organizzazioni censite rappresenta 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

In seguito, devi selezionare i dati utilizzati per addestrare il tuo modello di regressione logistica. In questo tutorial, prevedi il reddito degli intervistati censiti 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 tuoi dati di addestramento. che troverai nell'istruzione CREATE MODEL più avanti nel 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 degli intervistati censiti, tra cui education_num, che rappresenta il livello di istruzione degli intervistati 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, quindi 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 poterla utilizzare in seguito per eseguire attività di addestramento e previsione.

Esegui la query

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

  1. In 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. Nella sezione Risorse del pannello di navigazione, fai clic sul nome del progetto. Sotto il riquadro dovrebbe essere visualizzata la vista.

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

    Risultati delle query

Passaggio 4: crea un modello di regressione logistica

Ora che hai esaminato i tuoi 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. 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 la colonna nell'istruzione SELECT da utilizzare come colonna dell'etichetta. In questo caso, la colonna dell'etichetta è income_bracket, pertanto il modello apprenderà quale dei due valori di income_bracket è più probabilmente basato sugli altri valori presenti in ogni riga.

L'opzione 'auto_class_weights=TRUE' bilancia 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ù rigoroso la classe di etichette più apprezzata. In questo caso, la maggior parte degli intervistati nel set di dati si trova nella fascia di reddito più bassa. Questo potrebbe portare a un modello che prevede una fascia di reddito troppo bassa. Le ponderazioni delle classi bilanciano le etichette della classe calcolando le ponderazioni di ogni classe in proporzione inversa rispetto alla frequenza di tale classe.

L'istruzione SELECT esegue una query sulla visualizzazione del Passaggio 2. Questa visualizzazione contiene solo le colonne che contengono i dati sulle caratteristiche per l'addestramento del modello. La clausola WHERE filtra le righe in input_view in modo che solo le righe appartenenti al frame dati di addestramento siano incluse nei dati di addestramento.

Esegui la query CREATE MODEL

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

  1. In 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 poi 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 avere il seguente aspetto:

    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 rispetto 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 restituisce i dati di valutazione restituiti da una subquery SELECT. La funzione restituisce una singola riga di statistiche sul modello. Questa query utilizza dati di input_view come dati di valutazione. La clausola WHERE filtra i dati di input in modo che la sottoquery contenga solo le righe nel dataframe evaluation.

Esegui la query ML.EVALUATE

Per eseguire la query ML.EVALUATE che valuta il modello, segui questi passaggi:

  1. In 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 Altro &Impostazioni impostazioni di query. In Località di elaborazione, scegli US. Questo passaggio è facoltativo perché la località di elaborazione viene rilevata automaticamente in base alla posizione del set di dati.

    Impostazioni query

  4. Fai clic su Esegui.

  5. Una volta completata la query, fai clic sulla scheda Risultati sotto l'area di testo della query. Il risultato dovrebbe essere simile all'esempio 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 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 l'opzione NO_SPLIT specificata 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. Le chiamate a ML.EVALUATE senza dati di input recuperano le metriche di valutazione in un set di dati di addestramento. Questa valutazione è meno efficace di una esecuzione su un set di dati che è stato mantenuto separato dai dati di addestramento del modello.

Puoi anche utilizzare Cloud Console per visualizzare le metriche di valutazione calcolate durante l'addestramento. Il risultato dovrebbe essere simile all'esempio 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 intervistati, utilizza la funzione ML.PREDICT. La seguente query prevede la fascia di reddito di ogni intervistati 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 tuo modello e i dati di input_view, filtrati per includere solo le righe nel dataframe '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, segui questi passaggi:

  1. In 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. Una volta completata la query, fai clic sulla scheda Risultati sotto l'area di testo della query. Il risultato dovrebbe essere simile all'esempio seguente:

    Risultati ML.PREDICT

    predicted_income_bracket è il valore previsto di income_bracket.

Passaggio 7: spiega i risultati delle previsioni con metodi AI esplicativi

Per capire perché il tuo modello sta generando 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 restituisce anche colonne aggiuntive per spiegare i risultati della previsione. Quindi, in pratica, dovrai eseguire ML.EXPLAIN_PREDICT solo saltando l'esecuzione di ML.PREDICT. Per una spiegazione più approfondita dei valori di Shapley e delle offerte di AI spiegabili in BigQuery ML, consulta la panoramica di AI ML Explainable AI.

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 Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'editor di 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. Dopo aver completato la query, fai clic sulla scheda Risultati sotto l'editor delle query. Il risultato dovrebbe essere simile all'esempio seguente:

    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 tre principali attribuzioni delle caratteristiche per riga della tabella fornita, 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 per la riga 2 di questo esempio occupation ha contribuito maggiormente alla previsione complessiva. Per informazioni dettagliate sulle colonne di output della query ML.EXPLAIN_PREDICT, consulta la documentazione sulla sintassi ML.EXPLAIN_PREDICT

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

Per sapere quali sono le funzionalità 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 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 Altro &Impostazioni impostazioni di query. In Località di elaborazione, scegli US. Questo passaggio è facoltativo perché la località di elaborazione viene rilevata automaticamente in base alla posizione del set di dati.

    Impostazioni query

  2. Fai clic su Esegui.

  3. Una volta completata la query, fai clic sulla scheda Risultati sotto l'area di testo della query. Il risultato dovrebbe essere simile all'esempio 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 comporta la rimozione di tutti i set di dati e di tutte le tabelle al suo interno. 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 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 Elimina digitando il nome del tuo set di dati (census) e fai clic su Elimina.

Eliminazione del progetto

Per eliminare il progetto:

  1. In Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto da 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