Como usar o BigQuery ML para prever o peso de recém-nascidos

Neste tutorial, é apresentado o BigQuery ML aos analistas de dados. Com ele, os usuários criam e executam modelos de machine learning no BigQuery usando consultas SQL. O objetivo é democratizar o machine learning, de modo que os especialistas em SQL criem modelos usando as ferramentas atuais deles, e agilizar o desenvolvimento eliminando a necessidade de movimentar os dados.

Neste tutorial, a tabela de amostra natality é usada para criar um modelo que prevê o peso de uma criança ao nascer de acordo com o sexo do bebê, a duração da gravidez e as informações demográficas sobre a mãe. A tabela de amostras natality contém informações sobre todos os nascimentos nos Estados Unidos em um período de 40 anos.

Objetivos

Neste tutorial, você usará:

  • o BigQuery ML para criar um modelo de regressão linear binário usando a instrução CREATE MODEL;
  • a função ML.EVALUATE para avaliar o modelo ML;
  • a função ML.PREDICT para fazer previsões usando o modelo de ML.

Custos

Este tutorial usa componentes faturáveis do Cloud Platform, incluindo:

  • Google BigQuery
  • BigQuery ML

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

Para mais informações sobre custos do BigQuery ML, consulte a seção Preços do BigQuery ML na página de preços.

Antes de começar

  1. Faça login na sua Conta do Google.

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

  2. Selecione ou crie um projeto do GCP.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado para o projeto.

    Saiba como ativar o faturamento

  4. O BigQuery é ativado automaticamente nos novos projetos. Para ativar o BigQuery em um projeto existente, acesse Ativar BigQuery API.

    Ativar a API

Público-alvo

Este é um tutorial introdutório destinado a analistas de dados.

Um analista de dados usa o SQL padrão do BigQuery para analisar tendências de dados que informam estratégias e operações comerciais. Isso inclui o uso do BigQuery ML para treinar e avaliar modelos de ML, além de realizar análises preditivas.

Os analistas de dados usam uma série de ferramentas baseadas principalmente na IU, incluindo:

  • a IU da Web do BigQuery no Console do GCP;
  • planilhas;
  • software estatístico, como o RStudio;
  • ferramentas de visualização, como o Cloud Datalab e o Data Studio.

Etapa 1: criar conjunto de dados

A primeira etapa é criar um conjunto de dados do BigQuery para armazenar seu modelo de ML. Para criar o conjunto de dados, faça o seguinte:

  1. Acesse a IU da Web do BigQuery no Console do GCP.

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

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

    • No campo Código do conjunto de dados, insira bqml_tutorial.
    • Para local dos dados, escolha Estados Unidos (EUA). Atualmente, os conjuntos de dados públicos são armazenados no local multirregional US. Para simplificar, coloque seu conjunto de dados no mesmo local.

      Criar página de conjunto de dados

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

Etapa 2: criar modelo

Agora, crie um modelo de regressão linear usando a tabela amostra de natalidade do BigQuery. Com a consulta SQL padrão abaixo, você cria o modelo usado para prever o peso de nascimento de uma criança.

#standardSQL
CREATE MODEL `bqml_tutorial.natality_model`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['weight_pounds']) AS
SELECT
  weight_pounds,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL
  AND RAND() < 0.001

Além disso, a execução do comando CREATE MODEL cria e treina esse modelo.

Detalhes da consulta

A cláusula CREATE MODEL é usada para criar e preparar o modelo denominado bqml_tutorial.natality_model.

A cláusula OPTIONS(model_type='linear_reg', input_label_cols=['weight_pounds']) indica que está sendo criado um modelo de regressão linear. Regressão linear é um tipo de modelo de regressão que gera um valor contínuo a partir de uma combinação linear de recursos de entrada. A coluna weight_pounds é o rótulo de entrada. Para modelos de regressão linear, é preciso que a coluna de rótulo tenha valor real, isto é, os valores da coluna precisam ser números reais.

A instrução SELECT dessa consulta usa as colunas abaixo para prever o peso de uma criança ao nascer:

  • weight_pounds: peso da criança, em libras (FLOAT64);
  • is_male: TRUE para crianças do sexo masculino, FALSE, para sexo feminino (BOOL);
  • gestation_weeks: número de semanas de gravidez (INT64);
  • mother_age: idade da mãe, relatada ao dar à luz (INT64);
  • mother_race: um valor inteiro que corresponde à raça da mãe. INT64, o mesmo que child_race no esquema da tabela. Para que o BigQuery ML trate mother_race como recurso não numérico, com cada valor representando uma categoria diferente, a consulta mother_race é transmitida a uma STRING. Isso é importante, porque é mais provável que a raça funcione mais como categoria do que como um número inteiro, que tem ordenação e escala.

A cláusula FROM, bigquery-public-data.samples.natality, indica que você está consultando a tabela de amostra de natalidade no conjunto de dados de amostra. Este conjunto de dados está no projeto bigquery-public-data.

A cláusula WHERE, WHERE weight_pounds IS NOT NULL AND RAND() < 0.001, exclui linhas em que o peso é NULL e usa a função RAND para desenhar uma amostra aleatória dos dados.

Executar a consulta CREATE MODEL

Para executar a consulta CREATE MODEL para criar e treinar seu modelo, 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.

    #standardSQL
    CREATE MODEL `bqml_tutorial.natality_model`
    OPTIONS
      (model_type='linear_reg',
        input_label_cols=['weight_pounds']) AS
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS string) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL
      AND RAND() < 0.001
    
  3. Clique em Executar consulta.

    A consulta dura por volta de 30 segundos. Após esse período, o modelo (natality_model) aparecerá no painel de navegação da IU da Web do BigQuery. Como é usada a instrução CREATE MODEL na consulta para criar uma tabela, não são exibidos resultados.

Etapa 3 (opcional): receber estatísticas de treinamento

Para ver os resultados do treinamento de modelo, use a função ML.TRAINING_INFO ou visualize as estatísticas na IU da Web do BigQuery, opção utilizada neste tutorial.

Com um algoritmo de aprendizado de máquina, você cria um modelo examinando muitos exemplos, na busca de um modelo que minimize a perda. Esse processo é chamado de "minimização de riscos empíricos".

Perda é a penalidade para uma previsão ruim, ou seja, um número que indica como foi ruim a previsão do modelo em um único exemplo. Para uma previsão de modelo perfeita, a perda é zero. Caso contrário, a perda é maior. O treinamento de um modelo visa encontrar um conjunto de ponderações e tendências com uma média de perda menor em todos os exemplos.

Para ver as estatísticas de treinamento do modelo geradas quando você executou a consulta CREATE MODEL, faça o seguinte:

  1. Na IU da Web do BigQuery, vá até a seção Recursos, expanda [PROJECT_ID] > bqml_tutorial e clique em natality_model.

  2. Clique na guia Estatísticas do modelo. Os resultados terão a aparência abaixo:

    Saída de ML.TRAINING_INFO

    A coluna Perda de dados de treinamento representa métrica da perda, calculada depois de o modelo ser treinado no conjunto de dados de treinamento. Como você executou uma regressão linear, essa coluna é o erro quadrático médio. A coluna Perda de dados de avaliação é a mesma métrica de perda calculada no conjunto de dados não incluídos, aqueles privados de treinamento para validar o modelo. Como a estratégia de otimização "normal_equation" é usada automaticamente para o treinamento aqui, apenas uma iteração é exigida para convergir no modelo final. Para mais detalhes sobre a opção optimize_strategy, consulte A instrução CREATE MODEL.

    Para mais detalhes sobre a função ML.TRAINING_INFO e a opção de treinamento "optimize_strategy", consulte a referência da sintaxe do BigQuery ML.

Etapa 4: avaliar o modelo

Após criar o modelo, avalie o desempenho do classificador usando a função ML.EVALUATE. A função ML.EVALUATE avalia os valores previstos em relação aos dados reais. Um classificador é um dos valores em um conjunto de valores de destino enumerados para um rótulo.

A consulta usada para avaliar o modelo é a seguinte:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL))

Detalhes da consulta

A principal instrução SELECT recupera as colunas do modelo.

A função ML.EVALUATE é usada pela cláusula FROM no seu modelo: bqml_tutorial.natality_model.

A cláusula FROM e a instrução SELECT aninhada dessa consulta são as mesmas da consulta CREATE MODEL.

A cláusula WHERE, WHERE weight_pounds IS NOT NULL, exclui linhas em que o peso é NULL.

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. Digite a consulta SQL padrão abaixo na área de texto Editor de consultas.

    #standardSQL
    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          weight_pounds,
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          weight_pounds IS NOT NULL))
    
  3. Como opção, é possível configurar o local de processamento clicando em Opções> Configurações de consulta. Em Local de processamento, selecione US. Essa etapa é opcional, já que o local de processamento é detectado automaticamente com base no local do conjunto de dados.

  4. Clique em Executar consulta.

  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 de ML.EVALUATE

    Como você executou uma regressão linear, os resultados incluem as seguintes colunas:

    • mean_absolute_error
    • mean_squared_error
    • mean_squared_log_error
    • median_absolute_error
    • r2_score
    • explained_variance

Uma métrica importante nos resultados da avaliação é a pontuação R2. Essa pontuação é uma medida estatística que determina se as predições de regressão linear se aproximam dos dados reais. 0 indica que o modelo não explica a variabilidade dos dados de resposta em torno da média. 1 indica que o modelo explica toda a variabilidade dos dados de resposta em torno da média.

Etapa 5: usar o modelo para prever resultados

Agora que você avaliou seu modelo, a próxima etapa é usá-lo para prever um resultado. Use-o para prever o peso no nascimento de todos os bebês em Wyoming.

A consulta usada para prever o resultado é a seguinte:

#standardSQL
SELECT
  predicted_weight_pounds
FROM
  ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      state = "WY"))

Detalhes da consulta

A principal instrução SELECT recupera a coluna predicted_weight_pounds. Esta coluna é gerada pela função ML.PREDICT. Quando você utiliza a função ML.PREDICT, o nome da coluna de saída para o modelo é predicted_<label_column_name>. Em modelos de regressão linear, predicted_label é o valor estimado para o label. Em modelos de regressão logística, predicted_label é um dos dois rótulos de entrada, dependendo de qual tem a probabilidade mais alta predita.

A função ML.PREDICT é utilizada para prever resultados usando seu modelo: bqml_tutorial.natality_model.

A cláusula FROM e a instrução SELECT aninhada dessa consulta são as mesmas da consulta CREATE MODEL.

A cláusula WHERE, WHERE state = “WY”, indica que você está limitando a previsão para o estado de Wyoming.

Executar a consulta ML.PREDICT

Veja como executar a consulta que usa o modelo para prever um resultado:

  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.

    #standardSQL
    SELECT
      predicted_weight_pounds
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          state = "WY"))
    
  3. Como opção, é possível configurar o local de processamento clicando em Opções> Configurações de consulta. Em Local de processamento, selecione US. Essa etapa é opcional, já que o local de processamento é detectado automaticamente com base no local do conjunto de dados.

  4. Clique em Executar consulta.

  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 de ML.PREDICT

Limpeza

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

  • exclua o projeto que você criou; ou
  • 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. Caso necessário, abra a IU da Web.

    Acessar a IU da Web

  2. No painel de navegação, passe o cursor sobre o conjunto de dados bqml_tutorial que você criou.

  3. Clique no ícone de seta para baixo imagem da seta para baixo ao lado do nome do seu conjunto de dados no painel de navegação e selecione Excluir conjunto de dados. Essa ação exclui o conjunto, a tabela e todos os dados.

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

Como excluir o projeto

Para excluir o projeto:

  1. No Console do GCP, acesse a página "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione um e clique em Excluir projeto.
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.