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

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página de seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu 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. Acesse a IU da Web do BigQuery no Console do Cloud.

    Acesse a IU da Web do BigQuery

  2. Na seção Recursos do painel de navegação, clique no nome do seu 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
  *
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. Na IU da Web do BigQuery, clique em Escrever nova consulta.

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

    SELECT
      *
    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 o seguinte formato:

    Saída de ML.EVALUATE

    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
  • País de origem
  • Estado civil
  • Grau de escolaridade
  • Ocupação
  • Raça
  • 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,
  native_country,
  marital_status,
  education_num,
  occupation,
  race,
  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. Na IU da Web do BigQuery, clique em 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,
      native_country,
      marital_status,
      education_num,
      occupation,
      race,
      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
  *
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. Na IU da Web do BigQuery, clique em 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
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'
  1. Clique em Executar.

  2. Na IU da Web do BigQuery, 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. Na IU da Web do BigQuery, clique em 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 seguintes colunas:

    • 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. Na IU da Web do BigQuery, clique em 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.

Como fazer a limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, faça uma das coisas a seguir:

  • Exclua o projeto que você criou.
  • Mantenha o projeto e exclua o conjunto de dados.

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 IU da Web do BigQuery.

    Acesse a IU da Web do BigQuery

  2. Na navegação, clique no conjunto de dados bqml_tutorial criado.

  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 (bqml_tutorial) 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 a página 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