Como usar o BigQuery ML para prever o peso de pinguins


Neste tutorial, você usa um modelo de regressão linear no BigQuery ML para prever o peso de um pinguim com base nas informações demográficas dele. A 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.

Neste tutorial, usamos o conjunto de dados bigquery-public-data.ml_datasets.penguins.

Objetivos

Neste tutorial, você realizará as seguintes tarefas:

  • Criar um modelo de regressão linear.
  • Avaliar o modelo.
  • Fazer previsões usando o 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the 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

Criar um conjunto de dados

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

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

    Acesse a página do 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 bqml_tutorial.

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

      Página Criar conjunto de dados.

Criar o modelo

Crie um modelo de regressão linear usando a amostra do conjunto de dados do Google Analytics no BigQuery.

SQL

Crie um modelo de regressão linear usando a CREATE MODELinstrução e especificando LINEAR_REG para o tipo de modelo. A criação do modelo inclui treiná-lo.

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ótulos é body_mass_g. Para modelos de regressão linear, é preciso que a coluna de rótulo tenha valor real. Ou seja, os valores da coluna precisam ser números reais.
  • A instrução SELECT dessa consulta usa as seguintes colunas na tabela bigquery-public-data.ml_datasets.penguins para prever o peso de um pinguim:

    • species: a espécie do pinguim.
    • island: a ilha que o pinguim habita.
    • culmen_length_mm: o comprimento do cúlmen do pinguim em milímetros.
    • culmen_depth_mm: a profundidade do cúlmen do pinguim em milímetros.
    • flipper_length_mm: o comprimento das nadadeiras do pinguim em milímetros.
    • sex: o sexo do pinguim.
  • A cláusula WHERE na instrução SELECT dessa consulta, WHERE body_mass_g IS NOT NULL, exclui as linhas em que a coluna body_mass_g é NULL.

Execute a consulta que cria seu modelo de regressão linear:

  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 `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. A criação do modelo penguins_model leva cerca de 30 segundos. Para acessar o modelo, acesse o painel Explorer, expanda o conjunto de dados bqml_tutorial e, em seguida, expanda a pasta Modelos.

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.

from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Drop rows with nulls to get training data
training_data = bq_df.dropna(subset=["body_mass_g"])

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data.drop(columns=["body_mass_g"])
label_columns = training_data[["body_mass_g"]]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
    replace=True,
)

A criação do modelo leva cerca de 30 segundos. Para acessar o modelo, acesse o painel Explorer, expanda o conjunto de dados bqml_tutorial e, em seguida, expanda a pasta Modelos.

Ver 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 Google Cloud. Neste tutorial, você usa o console do Google 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. É um número que indica a qualidade da 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.

Veja as estatísticas do treinamento de modelo que foram geradas ao executar a consulta CREATE MODEL:

  1. No painel Explorer, expanda o conjunto de dados bqml_tutorial e, em seguida, a pasta Modelos. Clique em penguins_model para abrir o painel de informações do modelo.

  2. Clique na guia Treinamento e depois em Tabela. Os resultados devem ficar assim:

    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 mostra o valor do erro quadrático médio. Uma estratégia de otimização normal_equation é usada automaticamente neste treinamento. Portanto, apenas uma iteração precisa convergir para o modelo final. Para mais informações sobre como definir a estratégia de otimização do modelo, consulte optimize_strategy.

Avaliar o modelo

Depois de criar o modelo, avalie o desempenho dele usando a função ML.EVALUATE ou a função score do BigQuery DataFrames para avaliar os valores previstos gerados pelo modelo em relação aos dados reais.

SQL

Para entrada, a função ML.EVALUATE usa o modelo treinado e um conjunto de dados que corresponde ao esquema dos dados usados para treinar o modelo. Em um ambiente de produção, avalie o modelo com dados diferentes daqueles usados para treiná-lo. Quando você executa ML.EVALUATE sem fornecer dados de entrada, a função recupera as métricas de avaliação calculadas durante o treinamento. Essas métricas são calculadas usando o conjunto de dados de avaliação reservado automaticamente:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL bqml_tutorial.penguins_model);
    

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 `bqml_tutorial.penguins_model`,
          (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL));
      

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.

import bigframes.pandas as bpd

# Select the model you will be evaluating. `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model` object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
)

# Score the model with input data defined in an earlier step to compare
# model predictions on feature_columns to true labels in label_columns.
score = model.score(feature_columns, label_columns)
# Expected output results:
# index  mean_absolute_error  mean_squared_error  mean_squared_log_error  median_absolute_error  r2_score  explained_variance
#   0        227.012237         81838.159892            0.00507                173.080816        0.872377    0.872377
#   1 rows x 6 columns

A resposta deve ficar assim:

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. Um valor 0 indica que o modelo não explica qualquer variabilidade dos dados de resposta em torno da média. Um valor 1 indica que o modelo explica toda a variabilidade dos dados de resposta em torno da média.

Também é possível visualizar as métricas de avaliação no painel de informações do modelo no console do Google Cloud:

Saída de ML.EVALUATE

Usar o modelo para prever resultados

Agora seu modelo foi avaliado, a próxima etapa é usá-lo para prever um resultado. É possível executar a função ML.PREDICT ou a função predict do BigQuery DataFrames no modelo para prever a massa corporal em gramas de todos os pinguins que habitam as Ilhas Biscoe.

SQL

Para entrada, a função ML.PREDICT usa o modelo treinado e um conjunto de dados que corresponde ao esquema dos dados que você usou para treinar o modelo, excluindo a coluna de rótulos.

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 `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'));

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.

# Select the model you'll use for predictions. `read_gbq_model` loads
# model data from BigQuery, but you could also use the `model` object
# object from previous steps.
model = bpd.read_gbq_model(
    your_model_id,
    # For example: "bqml_tutorial.penguins_model",
)

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Use 'contains' function to filter by island containing the string
# "Biscoe".
biscoe_data = bq_df.loc[bq_df["island"].str.contains("Biscoe")]

result = model.predict(biscoe_data)

# Expected output results:
#     predicted_body_mass_g  	      species	                island	 culmen_length_mm  culmen_depth_mm   body_mass_g 	flipper_length_mm	sex
# 23	  4681.782896	   Gentoo penguin (Pygoscelis papua)	Biscoe	      <NA>	            <NA>	        <NA>	          <NA>	        <NA>
# 332	  4740.7907	       Gentoo penguin (Pygoscelis papua)	Biscoe	      46.2	            14.4	        214.0	          4650.0	    <NA>
# 160	  4731.310452	   Gentoo penguin (Pygoscelis papua)	Biscoe	      44.5	            14.3	        216.0	          4100.0	    <NA>

A resposta deve ficar assim:

Saída de ML.PREDICT

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 no lugar 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 `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'),
      STRUCT(3 as top_k_features));
  3. A resposta deve ficar assim:

    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 para cada recurso no modelo. ML.EXPLAIN_PREDICT gera as três principais atribuições de recursos por linha da tabela penguins 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. Em todos os exemplos, o recurso sex contribuiu mais com a previsão geral.

Explicar o modelo globalmente

Para saber quais recursos geralmente são os mais importantes para determinar o peso do pinguim, 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:

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

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `bqml_tutorial.penguins_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.

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

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

Excluir o projeto

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir