Este tutorial ensina como usar a ajustagem de hiperparâmetros no BigQuery ML para ajustar um modelo de aprendizagem automática e melhorar o respetivo desempenho.
Pode ajustar os hiperparâmetros especificando a opção NUM_TRIALS
da declaração CREATE MODEL
, em combinação com outras opções específicas do modelo. Quando define estas opções, o BigQuery ML prepara várias versões ou testes do modelo, cada uma com parâmetros ligeiramente diferentes, e devolve o teste com o melhor desempenho.
Este tutorial usa a tabela de exemplo pública tlc_yellow_trips_2018
, que contém informações sobre viagens de táxi na cidade de Nova Iorque em 2018.
Crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o seu modelo de ML.
Consola
Na Google Cloud consola, aceda à página BigQuery.
No painel Explorador, clique no nome do projeto.
Clique em
Ver ações > Criar conjunto de dadosNa página Criar conjunto de dados, faça o seguinte:
Para o ID do conjunto de dados, introduza
bqml_tutorial
.Em Tipo de localização, selecione Várias regiões e, de seguida, selecione EUA (várias regiões nos Estados Unidos).
Deixe as restantes predefinições como estão e clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, use o comando
bq mk
com a flag --location
. Para uma lista completa de parâmetros possíveis, consulte a referência do comando bq mk --dataset
.
Crie um conjunto de dados com o nome
bqml_tutorial
com a localização dos dados definida 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 omitir-d
e--dataset
, o comando cria um conjunto de dados por predefinição.Confirme que 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" } }
DataFrames do BigQuery
Antes de experimentar este exemplo, siga as instruções de configuração dos DataFrames do BigQuery no início rápido do BigQuery com os DataFrames do BigQuery. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure o ADC para um ambiente de desenvolvimento local.
Crie uma tabela de dados de preparação
Crie uma tabela de dados de preparação com base num subconjunto dos dados da tabela tlc_yellow_trips_2018
.
Siga estes passos para criar a tabela:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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;
Crie um modelo de regressão linear de base
Crie um modelo de regressão linear sem ajuste de hiperparâmetros e prepare-o com os dados da tabela taxi_tip_input
.
Siga estes passos para criar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 demora cerca de 2 minutos a concluir.
Avalie o modelo de base
Avalie o desempenho do modelo através da função ML.EVALUATE
.
A função ML.EVALUATE
avalia as classificações de conteúdo previstas devolvidas pelo modelo em função das métricas de avaliação calculadas durante a preparação do modelo.
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta e clique em Executar:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.baseline_taxi_tip_model`);
Os resultados têm um aspeto semelhante ao seguinte:
+---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+ | 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
do modelo de base é negativo, o que indica um ajuste fraco aos dados. Quanto mais próximo de 1 for a pontuação R2, melhor é o ajuste do modelo.
Crie um modelo de regressão linear com otimização de hiperparâmetros
Crie um modelo de regressão linear com o ajuste de hiperparâmetros e prepare-o com os dados da tabela taxi_tip_input
.
Use as seguintes opções de ajuste de hiperparâmetros na declaração CREATE MODEL
:
- A opção
NUM_TRIALS
para definir o número de tentativas como vinte. - A opção
MAX_PARALLEL_TRIALS
para executar duas tentativas em cada tarefa de preparação, num total de dez tarefas e vinte tentativas. Isto reduz o tempo de formação necessário. No entanto, os dois testes simultâneos não beneficiam dos resultados da preparação um do outro. - A opção
L1_REG
para experimentar diferentes valores de regularização L1 nas diferentes tentativas. A regularização L1 remove funcionalidades irrelevantes do modelo, o que ajuda a evitar o sobreajuste.
As outras opções de otimização de hiperparâmetros suportadas pelo modelo usam os respetivos valores predefinidos, da seguinte forma:
L1_REG
:0
HPARAM_TUNING_ALGORITHM
:'VIZIER_DEFAULT'
HPARAM_TUNING_OBJECTIVES
:['R2_SCORE']
Siga estes passos para criar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 demora aproximadamente 20 minutos a concluir.
Receba informações sobre as avaliações de preparação
Obtenha informações sobre todas as experiências, incluindo os respetivos valores de hiperparâmetros, objetivos e estado, através da função ML.TRIAL_INFO
. Esta função também devolve informações sobre o teste que tem o melhor desempenho, com base nestas informações.
Siga estes passos para obter informações sobre a avaliação:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta e clique em Executar:
SELECT * FROM ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`) ORDER BY is_optimal DESC;
Os resultados têm um aspeto semelhante ao seguinte:
+----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+ | 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 a tentativa 7 é o modelo ideal devolvido pelo ajuste.
Avalie as experiências do modelo otimizado
Avalie o desempenho das avaliações através da função ML.EVALUATE
.
A função ML.EVALUATE
avalia as classificações de conteúdo previstas devolvidas pelo modelo em comparação com as métricas de avaliação calculadas durante a preparação para todos os testes.
Siga estes passos para avaliar os testes do modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta e clique em Executar:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`) ORDER BY r2_score DESC;
Os resultados têm um aspeto semelhante ao seguinte:
+----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 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 base.
Pode avaliar um teste específico especificando o argumento TRIAL_ID
na função ML.EVALUATE
.
Para mais informações sobre a diferença entre ML.TRIAL_INFO
objetivos e ML.EVALUATE
métricas de avaliação, consulte
Funções de publicação de modelos.
Use o modelo otimizado para prever gorjetas de táxi
Use o modelo ideal devolvido pela otimização para prever gorjetas para diferentes viagens de táxi. O modelo ideal é usado automaticamente pela função ML.PREDICT
, a menos que selecione um teste diferente especificando o argumento TRIAL_ID
. As
previsões são devolvidas na coluna predicted_label
.
Siga estes passos para receber previsões:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 têm um aspeto semelhante ao seguinte:
+----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+ | 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 | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+