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.
Objetivos
Este tutorial explica como concluir as seguintes tarefas:
- Usar a declaração
CREATE MODEL
para criar um modelo de regressão linear de base. - Avaliar o modelo de base através da função
ML.EVALUATE
. - Usar a declaração
CREATE MODEL
com opções de ajuste de hiperparâmetros para preparar vinte testes de um modelo de regressão linear. - Rever as avaliações através da função
ML.TRIAL_INFO
. - Avaliar as tentativas através da função
ML.EVALUATE
. - Obtenha previsões sobre viagens de táxi a partir do modelo ideal entre os testes usando a função
ML.PREDICT
.
Custos
Este tutorial usa componentes faturáveis do Google Cloud, incluindo:
- BigQuery
- BigQuery ML
Para mais informações acerca dos custos do BigQuery, consulte a página de preços do BigQuery.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- O BigQuery é ativado automaticamente em novos projetos.
Para ativar o BigQuery num projeto pré-existente, aceda a
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Para criar o conjunto de dados, precisa da autorização
bigquery.datasets.create
IAM.Para criar o modelo, precisa das seguintes autorizações:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para executar a inferência, precisa das seguintes autorizações:
bigquery.models.getData
bigquery.jobs.create
Autorizações necessárias
Para mais informações acerca das funções e autorizações do IAM no BigQuery, consulte o artigo Introdução ao IAM.
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 dois testes em cada tarefa de preparação, num total de dez tarefas e vinte testes. 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 tentativas 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 | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
- Pode eliminar o projeto que criou.
- Em alternativa, pode manter o projeto e eliminar o conjunto de dados.
Elimine o conjunto de dados
A eliminação do projeto remove todos os conjuntos de dados e todas as tabelas no projeto. Se preferir reutilizar o projeto, pode eliminar o conjunto de dados que criou neste tutorial:
Se necessário, abra a página do BigQuery na Google Cloud consola.
No painel de navegação, clique no conjunto de dados bqml_tutorial que criou.
No lado direito da janela, clique em Eliminar conjunto de dados. Esta ação elimina o conjunto de dados, a tabela e todos os dados.
Na caixa de diálogo Eliminar conjunto de dados, confirme o comando de eliminação escrevendo o nome do conjunto de dados (
bqml_tutorial
) e, de seguida, clique em Eliminar.
Elimine o projeto
Para eliminar o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
O que se segue?
- Para saber mais sobre a aprendizagem automática, consulte o Machine Learning Crash Course.
- Para uma vista geral do BigQuery ML, consulte o artigo Introdução ao BigQuery ML.
- Para saber mais acerca da Google Cloud consola, consulte o artigo Usar a Google Cloud consola.