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 Google Cloud, 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. Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar a performance dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto pré-existente, acesse

    Ativar a API BigQuery.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    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 seu modelo de ML.

Console

  1. No Google Cloud 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 Google Cloud 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 Google Cloud 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 Google Cloud 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 Google Cloud 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 Google Cloud 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 de 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 de modelo:

  1. No Google Cloud 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 Google Cloud 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 Google Cloud console.

    Acesse 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, 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 Google Cloud 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