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 devuelve la prueba con 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.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.
Console
En la consola de Google Cloud , ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.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).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el comando bq mk
con la marca --location
. Para obtener una lista completa de los parámetros posibles, consulta la
referencia del
comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos establecida enUS
y una descripción deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
En lugar de usar la marca
--dataset
, el comando usa el acceso directo-d
. Si omites-d
y--dataset
, el comando crea un conjunto de datos de manera predeterminada.Confirma que se haya creado el conjunto de datos:
bq ls
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.
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:
En la consola de Google Cloud , ve a la página BigQuery.
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 entrénalo con los datos de la tabla taxi_tip_input
.
Sigue estos pasos para crear el modelo:
En la consola de Google Cloud , ve a la página BigQuery.
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 alrededor de 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 clasificaciones de contenido previstas que muestra el modelo en comparación con las métricas de evaluación calculadas durante el entrenamiento de modelos.
Sigue estos pasos para evaluar el modelo:
En la consola de Google Cloud , ve a la página BigQuery.
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 un ajuste deficiente a los datos. 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 entrénalo con los datos de la tabla taxi_tip_input
.
En la instrucción CREATE MODEL
, se usan las siguientes opciones de ajuste de hiperparámetros:
- La opción
NUM_TRIALS
para establecer la cantidad de intentos en veinte - La opción
MAX_PARALLEL_TRIALS
para ejecutar dos pruebas en cada trabajo de entrenamiento, para 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 las diferentes pruebas La regularización L1 quita los atributos irrelevantes del modelo, lo que ayuda a evitar el sobreajuste.
Las demás 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:
En la consola de Google Cloud , ve a la página BigQuery.
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
Obtén información sobre todas las pruebas, incluidos sus valores de hiperparámetros, objetivos y estado, con la función ML.TRIAL_INFO
. Esta función también devuelve información sobre qué prueba tiene el mejor rendimiento, según esta información.
Sigue estos pasos para obtener información sobre la prueba:
En la consola de Google Cloud , ve a la página BigQuery.
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 devolvió 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 devuelve el modelo en comparación con las métricas de evaluación calculadas durante el entrenamiento para todas las pruebas.
Sigue estos pasos para evaluar las pruebas del modelo:
En la consola de Google Cloud , ve a la página BigQuery.
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, es0.66521103056591446
, lo que muestra una mejora significativa en comparación con el 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 devolvió el ajuste para predecir las propinas de diferentes viajes en taxi. La función ML.PREDICT
usa automáticamente el modelo óptimo, a menos que selecciones una prueba diferente especificando el argumento TRIAL_ID
. Las predicciones se muestran en la columna predicted_label
.
Sigue estos pasos para obtener predicciones:
En la consola de Google Cloud , ve a la página BigQuery.
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 | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+