Mejorar el rendimiento del modelo con el ajuste de hiperparámetros


En este instructivo, se explica cómo usar el ajuste de hiperparámetros en BigQuery ML para ajustar un modelo de aprendizaje automático y mejorar su rendimiento.

Para realizar el ajuste de hiperparámetros, especifica la opción NUM_TRIALS de la sentencia CREATE MODEL, en combinación con otras opciones específicas del modelo. Cuando configuras estas opciones, BigQuery ML entrena varias versiones o pruebas del modelo, cada una con parámetros ligeramente diferentes, y muestra la prueba que tiene el mejor rendimiento.

En este instructivo, se usa la tabla de muestra tlc_yellow_trips_2018 pública, que contiene información sobre los viajes en taxi en la ciudad de Nueva York en 2018.

Objetivos

En este instructivo, se te guiará para completar las siguientes tareas:

  • Usar la sentencia CREATE MODEL para crear un modelo de regresión lineal de referencia
  • Evaluar el modelo de referencia con la función ML.EVALUATE
  • Usar la sentencia CREATE MODEL con opciones de ajuste de hiperparámetros para entrenar veinte pruebas de un modelo de regresión lineal
  • Revisar las pruebas con la función ML.TRIAL_INFO
  • Evalúa las pruebas con la función ML.EVALUATE.
  • Obtén predicciones sobre los viajes en taxi del modelo óptimo entre las pruebas con la función ML.PREDICT.

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • BigQuery
  • BigQuery ML

Para obtener más información sobre los costos de BigQuery, consulta la página de precios de BigQuery.

Antes de comenzar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure 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.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, ve a

    Enable the BigQuery API.

    Enable the API

Permisos necesarios

  • Para crear el conjunto de datos, necesitas el permiso bigquery.datasets.create de IAM.
  • Para crear el recurso de conexión, necesitas los siguientes permisos:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para crear el modelo, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Para ejecutar inferencias, necesitas los siguientes permisos:

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

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.

Crea un conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haz clic en Ver acciones > Crear conjunto de datos.

    Crea un conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, ingresa bqml_tutorial.

    • En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).

      Los conjuntos de datos públicos se almacenan en la multirregión US. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.

    • Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.

      Página Crear un conjunto de datos

Crea una tabla de datos de entrenamiento

Crea una tabla de datos de entrenamiento, basada en un subconjunto de los datos de la tabla tlc_yellow_trips_2018.

Sigue estos pasos para crear la tabla:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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;

Crea un modelo de regresión lineal de referencia

Crea un modelo de regresión lineal sin ajuste de hiperparámetros y entrena en los datos de la tabla taxi_tip_input.

Sigue estos pasos para crear el modelo:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    CREATE OR REPLACE MODEL `bqml_tutorial.baseline_taxi_tip_model`
      OPTIONS (
        MODEL_TYPE = 'LINEAR_REG'
      )
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`;

    La consulta tarda unos 2 minutos en completarse.

Evalúa el modelo de referencia

Evalúa el rendimiento del modelo con la función ML.EVALUATE. La función ML.EVALUATE evalúa las calificaciones de contenido previstas que muestra el modelo en función de las métricas de evaluación calculadas durante el entrenamiento de modelos.

Sigue estos pasos para evaluar el modelo:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.baseline_taxi_tip_model`);

    Los resultados son similares a los siguientes:

    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    | 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 |
    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    

El valor de r2_score para el modelo de referencia es negativo, lo que indica que el ajuste de los datos es deficiente. Cuanto más cerca esté la puntuación de R2 de 1, mejor será el ajuste del modelo.

Crea un modelo de regresión lineal con ajuste de hiperparámetros

Crea un modelo de regresión lineal con ajuste de hiperparámetros y entrena el modelo con los datos de la tabla taxi_tip_input.

Usa las siguientes opciones de ajuste de hiperparámetros en la sentencia CREATE MODEL:

  • La opción NUM_TRIALS para establecer la cantidad de pruebas en veinte.
  • La opción MAX_PARALLEL_TRIALS para ejecutar dos pruebas en cada trabajo de entrenamiento, por un total de diez trabajos y veinte pruebas. Esto reduce el tiempo de entrenamiento necesario. Sin embargo, las dos pruebas simultáneas no se benefician mutuamente de los resultados de entrenamiento que genera cada una.
  • La opción L1_REG para probar diferentes valores de regularización L1 en los diferentes ensayos La regularización L1 quita atributos irrelevantes del modelo, lo que ayuda a evitar el sobreajuste.

Las otras opciones de ajuste de hiperparámetros que admite el modelo usan sus valores predeterminados, como se indica a continuación:

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

Sigue estos pasos para crear el modelo:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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`;

    La consulta tarda aproximadamente 20 minutos en completarse.

Obtén información sobre las pruebas de entrenamiento

Usa la función ML.TRIAL_INFO para obtener información sobre todas las pruebas, incluidos sus valores de hiperparámetros, objetivos y estado. Esta función también muestra información sobre qué prueba tiene el mejor rendimiento, según esta información.

Sigue estos pasos para obtener información sobre la prueba:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT *
    FROM
      ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`)
    ORDER BY is_optimal DESC;

    Los resultados son similares a los siguientes:

    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    | 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 |
    |      ... |                             ...     |                           ...     |              ...   |             ...    |       ... |          ...  |        ... |
    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    

    El valor de la columna is_optimal indica que la prueba 7 es el modelo óptimo que muestra el ajuste.

Evalúa las pruebas del modelo ajustado

Evalúa el rendimiento de las pruebas con la función ML.EVALUATE. La función ML.EVALUATE evalúa las calificaciones de contenido previstas que muestra el modelo en función de las métricas de evaluación calculadas durante el entrenamiento para todos los ensayos.

Sigue estos pasos para evaluar las pruebas del modelo:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`)
    ORDER BY r2_score DESC;

    Los resultados son similares a los siguientes:

    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | 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 |
    |      ... |                ...  |                ... |                    ... |                   ... |                ... |                ... |
    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    El valor de r2_score para el modelo óptimo, que es la prueba 7, es 0.66521103056591446, que muestra una mejora significativa con respecto al modelo de referencia.

Puedes evaluar una prueba específica si especificas el argumento TRIAL_ID en la función ML.EVALUATE.

Para obtener más información acerca de la diferencia entre los objetivos ML.TRIAL_INFO y las métricas de evaluación ML.EVALUATE, consulta Funciones de entrega de modelos.

Usa el modelo ajustado para predecir propinas de viajes en taxi

Usa el modelo óptimo que devuelve el ajuste para predecir propinas de diferentes viajes en taxi. La función ML.PREDICT usa automáticamente el modelo óptimo, a menos que especifiques un argumento TRIAL_ID para seleccionar una prueba diferente. Las predicciones se muestran en la columna predicted_label.

Sigue estos pasos para obtener predicciones:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT *
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.hp_taxi_tip_model`,
        (
          SELECT
            *
          FROM
            `bqml_tutorial.taxi_tip_input`
          LIMIT 5
        ));

    Los resultados son similares a los siguientes:

    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    | 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 |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

  • Puedes borrar el proyecto que creaste.
  • De lo contrario, puedes mantener el proyecto y borrar el conjunto de datos.

Borra tu conjunto de datos

Borrar tu proyecto quita todos sus conjuntos de datos y tablas. Si prefieres volver a usar el proyecto, puedes borrar el conjunto de datos que creaste en este instructivo:

  1. Si es necesario, abre la página de BigQuery en la consola de Google Cloud.

    Ir a la página de BigQuery

  2. En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.

  3. En el lado derecho de la ventana, haz clic en Borrar conjunto de datos. Esta acción borra el conjunto de datos, la tabla y todos los datos.

  4. En el cuadro de diálogo Borrar conjunto de datos, escribe el nombre del conjunto de datos (bqml_tutorial) para confirmar el comando de borrado y, luego, haz clic en Borrar.

Borra tu proyecto

Para borrar el proyecto, haz lo siguiente:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Próximos pasos