Como usar o ML do BigQuery para prever o peso de pinguins

Este tutorial ensina analistas de dados a usar o BigQuery ML. Com o BigQuery ML, usuários podem criar e executar 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 respectivas ferramentas e aumentem a velocidade de desenvolvimento ao eliminar a necessidade de movimentar os dados.

Neste tutorial, você usará a tabela penguin para criar um modelo que prevê o peso de um pinguim com base na espécie, a ilha de residência, comprimento e profundidade do cúlmen, comprimento da nadadeira e sexo.

Objetivos

Neste tutorial, você usará:

  • o BigQuery ML para criar um modelo de regressão linear usando a instrução CREATE MODEL;
  • a função ML.EVALUATE para avaliar o modelo de 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 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

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. 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, faça o seguinte:

    • Para o código do conjunto de dados, insira bqml_tutorial.
    • Em Local dos dados, selecione Estados Unidos. Atualmente, os conjuntos de dados públicos são armazenados no local multirregional 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

Em seguida, crie um modelo de regressão linear usando a tabela de pinguins do BigQuery. Com a consulta SQL padrão abaixo, você cria o modelo usado para prever o peso de um pinguim.

#standardSQL
CREATE MODEL `bqml_tutorial.penguins_model`
OPTIONS
  (model_type='linear_reg',
  input_label_cols=['body_mass_g']) AS
SELECT
  *
FROM
  `bigquery-public-data.ml_datasets.penguins`
WHERE
  body_mass_g IS NOT NULL

Ao executar o comando CREATE MODEL, o modelo será criado e treinado.

Detalhes da consulta

A cláusula CREATE MODEL é usada para criar e treinar o modelo chamado bqml_tutorial.penguins_model.

A cláusula OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) indica que você está criando 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 body_mass_g é a coluna do 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 todas as colunas na tabela bigquery-public-data.ml_datasets.penguins. Esta tabela contém as seguintes colunas que serão todas usadas para prever o peso de um pinguim:

  • species: espécie de pinguim (STRING).
  • island: ilha onde o pinguim reside (STRING).
  • culmen_length_mm: comprimento do culmen em milímetros (FLOAT64).
  • culmen_depth_mm: profundidade do culmen em milímetros (FLOAT64).
  • flipper_length_mm: comprimento da nadadeira em milímetros (FLOAT64);
  • sex: o sexo do pinguim (STRING).

A cláusula FROM (bigquery-public-data.ml_datasets.penguins) indica que a consulta é feita na tabela de pinguins conjunto de dados ml_datasets. Esse conjunto de dados está no projeto bigquery-public-data.

A cláusula WHERE (WHERE body_mass_g IS NOT NULL) exclui linhas em que body_mass_g é NULL.

Executar a consulta CREATE MODEL

Para executar a consulta CREATE MODEL para criar e treinar seu modelo:

  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
    CREATE MODEL `bqml_tutorial.penguins_model`
    OPTIONS
      (model_type='linear_reg',
        input_label_cols=['body_mass_g']) AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL
    
  3. Clique em Run.

    A consulta leva por volta de 30 segundos para ser concluída. Depois disso, o modelo (penguins_model) aparece no painel de navegação. Como a consulta usa uma instrução CREATE MODEL para criar uma tabela, não é possível ver os resultados da consulta.

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 no Console do Cloud. Neste tutorial, você usa o Console do Cloud.

Para criar um modelo, um algoritmo de machine learning examina vários exemplos e tenta encontrar 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 que foram geradas quando você executou a consulta CREATE MODEL:

  1. No painel de navegação do Console do Cloud, na seção Recursos, expanda [PROJECT_ID] > bqml_tutorial e clique em penguins_model.

  2. Clique na guia Treinamento e depois em Tabela. Os resultados terão o seguinte formato:

    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. 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 de sintaxe do BigQuery ML.

Etapa 4: avaliar o modelo

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

A consulta usada para avaliar o modelo é a seguinte:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.penguins_model`,
    (
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g 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.penguins_model.

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

A cláusula WHERE (WHERE body_mass_g IS NOT NULL) exclui linhas em que body_mass_g é NULL.

Também é possível pode chamar ML.EVALUATE sem fornecer os dados de entrada. Ela usará as métricas de avaliação calculadas durante o treinamento:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.penguins_model`)

Executar a consulta ML.EVALUATE

Para executar a consulta ML.EVALUATE que avalia o modelo:

  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.EVALUATE(MODEL `bqml_tutorial.penguins_model`,
        (
        SELECT
          *
        FROM
          `bigquery-public-data.ml_datasets.penguins`
        WHERE
          body_mass_g IS NOT NULL))
    
  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 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. A pontuação R2 é uma medida estatística que determina se as previsõ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 seu modelo foi avaliado, a próxima etapa é usá-lo para prever um resultado. Use seu modelo para prever a massa corporal em gramas de todos os pinguins que residem em Biscoe.

A consulta usada para prever o resultado é a seguinte:

#standardSQL
SELECT
  *
FROM
  ML.PREDICT(MODEL `bqml_tutorial.penguins_model`,
    (
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL
      AND island = "Biscoe"))

Detalhes da consulta

A instrução SELECT superior recupera a coluna predicted_body_mass_g junto com as colunas em bigquery-public-data.ml_datasets.penguins. Essa coluna é gerada pela função ML.PREDICT. Ao usar a função ML.PREDICT, o nome da coluna de saída para o modelo é predicted_<label_column_name>. Para modelos de regressão linear, predicted_label é o valor estimado de label. Para modelos de regressão logística, predicted_label é um dos dois rótulos de entrada, dependendo de qual rótulo tem a maior probabilidade prevista.

A função ML.PREDICT é usada para prever resultados usando o modelo: bqml_tutorial.penguins_model.

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

A cláusula WHERE (WHERE island = "Biscoe") indica que você está limitando a previsão à ilha de Biscoe.

Executar a consulta ML.PREDICT

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

  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.PREDICT(MODEL `bqml_tutorial.penguins_model`,
          (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL
            AND island = "Biscoe"))
    
  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.PREDICT

(Opcional) Etapa 6: 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 `bqml_tutorial.penguins_model`,
    (
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL
      AND island = "Biscoe"),
    STRUCT(3 as top_k_features))

Detalhes da consulta

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 `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE
        body_mass_g IS NOT NULL
        AND island = "Biscoe"),
      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 linear, os valores de Shapley são usados para gerar valores de atribuição de recursos por 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 sex mais contribuiu para a previsão geral, mas para a linha 2 deste exemplo, island contribuiu mais para a previsão geral.

(Opcional) Etapa 7: 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:

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.penguins_model
    OPTIONS
      (model_type='linear_reg',
      input_label_cols=['body_mass_g'],
      enable_global_explain=TRUE) AS
    SELECT
      *
    FROM
      bigquery-public-data.ml_datasets.penguins
    WHERE
      body_mass_g IS NOT NULL
  

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 `bqml_tutorial.penguins_model`)

Detalhes da consulta

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 `bqml_tutorial.penguins_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.

  • 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 página do BigQuery no Console do Cloud.

    Acesse a página 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, 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 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 "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