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
.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.
Console
No console do Google Cloud , acesse a página BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em
Ver ações > Criar conjunto de dados.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).
Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, utilize o
comando bq mk
com a sinalização --location
. Para obter uma lista completa de parâmetros, consulte a
referência
comando bq mk --dataset
.
Crie um conjunto de dados chamado
bqml_tutorial
com o local dos dados definido comoUS
e uma descrição deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Em vez de usar a flag
--dataset
, o comando usa o atalho-d
. Se você omitir-d
e--dataset
, o comando vai criar um conjunto de dados por padrão.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" } }
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.
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 deculmen_length_mm
, dividindoculmen_length_mm
com base em quantis com a função analíticaML.QUANTILE_BUCKETIZE()
;culmen_length_mm
: o valorculmen_length_mm
original, convertido em um valorSTRING
e usado no treinamento.species_sex
: gerado a partir do cruzamento despecies
esex
usando a funçãoML.FEATURE_CROSS
.
Não é necessário usar todas as colunas da tabela de treinamento na cláusula TRANSFORM
.
A cláusula WHERE
— WHERE 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:
No console do Google Cloud , acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir 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çãoCREATE 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:
No console do Google Cloud , acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir 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 valor1
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:
No console do Google Cloud , acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir 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 | +-----------------------+ | ... | +-----------------------+