Neste tutorial, você vai aprender a usar o ajuste de hiperparâmetros no BigQuery ML para ajustar um modelo de machine learning e melhorar a performance dele.
Para fazer o ajuste de hiperparâmetros, especifique a opção NUM_TRIALS
da instrução CREATE MODEL
em combinação com outras opções específicas do modelo. Quando você define essas opções, o BigQuery ML treina várias versões, ou testes, do modelo, cada uma com parâmetros ligeiramente diferentes, e retorna o teste com melhor desempenho.
Este tutorial usa a tabela de amostra tlc_yellow_trips_2018
pública, que contém informações sobre viagens de táxi na cidade de Nova York em 2018.
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 uma tabela de dados de treinamento
Crie uma tabela de dados de treinamento com base em um subconjunto dos dados da tabela tlc_yellow_trips_2018
.
Siga estas etapas para criar a tabela:
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 TABLE `bqml_tutorial.taxi_tip_input` AS SELECT * EXCEPT (tip_amount), tip_amount AS label FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018` WHERE tip_amount IS NOT NULL LIMIT 100000;
Criar um modelo de regressão linear de referência
Crie um modelo de regressão linear sem ajuste de hiperparâmetros e treine-o com os dados da tabela taxi_tip_input
.
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.baseline_taxi_tip_model` OPTIONS ( MODEL_TYPE = 'LINEAR_REG' ) AS SELECT * FROM `bqml_tutorial.taxi_tip_input`;
A consulta leva cerca de 2 minutos para ser concluída.
Avaliar o modelo de referência
Avalie o desempenho do modelo usando a função ML.EVALUATE
.
A função ML.EVALUATE
avalia as classificações de conteúdo previstas retornadas pelo modelo em relação às métricas de avaliação calculadas durante o treinamento de 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.baseline_taxi_tip_model`);
Os resultados são semelhantes aos seguintes:
+---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+ | 2.5853895559690323 | 23760.416358496139 | 0.017392406523370374 | 0.0044248227819481123 | -1934.5450533482465 | -1934.3513857946277 | +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
O valor r2_score
para o modelo de comparativo é negativo, o que indica um ajuste ruim aos dados. Quanto mais próximo de 1 estiver a pontuação R2, melhor será o ajuste do modelo.
Criar um modelo de regressão linear com ajuste de hiperparâmetros
Crie um modelo de regressão linear com ajuste de hiperparâmetro e treine-o com os dados da tabela taxi_tip_input
.
Use as seguintes opções de ajuste de hiperparâmetros na instrução CREATE MODEL
:
- A
opção
NUM_TRIALS
para definir o número de testes como 20. - A opção
MAX_PARALLEL_TRIALS
para executar dois testes em cada job de treinamento, totalizando dez jobs e vinte testes. Isso reduz o tempo de treinamento necessário. No entanto, os dois testes simultâneos não se beneficiam dos resultados de treinamento uns dos outros. - A
opção
L1_REG
para testar diferentes valores de regularização L1 nos diferentes testes. A regularização L1 remove atributos irrelevantes do modelo, o que ajuda a evitar o overfitting.
As outras opções de ajuste de hiperparâmetros compatíveis com o modelo usam os valores padrão, da seguinte forma:
L1_REG
:0
HPARAM_TUNING_ALGORITHM
:'VIZIER_DEFAULT'
HPARAM_TUNING_OBJECTIVES
:['R2_SCORE']
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.hp_taxi_tip_model` OPTIONS ( MODEL_TYPE = 'LINEAR_REG', NUM_TRIALS = 20, MAX_PARALLEL_TRIALS = 2, L1_REG = HPARAM_RANGE(0, 5)) AS SELECT * FROM `bqml_tutorial.taxi_tip_input`;
A consulta leva aproximadamente 20 minutos para ser concluída.
Receber informações sobre os testes de treinamento
Use a função ML.TRIAL_INFO
para acessar informações sobre todos os testes, incluindo valores de hiperparâmetros, objetivos e status. Essa função também retorna informações sobre qual teste tem o melhor desempenho, com base nessas informações.
Siga estas etapas para acessar as informações do teste:
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.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`) ORDER BY is_optimal DESC;
Os resultados são semelhantes aos seguintes:
+----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+ | trial_id | hyperparameters | hparam_tuning_evaluation_metrics | training_loss | eval_loss | status | error_message | is_optimal | +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+ | 7 | {"l1_reg":"4.999999999999985"} | {"r2_score":"0.653653627638174"} | 4.4677841296238165 | 4.478469742512195 | SUCCEEDED | NULL | true | | 2 | {"l1_reg":"2.402163664510254E-11"} | {"r2_score":"0.6532493667964732"} | 4.457692508421795 | 4.483697081650438 | SUCCEEDED | NULL | false | | 3 | {"l1_reg":"1.2929452948742316E-7"} | {"r2_score":"0.653249366811995"} | 4.45769250849513 | 4.483697081449748 | SUCCEEDED | NULL | false | | 4 | {"l1_reg":"2.5787102060628228E-5"} | {"r2_score":"0.6532493698925899"} | 4.457692523040582 | 4.483697041615808 | SUCCEEDED | NULL | false | | ... | ... | ... | ... | ... | ... | ... | ... | +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
O valor da coluna
is_optimal
indica que o teste 7 é o modelo ideal retornado pelo ajuste.
Avaliar os testes do modelo ajustado
Avalie a performance dos testes usando a função ML.EVALUATE
.
A função ML.EVALUATE
avalia as classificações de conteúdo previstas retornadas pelo modelo em relação às métricas de avaliação calculadas durante o treinamento para todos os testes.
Siga estas etapas para avaliar os testes de 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.hp_taxi_tip_model`) ORDER BY r2_score DESC;
Os resultados são semelhantes aos seguintes:
+----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | trial_id | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 7 | 1.151814398002232 | 4.109811493266523 | 0.4918733252641176 | 0.5736103414025084 | 0.6652110305659145 | 0.6652144696114834 | | 19 | 1.1518143358927102 | 4.109811921460791 | 0.4918672150119582 | 0.5736106106914161 | 0.6652109956848206 | 0.6652144346901685 | | 8 | 1.152747850702547 | 4.123625876152422 | 0.4897808307399327 | 0.5731702310239184 | 0.6640856984144734 | 0.664088410199906 | | 5 | 1.152895108945439 | 4.125775524878872 | 0.48939088205957937 | 0.5723300569616766 | 0.6639105860807425 | 0.6639132416838652 | | ... | ... | ... | ... | ... | ... | ... | +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
O valor
r2_score
para o modelo ideal, que é o teste 7, é0.66521103056591446
, o que mostra uma melhoria significativa em relação ao modelo de linha de base.
É possível avaliar um teste específico especificando o argumento TRIAL_ID
na função ML.EVALUATE
.
Para mais informações sobre a diferença entre os objetivos ML.TRIAL_INFO
e as métricas de avaliação ML.EVALUATE
, consulte
Funções de disponibilização de modelos.
Usar o modelo ajustado para prever gorjetas de táxi
Use o modelo ideal retornado pelo ajuste para prever gorjetas de diferentes viagens de táxi. O modelo ideal é usado automaticamente pela função ML.PREDICT
, a menos que você selecione um teste diferente especificando o argumento TRIAL_ID
. As previsões são retornadas na coluna predicted_label
.
Siga estas etapas para receber previsões:
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.PREDICT( MODEL `bqml_tutorial.hp_taxi_tip_model`, ( SELECT * FROM `bqml_tutorial.taxi_tip_input` LIMIT 5 ));
Os resultados são semelhantes aos seguintes:
+----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+ | trial_id | predicted_label | vendor_id | pickup_datetime | dropoff_datetime | passenger_count | trip_distance | rate_code | store_and_fwd_flag | payment_type | fare_amount | extra | mta_tax | tolls_amount | imp_surcharge | total_amount | pickup_location_id | dropoff_location_id | data_file_year | data_file_month | label | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+ | 7 | 1.343367839584448 | 2 | 2018-01-15 18:55:15 | 2018-01-15 18:56:18 | 1 | 0 | 1 | N | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 193 | 193 | 2018 | 1 | 0 | | 7 | -1.176072791783461 | 1 | 2018-01-08 10:26:24 | 2018-01-08 10:26:37 | 1 | 0 | 5 | N | 3 | 0.01 | 0 | 0 | 0 | 0.3 | 0.31 | 158 | 158 | 2018 | 1 | 0 | | 7 | 3.839580104168765 | 1 | 2018-01-22 10:58:02 | 2018-01-22 12:01:11 | 1 | 16.1 | 1 | N | 1 | 54.5 | 0 | 0.5 | 0 | 0.3 | 55.3 | 140 | 91 | 2018 | 1 | 0 | | 7 | 4.677393985230036 | 1 | 2018-01-16 10:14:35 | 2018-01-16 11:07:28 | 1 | 18 | 1 | N | 2 | 54.5 | 0 | 0.5 | 0 | 0.3 | 55.3 | 138 | 67 | 2018 | 1 | 0 | | 7 | 7.938988937253062 | 2 | 2018-01-16 07:05:15 | 2018-01-16 08:06:31 | 1 | 17.8 | 1 | N | 1 | 54.5 | 0 | 0.5 | 0 | 0.3 | 66.36 | 132 | 255 | 2018 | 1 | 11.06 | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+