En este instructivo, aprenderás a usar la
cláusula TRANSFORM
de la sentencia CREATE MODEL para realizar ingeniería de atributos al mismo tiempo
que creas y entrenas un modelo. Con la cláusula TRANSFORM, puedes
especificar una o más funciones de procesamiento previo
para transformar los datos de entrada que usas para entrenar el modelo. El procesamiento previo que aplicas al modelo se aplica de forma automática cuando usas el modelo con las funciones ML.EVALUATE y ML.PREDICT.
En este instructivo, se usa el conjunto de datos público
bigquery-public-data.ml_datasets.penguin.
Objetivos
En este instructivo, se te guiará para completar las siguientes tareas:
- Crear un modelo de regresión lineal para predecir el tipo de llamada de servicio con la
sentencia
CREATE MODELDentro de la declaraciónCREATE MODEL, usa las funcionesML.QUANTILE_BUCKETIZEyML.FEATURE_CROSSpara procesar los datos previamente. - Evaluar el modelo con la
función
ML.EVALUATE - Obtener predicciones del modelo con la
función
ML.PREDICT
Costos
En este instructivo, se usan componentes facturables de Google Cloud, incluidos los siguientes:
- 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
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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
Habilita la API de BigQuery si aún no está habilitada.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.
Crea un conjunto de datos
Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:
Console
En la consola de Google Cloud , ve a la página BigQuery.
En el panel de la izquierda, haz clic en Explorar:

Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.
En Explorador, expande tu proyecto y, luego, haz clic en Conjuntos de datos.
En la página Conjuntos de datos, haz clic en Crear conjunto de datos.
En el panel Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial.En Ubicación de los datos, selecciona EE.UU..
Deja el resto de la configuración predeterminada como está.
Haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el
comando bq mk --dataset.
Crea un conjunto de datos llamado
bqml_tutorialcon la ubicación de los datos establecida enUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
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" } }
Crea el modelo
Crea un modelo de regresión lineal para predecir el peso de los pingüinos y entrénalo con
la tabla de muestra penguins.
La cláusula OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) indica que estás creando un modelo de regresión lineal. Un modelo de regresión lineal genera un valor continuo a partir de una combinación lineal de atributos de entrada. La columna body_mass_g es la columna de la etiqueta de entrada. Para los modelos de regresión lineal, la columna de la etiqueta debe tener un valor real (es decir, los valores de la columna deben ser números reales).
La cláusula TRANSFORM de esta consulta utiliza las siguientes columnas de la declaración SELECT:
body_mass_g: Se usa en el entrenamiento sin ningún cambio.culmen_depth_mm: Se usa en el entrenamiento sin ningún cambio.flipper_length_mm: Se usa en el entrenamiento sin ningún cambio.bucketized_culmen_length: se genera a partir deculmen_length_mmmediante el agrupamientoculmen_length_mmbasado en cuantiles con la función analíticaML.QUANTILE_BUCKETIZE().culmen_length_mm: Es el valorculmen_length_mmoriginal, convertido en un valorSTRINGy usado en el entrenamiento.species_sex: generado al cruzarspeciesysexmediante el uso de la funciónML.FEATURE_CROSS.
No es necesario usar todas las columnas de la tabla de entrenamiento
en la cláusula TRANSFORM.
La cláusula WHERE (WHERE body_mass_g IS NOT NULL AND RAND() < 0.2)
excluye las filas en las que el peso de los pingüinos es NULL y usa la función RAND
para dibujar una muestra aleatoria de los datos.
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.penguin_transform` TRANSFORM( body_mass_g, culmen_depth_mm, flipper_length_mm, ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length, CAST(culmen_length_mm AS string) AS culmen_length_mm, ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex) OPTIONS ( model_type = 'linear_reg', input_label_cols = ['body_mass_g']) AS SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL AND RAND() < 0.2;
La consulta tarda unos 15 minutos en completarse, después de lo cual el modelo
penguin_transformaparece en el panel Explorador. Debido a que en la consulta se usa una declaraciónCREATE MODELpara crear un modelo, no se muestran los resultados.
Evalúa el modelo
Evalúa el rendimiento del modelo con la función ML.EVALUATE.
La función ML.EVALUATE evalúa los pesos previstos de los pingüinos que devuelve
el modelo en comparación con los pesos reales de los pingüinos de los datos de entrenamiento.
La declaración SELECT anidada de esta consulta y la cláusula FROM son las mismas que las de la consulta CREATE MODEL. Debido a que usaste la cláusula TRANSFORM cuando
creaste el modelo, no es necesario que vuelvas a especificar las columnas y las transformaciones
en la función ML.EVALUATE. La función los recupera automáticamente
del modelo.
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.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL ));
Los resultados debería ser similar al siguiente:
+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 64.21134350607677 | 13016.433317859564 | 7.140935762696211E-4 | 15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
Una métrica importante en los resultados de la evaluación es la puntuación R2. La puntuación R2 es una medida estadística que determina si las predicciones de regresión lineal se aproximan a los datos reales. Un valor de
0indica que el modelo no explica nada de la variabilidad de los datos de respuesta alrededor de la media. Un valor1indica que el modelo explica toda la variabilidad de los datos de respuesta alrededor de la media.Para obtener más información sobre el resultado de la función
ML.EVALUATE, consulta Resultado.También puedes llamar a
ML.EVALUATEsin proporcionar los datos de entrada. Usará las métricas de evaluación calculadas durante el entrenamiento.
Usa el modelo para predecir el peso de los pingüinos
Usa el modelo con la función ML.PREDICT para predecir el peso de los pingüinos
machos.
La función ML.PREDICT genera el valor previsto en la columna predicted_label_column_name, en este caso, predicted_body_mass_g.
Cuando usas la función ML.PREDICT, no es necesario que pases todas las columnas que se usaron en el entrenamiento de modelos. Solo se requieren las columnas que usaste en la
cláusula TRANSFORM. Al igual que ML.EVALUATE, la función ML.PREDICT
recupera automáticamente las columnas y transformaciones de TRANSFORM
del modelo.
Sigue estos pasos para obtener predicciones 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 predicted_body_mass_g FROM ML.PREDICT( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE sex = 'MALE' ));
Los resultados debería ser similar al siguiente:
+-----------------------+ | predicted_body_mass_g | +-----------------------+ | 2810.2868541725757 | +-----------------------+ | 3813.6574220842676 | +-----------------------+ | 4098.844698262214 | +-----------------------+ | 4256.587135004173 | +-----------------------+ | 3008.393497302691 | +-----------------------+ | ... | +-----------------------+
Realiza una limpieza
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 deGoogle 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, ingresa el nombre del conjunto de datos (
bqml_tutorial) y, luego, haz clic en Borrar para confirmar el comando de borrado.
Borra tu proyecto
Para borrar el proyecto, haz lo siguiente:
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- 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 .