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

Neste tutorial, você verá uma apresentação do 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, habilitando os especialistas em SQL a criar modelos com suas próprias ferramentas, além de agilizar o desenvolvimento ao eliminar a necessidade de movimento de dados.

Neste tutorial, a tabela de amostras 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

Componentes faturáveis do Cloud Platform são usados neste tutorial, como os seguintes:

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

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

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    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

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.

    Criar conjunto de dados

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

    • Em Dataset ID, insira bqml_tutorial.
    • Para local dos dados, escolha Estados Unidos (EUA). Atualmente, os conjuntos de dados públicos são armazenados no local da multirregião US. Para simplificar, coloque seu conjunto de dados no mesmo local.

      Página "Criar 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 treinar o modelo chamado bqml_tutorial.natality_model.

A cláusula OPTIONS(model_type='linear_reg', input_label_cols=['weight_pounds']) indica a criação de 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.

    A consulta dura por volta de 30 segundos. Após esse período, o modelo (natality_model) aparece no painel de navegação da IU da Web do BigQuery. Como a instrução CREATE MODEL é usada 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 a previsão do modelo foi ruim 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 saber mais sobre a função ML.TRAINING_INFO e a opção de treinamento "optimize_strategy", veja a referência de 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 cláusula FROM usa a função ML.EVALUATE no 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. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Em Processing location, selecione US. Essa etapa é opcional, já que o local de processamento é detectado automaticamente a partir do 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 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. O resultado 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 tenha probabilidade de predição maior.

A função ML.PREDICT é usada para prever resultados usando o 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 prediçã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. (Opcional) Para definir o local de processamento, clique em Mais > Configurações de consulta. Em Processing location, selecione US. Essa etapa é opcional, já que o local de processamento é detectado automaticamente a partir do 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 de ML.PREDICT

Limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, faça o seguinte:

  • 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. Se necessário, abra a IU da Web do BigQuery.

    Acessar a IU da Web do BigQuery

  2. No painel de navegação, selecione o conjunto de dados bqml_tutorial criado.

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

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

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 o projeto que você quer excluir e clique em Excluir delete.
  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…