Realizar engenharia de atributos com a cláusula TRANSFORM

Neste tutorial, ensinamos a usar a cláusula TRANSFORM da instrução CREATE MODEL para realizar a engenharia de atributos ao mesmo tempo em que você cria e treina um modelo. Com a cláusula TRANSFORM, é possível especificar uma ou mais funções de pré-processamento para transformar os dados de entrada usados no treinamento do modelo. O pré-processamento aplicado ao modelo é feito automaticamente quando você usa o modelo com as funções ML.EVALUATE e ML.PREDICT.

Neste tutorial, usamos o conjunto de dados público bigquery-public-data.ml_datasets.penguin.

Objetivos

Este tutorial vai orientar você nas tarefas a seguir:

Custos

Neste tutorial, usamos componentes faturáveis do Cloud de Confiance by S3NS, incluindo:

  • BigQuery
  • BigQuery ML

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

Antes de começar

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse

    Ative a API BigQuery.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar a API

crie um conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.

Console

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

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

  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.

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

bq

Para criar um conjunto de dados, use o comando bq mk --dataset.

  1. Crie um conjunto de dados chamado bqml_tutorial com o local dos dados definido como US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirme se o conjunto de dados foi criado:

    bq ls

API

Chame o método datasets.insert com um recurso de conjunto de dados definido.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Criar o modelo

Crie um modelo de regressão linear para prever o peso dos pinguins e treine-o na tabela de amostra penguins.

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. Um modelo de regressão linear 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 cláusula TRANSFORM desta consulta usa as seguintes colunas da instrução SELECT:

  • body_mass_g: usado no treinamento sem nenhuma mudança.
  • culmen_depth_mm: usado no treinamento sem nenhuma mudança.
  • flipper_length_mm: usado no treinamento sem nenhuma mudança.
  • bucketized_culmen_length: gerado a partir de culmen_length_mm, dividindo culmen_length_mm com base em quantis com a função analítica ML.QUANTILE_BUCKETIZE();
  • culmen_length_mm: o valor culmen_length_mm original, convertido em um valor STRING e usado no treinamento.
  • species_sex: gerado a partir do cruzamento de species e sex usando a função ML.FEATURE_CROSS.

Não é necessário usar todas as colunas da tabela de treinamento na cláusula TRANSFORM.

A cláusula WHEREWHERE body_mass_g IS NOT NULL AND RAND() < 0.2 — exclui linhas em que o peso dos pinguins é NULL e usa a função RAND para extrair uma amostra aleatória dos dados.

Siga estas etapas para criar o modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform`
      TRANSFORM(
        body_mass_g,
        culmen_depth_mm,
        flipper_length_mm,
        ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length,
        CAST(culmen_length_mm AS string) AS culmen_length_mm,
        ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex)
      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
      AND RAND() < 0.2;

    A consulta leva cerca de 15 minutos para ser concluída. Depois disso, o modelo penguin_transform aparece no painel Explorer. Como a consulta usa uma instrução CREATE MODEL para criar um modelo, não é possível ver os resultados dela.

Avaliar o modelo

Avalie o desempenho do modelo usando a função ML.EVALUATE. A função ML.EVALUATE avalia os pesos previstos dos pinguins retornados pelo modelo em relação aos pesos reais dos pinguins nos dados de treinamento.

A cláusula FROM e a instrução SELECT aninhada desta consulta são as mesmas da consulta CREATE MODEL. Como você usou a cláusula TRANSFORM ao criar o modelo, não é necessário especificar as colunas e transformações novamente na função ML.EVALUATE. A função os recupera automaticamente do modelo.

Siga estas etapas para avaliar o modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL
        ));

    A resposta deve ficar assim:

    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |   64.21134350607677 | 13016.433317859564 |   7.140935762696211E-4 |     15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    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 de 0 indica que o modelo não explica a 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.

    Para mais informações sobre a saída da função ML.EVALUATE, consulte Saída.

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

Usar o modelo para prever o peso de pinguins

Use o modelo com a função ML.PREDICT para prever o peso dos pinguins machos.

A função ML.PREDICT gera o valor previsto na coluna predicted_label_column_name, neste caso, predicted_body_mass_g.

Ao usar a função ML.PREDICT, não é preciso transmitir todas as colunas usadas no treinamento de modelo. Apenas as colunas usadas na cláusula TRANSFORM são obrigatórias. Assim como a ML.EVALUATE, a função ML.PREDICT recupera automaticamente as colunas e transformações TRANSFORM do modelo.

Siga estas etapas para receber previsões do modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      predicted_body_mass_g
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            sex = 'MALE'
        ));

    A resposta deve ficar assim:

    +-----------------------+
    | predicted_body_mass_g |
    +-----------------------+
    |    2810.2868541725757 |
    +-----------------------+
    |    3813.6574220842676 |
    +-----------------------+
    |     4098.844698262214 |
    +-----------------------+
    |     4256.587135004173 |
    +-----------------------+
    |     3008.393497302691 |
    +-----------------------+
    |     ...               |
    +-----------------------+
    

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 doCloud de Confiance .

    Acesse a página do BigQuery

  2. No painel de navegação, clique no conjunto de dados bqml_tutorial que você criou.

  3. No lado direito da janela, clique em 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 seu conjunto de dados (bqml_tutorial) e clique em Excluir.

Excluir o projeto

Para excluir o projeto:

  1. No console Cloud de Confiance , 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