Melhorar o desempenho do modelo com o ajuste de hiperparâmetros

Este tutorial ensina como 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 NUM_TRIALS opção da instrução CREATE MODEL, em combinação com outras opções específicas do modelo. Ao definir 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 pública tlc_yellow_trips_2018, que contém informações sobre viagens de táxi na cidade de Nova York em 2018.

Objetivos

Este tutorial orienta você na conclusão das seguintes tarefas:

  • Usar a CREATE MODEL instrução para criar um modelo de regressão linear de referência.
  • Avaliar o modelo de referência usando a ML.EVALUATE função.
  • Usar a instrução CREATE MODEL com opções de ajuste de hiperparâmetros para treinar 20 testes de um modelo de regressão linear.
  • Analisar os testes usando a ML.TRIAL_INFO função.
  • Avaliar os testes usando a função ML.EVALUATE.
  • Receber previsões sobre viagens de táxi do modelo ideal entre os testes por usando a ML.PREDICT função.

Custos

Este tutorial usa 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, clique no botão abaixo.

    Ative a API BigQuery.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter a permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pela função Proprietário (roles/owner). Caso contrário, você pode receber essa permissão pela função Administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin). Saiba como conceder funções.

    Ativar a API

Permissões necessárias

  • Para criar o conjunto de dados, é preciso ter a permissão de IAM bigquery.datasets.create.

  • Para criar o modelo, você precisa das seguintes permissões:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Para executar a inferência, você precisa das seguintes permissões:

    • bigquery.models.getData
    • bigquery.jobs.create

Para mais informações sobre os papéis e as permissões do IAM em BigQuery, consulte Introdução ao IAM.

crie um conjunto de dados

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

Console

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

    Acessar a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Ver 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 selecione EUA.

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

bq

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

  1. Crie um conjunto de dados chamado bqml_tutorial com o local de 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 datasets.insert método com um recurso de conjunto de dados definido.

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

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:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo 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 nos dados da tabela taxi_tip_input.

Siga estas etapas para criar o modelo:

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

  1. No Cloud de Confiance console, 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.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 do modelo de referência é negativo, o que indica um ajuste ruim para os dados. Quanto mais próximo de 1 for a R2 pontuação, 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âmetros e treine-o nos dados da tabela taxi_tip_input.

Use as seguintes opções de ajuste de hiperparâmetros na instrução CREATE MODEL:

As outras opções de ajuste de hiperparâmetros com suporte do modelo usam os valores padrão, conforme mostrado abaixo:

  • L1_REG: 0
  • HPARAM_TUNING_ALGORITHM: 'VIZIER_DEFAULT'
  • HPARAM_TUNING_OBJECTIVES: ['R2_SCORE']

Siga estas etapas para criar o modelo:

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

Receba informações sobre todos os testes, incluindo valores de hiperparâmetros, objetivos e status, usando a função ML.TRIAL_INFO. Essa função também retorna informações sobre qual teste tem o melhor desempenho, com base nessas informações.

Siga estas etapas para receber informações sobre o teste:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo 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 de todos os testes.

Siga estas etapas para avaliar os testes do modelo:

  1. No Cloud de Confiance console, 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.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 do modelo ideal, que é o teste 7, é 0.66521103056591446, o que mostra uma melhoria significativa em relação ao modelo de referência.

É 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 ML.TRIAL_INFO objetivos e as ML.EVALUATE métricas de avaliação, 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:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo 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 |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    

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

    Acessar 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 de dados, 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). Em seguida, clique em Excluir.

Excluir o projeto

Para excluir o projeto:

  1. No Cloud de Confiance console, 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 Desligar para excluir o projeto.

A seguir