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
- 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.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery se habilita automáticamente en proyectos nuevos.
Para activar BigQuery en un proyecto existente, ve a
Enable the BigQuery 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:
En la consola de Google Cloud, ve a la página de 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).
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.
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 de 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 entrena en 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 de 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 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:
En la consola de Google Cloud, ve a la página de 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 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:
En la consola de Google Cloud, ve a la página de 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
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:
En la consola de Google Cloud, ve a la página de 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 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:
En la consola de Google Cloud, ve a la página de 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
, 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:
En la consola de Google Cloud, ve a la página de 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 | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
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:
Si es necesario, abre la página de BigQuery en la consola de Google Cloud.
En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.
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.
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:
- 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.
Próximos pasos
- Para obtener más información sobre el aprendizaje automático, consulta el Curso intensivo de aprendizaje automático.
- Para obtener una descripción general de BigQuery ML, consulta Introducción a BigQuery ML.
- Para obtener más información sobre la consola de Google Cloud, consulta Usa la consola de Google Cloud.