Como criar e usar um modelo de classificação em dados do censo

O BigQuery ML contribui para a aprendizagem supervisionada com o tipo de modelo de regressão logística. É possível usar o tipo de modelo de regressão logística binária para prever se um valor se enquadra em uma das duas categorias ou usar o tipo multiclasse para prever se um valor se enquadra em uma de várias categorias. Isso é conhecido como problema de classificação, porque há a tentativa de classificar os dados em duas ou mais categorias.

Neste tutorial, você usa um modelo de regressão logística binária no BigQuery ML para prever a faixa de renda dos entrevistados no conjunto de dados do censo dos EUA. Esse conjunto contém as informações demográficas e de renda de residentes dos EUA entre 2000 e 2010. As informações incluem status de emprego, categoria de trabalho, grau de escolaridade e dados de renda.

Objetivos

Neste tutorial, você realizará as seguintes tarefas:

  • Criar um modelo de regressão logística
  • Avaliar o modelo criado
  • Fazer previsões usando o modelo

Custos

Este tutorial usa componentes do Cloud Platform que podem ser cobrados, incluindo:

  • BigQuery
  • BigQuery ML

Para mais informações sobre os custos do BigQuery, consulte a página de preços do BigQuery.

Para saber mais sobre os custos do BigQuery ML, veja a página de preços do BigQuery ML.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse Ative a API BigQuery.

    Ative a API

Introdução

Um problema comum do aprendizado de máquina é a classificação dos dados em um de dois tipos, conhecidos como rótulos. Por exemplo, talvez um revendedor queira prever se determinado cliente comprará um novo produto com base em outras informações sobre essa pessoa. Nesse caso, os dois rótulos podem ser "comprará" e "não comprará". É possível construir um conjunto de dados para que uma coluna represente o rótulo. Os dados que podem ser usados para treinar esse modelo de regressão logística binária incluem a localização do cliente, as compras anteriores dele, as preferências relatadas e assim por diante.

Neste tutorial, você usa o BigQuery ML para criar um modelo de regressão logística binária que prevê se a renda de um entrevistado do censo dos EUA se enquadra em uma das duas faixas com base nos atributos demográficos do participante.

A criação do modelo de regressão logística consiste nas etapas a seguir.

  • Etapa 1: criar um conjunto de dados para armazenar o modelo.
    A primeira etapa é criar um conjunto de dados do BigQuery para armazenar o modelo.
  • Etapa 2: analisar os dados.
    Nesta etapa, examine o conjunto de dados e identifique quais colunas devem ser usadas como dados de treinamento para o modelo de regressão logística.
  • Etapa 3: selecionar os dados de treinamento.
    A próxima etapa é preparar os dados usados para treinar o modelo de regressão logística binária executando uma consulta na tabela census_adult_income. Nessa etapa, os recursos relevantes são identificados e armazenados em uma visualização para serem usados como dados de entrada em consultas futuras.
  • Etapa 4: criar um modelo de regressão logística.
    Nesta etapa, use a instrução CREATE MODEL para criar o modelo de regressão logística.
  • Etapa 5: usar a função ML.EVALUATE para avaliar o modelo.
    Depois, use a função ML.EVALUATE para fornecer estatísticas sobre o desempenho do modelo.
  • Etapa 6: usar a função ML.PREDICT para prever a renda de um participante.
    Por fim, você usa a função ML.PREDICT para prever a faixa de renda de um determinado conjunto de participantes do censo.

Etapa 1: criar um conjunto de dados

A primeira etapa é criar um conjunto de dados do BigQuery para armazenar o modelo. Para isso, siga as instruções abaixo:

  1. No Console do Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. Na seção Recursos do painel de navegação, clique no nome do projeto.

  3. No painel de detalhes, à direita, clique em Criar conjunto de dados.

    Criar conjunto de dados

  4. Na página Criar conjunto de dados, em código do conjunto de dados, insira census.

  5. Mantenha todas as outras configurações padrão e clique em Criar conjunto de dados.

Etapa 2: analisar os dados

A próxima etapa é analisar o conjunto de dados e identificar quais colunas usar como dados de treinamento no modelo de regressão logística. Utilize uma consulta SQL padrão para retornar linhas do conjunto de dados.

A consulta abaixo retorna 100 linhas do conjunto de dados do censo dos EUA:

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

Executar a consulta

Para executar a consulta que retorna linhas do seu conjunto de dados, siga as instruções abaixo:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta SQL padrão na área de texto do Editor de consultas:

    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. Clique em Executar.

  4. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão a aparência abaixo:

    Dados do censo

    Os resultados da consulta mostram que a coluna income_bracket na tabela census_adult_income tem apenas um dos dois valores: <=50K ou >50K. Eles também mostram que as colunas education e education_num na tabela census_adult_income expressam os mesmos dados em formatos diferentes. A coluna functional_weight refere-se ao número de indivíduos que as Organizações de Censo consideram uma linha específica; os valores dessa coluna aparecem não relacionados ao valor de income_bracket para uma linha específica.

Etapa 3: selecionar os dados de treinamento

Em seguida, selecione os dados usados para treinar seu modelo de regressão logística. Neste tutorial, você prevê a renda dos entrevistados do censo com base nos atributos abaixo:

  • Idade
  • Tipo de trabalho realizado
  • Estado civil
  • Grau de escolaridade
  • Ocupação
  • Horas trabalhadas por semana

A consulta a seguir cria uma visualização que compila seus dados de treinamento. Esta visualização é incluída na instrução CREATE MODEL mais adiante neste 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`

Detalhes da consulta

Essa consulta extrai dados dos participantes do censo, incluindo education_num, que representa o grau de escolaridade do entrevistado, e workclass, que indica o tipo de trabalho que ele realiza. Essa consulta exclui várias categorias que duplicam dados: por exemplo, as colunas education e education_num na tabela census_adult_income expressam os mesmos dados em formatos diferentes. Portanto, essa consulta exclui a coluna education. A coluna dataframe usa a coluna functional_weight excluída para rotular 80% da fonte de dados para treinamento e reserva os dados restantes para avaliação e previsão. A consulta cria uma visualização que contém essas colunas. Assim, é possível usá-las para executar o treinamento e a previsão posteriormente.

Executar a consulta

Para executar a consulta que compila os dados de treinamento do modelo:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta SQL padrão na área de texto do Editor de consultas:

    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. Clique em Executar.

  4. Na seção Recursos do painel de navegação, clique no nome do projeto. Sua visualização aparecerá abaixo dela.

  5. Clique na visualização. O esquema dela aparecerá na guia Esquema, no editor de consultas.

    Resultados da consulta

Etapa 4: criar um modelo de regressão logística

Agora que você analisou os dados de treinamento, a próxima etapa é criar um modelo de regressão logística usando essas informações.

É possível criar e treinar um modelo de regressão logística usando a instrução CREATE MODEL com a opção 'LOGISTIC_REG'. A consulta abaixo usa uma instrução CREATE MODEL para treinar um novo modelo de regressão logística binária na visualização da consulta anterior.

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'

Detalhes da consulta

A instrução CREATE MODEL treina um modelo usando os dados de treinamento na instrução SELECT.

A cláusula OPTIONS especifica o tipo de modelo e as opções de treinamento. Aqui, a opção LOGISTIC_REG especifica um tipo de modelo de regressão logística. Não é preciso especificar um modelo de regressão logística binária ou multiclasse: o BigQuery ML consegue determinar qual deles treinar com base no número de valores exclusivos na coluna de rótulo.

A opção input_label_cols especifica qual coluna na instrução SELECT deve ser usada como a coluna de rótulo. Aqui, a coluna de rótulo é income_bracket, para que o modelo aprenda qual dos dois valores de income_bracket é mais provável com base nos outros valores de cada linha.

A opção auto_class_weights=TRUE equilibra os rótulos da classe nos dados de treinamento. Por padrão, esses dados não são ponderados. Se os rótulos nos dados de treinamento estiverem desequilibrados, o modelo poderá aprender a prever a classe mais comum de rótulos com mais intensidade. Nesse caso, a maioria dos entrevistados no conjunto de dados está na faixa de renda mais baixa. Isso pode levar a um modelo que prevê a faixa de renda mais baixa de maneira exagerada. Os pesos das classes equilibram os rótulos. Isso é feito por meio do cálculo dos pesos de cada classe em proporção inversa à frequência dessa classe.

A instrução SELECT consulta a visualização da Etapa 2. Essa visualização contém somente as colunas que apresentam dados do recurso para treinar o modelo. A cláusula WHERE filtra as linhas em input_view para que somente as linhas pertencentes ao dataframe de treinamento sejam incluídas nos dados de treinamento.

Executar a consulta CREATE MODEL

Para executar a consulta que cria seu modelo de regressão logística, siga estas etapas:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta SQL padrão na área de texto do Editor de consultas:

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. Clique em Run.

  2. No painel de navegação, na seção Recursos, expanda [PROJECT_ID] > Censo e clique em census_model.

  3. Clique na guia Esquema. O esquema do modelo lista os atributos que o BigQuery ML usou para executar a regressão logística. Ele é semelhante ao mostrado abaixo:

    Informações do esquema de clusters

Etapa 5: usar a função ML.EVALUATE para avaliar o modelo

Depois de criar o modelo, use função ML.EVALUATE para avaliar o desempenho dele. A função ML.EVALUATE avalia os valores previstos em relação aos dados reais.

Veja abaixo a consulta usada para avaliar o modelo:

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

Detalhes da consulta

A função ML.EVALUATE considera o modelo treinado na Etapa 1 e os dados de avaliação retornados por uma subconsulta SELECT. A função retorna uma única linha de estatísticas sobre o modelo. Esta consulta usa informações de input_view como dados de avaliação. A cláusula WHERE filtra os dados de entrada para que a subconsulta contenha somente linhas no dataframe evaluation.

Executar a consulta ML.EVALUATE

Para executar a consulta ML.EVALUATE que avalia o modelo, faça o seguinte:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta SQL padrão na área de texto do Editor de consultas:

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_view`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha US. Essa etapa é opcional, já que o local de processamento é detectado automaticamente de acordo com o local do conjunto de dados.

    Configurações de consulta

  4. Clique em Executar.

  5. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:

    Saída de ML.EVALUATE

    Como você executou uma regressão logística, os resultados incluem as colunas a seguir:

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

    A precisão do modelo descreve a proporção entre os valores previstos corretamente e as previsões totais: uma precisão de 0,80 significa que 80% das previsões estão corretas.

Etapa 6: usar a função ML.PREDICT para prever a faixa de renda

Para identificar a faixa de renda a que determinado participante pertence, use a função ML.PREDICT. A consulta a seguir prevê a faixa de renda de cada entrevistado no dataframe prediction.

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

Detalhes da consulta

A função ML.PREDICT prevê resultados usando o modelo e os dados de input_view, filtrados para incluir somente linhas no dataframe 'previsão'. A principal instrução SELECT recupera a saída da função ML.PREDICT.

Executar a consulta ML.PREDICT

Para executar a consulta ML.PREDICT, faça o seguinte:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

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

  2. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão o seguinte formato:

    Resultados de ML.PREDICT

    predicted_income_bracket é o valor previsto de income_bracket.

(Opcional) Etapa 7: explicar os resultados da previsão com métodos de IA explicáveis

Para entender por que seu modelo está gerando esses resultados de previsão, use a função ML.EXPLAIN_PREDICT.

Para uma explicação mais detalhada sobre os valores de Shapley e as ofertas de explicação para outros modelos no BigQuery ML, consulte Visão geral da IA explicável do BigQuery ML.

A consulta usada para gerar as Explicações é a seguinte:

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

Executar a consulta ML.EXPLAIN_PREDICT

Para executar a consulta ML.EXPLAIN_PREDICT que explica o modelo:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Insira a consulta SQL padrão a seguir em Editor de consultas.

    #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. Clique em Executar.

  4. Após concluir a consulta, clique na guia Resultados abaixo do editor de consultas. Os resultados terão a aparência abaixo:

    Saída MML.EXPLAIN_PREDICT

Para modelos de regressão logística, os valores de Shapley são usados para gerar valores de atribuição de recursos para cada recurso no modelo. ML.EXPLAIN_PREDICT gera as três principais atribuições de recursos por linha da tabela fornecida porque top_k_features foi definido como 3 na consulta. Essas atribuições são classificadas pelo valor absoluto da atribuição em ordem decrescente. Na linha 1 deste exemplo, o recurso hours_per_week mais contribuiu para a previsão geral, mas para a linha 2 deste exemplo, occupation contribuiu mais para a previsão geral.

(Opcional) Etapa 8: explicar globalmente o modelo

Para entender melhor por que o modelo está prevendo como ele é geralmente, use a função ML.GLOBAL_EXPLAIN. Para usar ML.GLOBAL_EXPLAIN, o modelo precisa ser treinado novamente com a opção ENABLE_GLOBAL_EXPLAIN=TRUE. Execute novamente a consulta de treinamento com esta opção usando a seguinte consulta:

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'
  

Acesse explicações globais por meio de ML.GLOBAL_EXPLAIN

A consulta usada para gerar as Explicações globais é a seguinte:

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

Executar a consulta ML.GLOBAL_EXPLAIN

Para executar a consulta ML.GLOBAL_EXPLAIN:

  1. No Console do Cloud, clique no botão Escrever nova consulta.

  2. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

    #standardSQL
    SELECT
    *
    FROM
    ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
    
  3. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Para Local de processamento, escolha US. Essa etapa é opcional, já que o local de processamento é detectado automaticamente de acordo com o local do conjunto de dados.

    Configurações de consulta

  4. Clique em Executar.

  5. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados terão a aparência abaixo:

    Saída ML.GLOBAL_EXPLAIN

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Como excluir seu conjunto de dados

A exclusão do seu projeto removerá todos os conjuntos de dados e tabelas no projeto. Caso prefira reutilizá-lo, exclua o conjunto de dados criado neste tutorial:

  1. Se necessário, abra a página do BigQuery no Console do Cloud.

    Acesse a página do BigQuery

  2. Na navegação, clique no conjunto de dados do census que você criou.

  3. Clique em Excluir conjunto de dados no lado direito da janela. Essa ação exclui o conjunto de dados e o modelo.

  4. Na caixa de diálogo Excluir conjunto de dados, confirme o comando de exclusão digitando o nome do seu conjunto de dados (census) e clique em Excluir.

Como excluir o projeto

Para excluir o projeto, faça o seguinte:

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir