Criar e usar um modelo de classificação em dados de censo


Neste tutorial, você usa um modelo de regressão logística binário no BigQuery ML para prever a faixa de renda de indivíduos com base nos dados demográficos deles. Um modelo de regressão logística binária prevê se um valor se enquadra em uma das duas categorias. Nesse caso, se a renda anual de um indivíduo fica acima ou abaixo de US$ 50.000.

Neste tutorial, usamos o conjunto de dados bigquery-public-data.ml_datasets.census_adult_income. Esse conjunto contém as informações demográficas e de renda de residentes dos EUA entre 2000 e 2010.

Objetivos

Neste tutorial, você realizará as seguintes tarefas:

  • Criar um modelo de regressão logística
  • Avaliar o modelo.
  • Fazer previsões usando o modelo.
  • Explicar os resultados produzidos pelo modelo.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

  • BigQuery
  • BigQuery ML

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

Para mais informações sobre os custos do BigQuery ML, consulte os preços do BigQuery ML.

Antes de começar

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

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Ative a API BigQuery.

    Ative a API

Permissões necessárias

Para criar o modelo usando o BigQuery ML, você precisa das seguintes permissões do IAM:

  • bigquery.jobs.create
  • bigquery.models.create
  • bigquery.models.getData
  • bigquery.models.updateData
  • bigquery.models.updateMetadata

Para executar a inferência, você precisa das seguintes permissões:

  • bigquery.models.getData no modelo
  • bigquery.jobs.create

Introdução

Uma tarefa 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 will buy e won't buy. O varejista pode criar um conjunto de dados em que uma coluna represente os dois rótulos e também contenha informações do cliente, como localização do cliente, compras anteriores e preferências informadas. O varejista pode usar um modelo de regressão logística binária que usa as informações desses clientes para prever qual rótulo representa melhor cada cliente.

Neste tutorial, você cria 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 entrevistado.

Criar um conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar o modelo:

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

    Acessar o BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > Criar conjunto de dados.

    Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Para o código do conjunto de dados, insira census.

    • Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).

      Os conjuntos de dados públicos são armazenados na multirregião US. Para simplificar, armazene seus conjuntos de dados no mesmo local.

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

analise os dados

Analise o conjunto de dados e identifique quais colunas usar como dados de treinamento para o modelo de regressão logística. Execute uma consulta do GoogleSQL para retornar 100 linhas da tabela census_adult_income:

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

    Acessar o BigQuery

  2. No Editor de consultas, execute esta consulta:

    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. A resposta deve ficar assim:

    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. A coluna functional_weight é o número de indivíduos que a organização de censo acredita que uma linha específica representa. Os valores desta coluna aparecem não relacionados ao valor de income_bracket para uma linha específica.

Preparar os dados de amostra

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

Para isso, você cria uma visualização para conter os dados a serem usados para treinar e avaliar o modelo, além de fazer previsões. Essa visualização é usada pela instrução CREATE MODEL posteriormente neste tutorial.

A consulta que cria a visualização extrai dados dos participantes do censo, incluindo education_num, que representa o grau de escolaridade do entrevistado, e workclass, que representa o tipo de trabalho que ele realiza. Essa consulta exclui várias colunas 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. Uma nova coluna dataframe é criada usando a coluna functional_weight da tabela census_adult_income para rotular 80% da fonte de dados para treinar o modelo e reserva os dados restantes para avaliação e previsão.

Execute a consulta que prepara os dados de amostra:

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

    Acessar o BigQuery

  2. No Editor de consultas, execute esta consulta:

    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. No painel Explorer, expanda o conjunto de dados census e localize a visualização input_data.

  4. Clique no nome da visualização para abrir o painel de informações. O esquema de visualização aparece na guia Esquema.

    Resultados da consulta

Criar um modelo de regressão logística

Crie um modelo de regressão logística usando a instrução CREATE MODEL e especificando LOGISTIC_REG para o tipo de modelo. Parte da criação do modelo inclui treinar o modelo nos dados de treinamento rotulados na seção anterior.

Confira abaixo informações úteis sobre a instrução CREATE MODEL:

  • 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, então o modelo aprende qual dos dois valores de income_bracket é mais provável para uma determinada linha com base nos outros valores presentes nessa linha.

  • Não é necessário especificar se um modelo de regressão logística é binário ou multiclasse. O BigQuery pode determinar qual tipo de modelo treinar com base no número de valores exclusivos na coluna de rótulos.

  • A opção auto_class_weights está definida como TRUE para equilibrar os rótulos de 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 input_data que contém os dados de treinamento. A cláusula WHERE filtra as linhas em input_data para que apenas as linhas rotuladas como dados de treinamento sejam usadas para treinar o modelo.

Execute a consulta que cria seu modelo de regressão logística:

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

    Acessar o BigQuery

  2. No Editor de consultas, execute esta consulta:

    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. No painel Explorer, expanda o conjunto de dados census e, em seguida, a pasta Modelos.

  4. Clique no modelo census_model para abrir o painel de informações.

  5. Clique na guia Esquema. O esquema do modelo lista os atributos que o BigQuery ML usou para executar a regressão logística. O esquema será semelhante ao seguinte:

    Informações do esquema de clusters

Use a função ML.EVALUATE para avaliar o modelo.

Depois de criar o modelo, avalie o desempenho dele usando a função ML.EVALUATE. A função ML.EVALUATE avalia os valores previstos gerados pelo modelo em relação aos dados reais.

Para entrada, a função ML.EVALUATE usa o modelo treinado e as linhas da visualização input_data que têm evaluation como o valor da coluna dataframe. A função retorna uma única linha de estatísticas sobre o modelo.

Execute a consulta ML.EVALUATE:

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

    Acessar o BigQuery

  2. No Editor de consultas, execute esta consulta:

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. A resposta deve ficar assim:

    Saída de ML.EVALUATE

Também é possível consultar o painel de informações do modelo no console do Google Cloud para conferir as métricas de avaliação calculadas durante o treinamento:

Saída de ML.EVALUATE

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.

Para entrada, a função ML.PREDICT usa o modelo treinado e as linhas da visualização input_data que têm prediction como o valor da coluna dataframe.

Execute a consulta ML.PREDICT:

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

    Acessar o BigQuery

  2. No Editor de consultas, execute esta consulta:

    SELECT
      *
    FROM
      ML.PREDICT (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'prediction'
        )
      )
    
  3. A resposta deve ficar assim:

    Resultados de ML.PREDICT

    predicted_income_bracket é o valor previsto de income_bracket.

Explicar os resultados da previsão

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

ML.EXPLAIN_PREDICT é uma versão estendida da função ML.PREDICT. ML.EXPLAIN_PREDICT não apenas gera resultados de previsão, mas também gera colunas extras para explicar os resultados da previsão. Na prática, é possível executar ML.EXPLAIN_PREDICT em vez de ML.PREDICT. Para mais informações, consulte Visão geral da Explainable AI no BigQuery ML.

Execute a consulta ML.EXPLAIN_PREDICT:

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

    Acessar o BigQuery

  2. No Editor de consultas, execute esta consulta:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `census.census_model`,
      (
      SELECT
        *
      FROM
        `census.input_data`
      WHERE
        dataframe = 'evaluation'),
      STRUCT(3 as top_k_features))
    
  3. A resposta deve ficar assim:

    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 visualização input_data 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 contribuiu mais para a previsão geral, mas na linha 2, occupation contribuiu mais para a previsão geral.

Explicar o modelo globalmente

Para saber quais recursos são geralmente os mais importantes para determinar a faixa de renda, use a função ML.GLOBAL_EXPLAIN. Para usar ML.GLOBAL_EXPLAIN, treine novamente o modelo com a opção ENABLE_GLOBAL_EXPLAIN definida como TRUE.

Treine novamente e receba explicações globais para o modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, execute a seguinte consulta para treinar novamente o modelo:

    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. No editor de consultas, execute a seguinte consulta para receber explicações globais:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
    
  4. A resposta deve ficar assim:

    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.

Excluir o 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 Google 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.

Excluir o projeto

Para excluir o projeto:

  1. No Console do Google 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