En este instructivo, se presenta BigQuery ML a los analistas de datos.
BigQuery ML permite a los usuarios crear y ejecutar modelos de aprendizaje automático en BigQuery mediante consultas de SQL. También se presenta la ingeniería de atributos mediante el uso de la cláusula TRANSFORM
. Con la cláusula TRANSFORM
, puedes especificar todo el procesamiento previo durante la creación del modelo. El procesamiento previo se aplica automáticamente durante las fases de predicción y evaluación del aprendizaje automático.
En este instructivo, utilizarás la tabla de muestra de natality
para crear un modelo que predice el peso al nacer de un niño según el género, la duración del embarazo y la información demográfica de la madre. La tabla de muestra natality
contiene información sobre cada nacimiento en los Estados Unidos durante un período de 40 años.
Objetivos
En este instructivo, usarás las siguientes funciones:
- BigQuery ML para crear un modelo de regresión lineal con la declaración
CREATE MODEL
con la cláusulaTRANSFORM
- Las funciones de procesamiento previo
ML.FEATURE_CROSS
yML.QUANTILE_BUCKETIZE
- La función
ML.EVALUATE
para evaluar el modelo de AA - La función
ML.PREDICT
para hacer predicciones con el modelo de AA
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.
Paso uno: Crea tu 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.
Paso dos: Crea tu modelo
A continuación, debes crear un modelo de regresión lineal con la tabla de muestra de natalidad para BigQuery. Con la siguiente consulta de GoogleSQL se crea el modelo que debes usar para predecir el peso de un recién nacido.
#standardSQL CREATE MODEL `bqml_tutorial.natality_model` TRANSFORM(weight_pounds, is_male, gestation_weeks, ML.QUANTILE_BUCKETIZE(mother_age, 5) OVER() AS bucketized_mother_age, CAST(mother_race AS string) AS mother_race, ML.FEATURE_CROSS(STRUCT(is_male, CAST(mother_race AS STRING) AS mother_race)) is_male_mother_race) OPTIONS (model_type='linear_reg', input_label_cols=['weight_pounds']) AS SELECT * FROM `bigquery-public-data.samples.natality` WHERE weight_pounds IS NOT NULL AND RAND() < 0.001
Además de crear el modelo, ejecutar el comando CREATE MODEL
entrena el modelo que creas.
Detalles de la consulta
La cláusula CREATE MODEL
se usa para crear y entrenar el modelo llamado bqml_tutorial.natality_model
.
La cláusula OPTIONS(model_type='linear_reg', input_label_cols=['weight_pounds'])
indica que estás creando un modelo de regresión lineal. Una regresión lineal es un tipo de modelo de regresión que genera un valor continuo a partir de una combinación lineal de atributos de entrada. La columna weight_pounds
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
:
weight_pounds
: es el peso, en libras, del niño (FLOAT64).is_male
: es el sexo del niño. VERDADERO si el niño es hombre, FALSO si es mujer (BOOL).gestation_weeks
: es la cantidad de semanas de embarazo (INT64).mother_age
: es la edad de la madre al dar a luz (INT64).mother_race
: es el origen étnico de la madre (INT64). Este número entero es el mismo que el valorchild_race
en el esquema de la tabla. Para obligar a BigQuery ML a tratarmother_race
como un atributo no numérico, con cada valor distinto que representa una categoría diferente, la consulta conviertemother_race
en una STRING. Esto es importante porque es más probable que el origen étnico tenga más significado como categoría que un número entero, que tiene orden y escala.
Mediante la cláusula TRANSFORM
, los atributos originales se procesan antes para alimentar en el entrenamiento. Estas son las columnas generadas:
weight_pounds
: se aplicó como está, sin ningún cambio.is_male
: se aplicó al feed en el entrenamiento.gestation_weeks
: se aplicó al feed en el entrenamiento.bucketized_mother_age
: se genera a partir demother_age
mediante el agrupamientomother_age
basado en cuantiles con la función analíticaML.QUANTILE_BUCKETIZE()
.mother_race
: formato de string delmother_race
original.is_male_mother_race
: generado al cruzaris_male
ymother_race
mediante el uso de la funciónML.FEATURE_CROSS
.
La declaración SELECT
de la consulta proporciona las columnas que puedes usar en la cláusula TRANSFORM
. Sin embargo, no necesitas usar todas las columnas en la cláusula TRANSFORM
. Como resultado, puedes hacer tanto la selección de atributos como el preprocesamiento dentro de la cláusula TRANSFORM
.
La cláusula FROM
(bigquery-public-data.samples.natality
) indica que estás consultando la tabla de muestra de natalidad en el conjunto de datos de muestras.
Este conjunto de datos está en el proyecto bigquery-public-data
.
La WHERE
(WHERE weight_pounds IS NOT NULL AND RAND() < 0.001
) excluye las filas donde el peso es NULL y usa la función RAND
para dibujar una muestra aleatoria de los datos.
Ejecuta la consulta CREATE MODEL
A fin de ejecutar la consulta CREATE MODEL
para crear y entrenar tu modelo, sigue estos pasos:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL CREATE MODEL `bqml_tutorial.natality_model` TRANSFORM(weight_pounds, is_male, gestation_weeks, ML.QUANTILE_BUCKETIZE(mother_age, 5) OVER() AS bucketized_mother_age, CAST(mother_race AS string) AS mother_race, ML.FEATURE_CROSS(STRUCT(is_male, CAST(mother_race AS STRING) AS mother_race)) is_male_mother_race) OPTIONS (model_type='linear_reg', input_label_cols=['weight_pounds']) AS SELECT * FROM `bigquery-public-data.samples.natality` WHERE weight_pounds IS NOT NULL AND RAND() < 0.001
Haz clic en Ejecutar.
La consulta toma unos 30 segundos en completarse, después de lo cual tu modelo (
natality_model
) aparece en el panel de navegación. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear una tabla, no se muestran los resultados.
Paso tres (opcional): Obtén estadísticas de entrenamiento
Para ver los resultados del entrenamiento de modelos, puedes usar la función ML.TRAINING_INFO
o puedes ver las estadísticas en la consola de Google Cloud En este instructivo, usarás la consola de Google Cloud.
Un algoritmo de aprendizaje automático examina muchos ejemplos y trata de encontrar un modelo que minimice la pérdida. Este proceso se llama minimización del riesgo empírico.
La pérdida es la penalización de una mala predicción, un número que indica qué tan mala fue la predicción del modelo en un ejemplo individual. Si la predicción del modelo es perfecta, la pérdida es cero; de lo contrario, es mayor. El objetivo de entrenar a un modelo es encontrar un conjunto de pesos y ordenadas al origen que tengan, en promedio, una pérdida baja en todos los ejemplos.
Para ver las estadísticas de entrenamiento de modelos que se generaron cuando ejecutaste la consulta CREATE MODEL
, sigue estos pasos:
En el panel de navegación de la consola de Google Cloud, en la sección Recursos, expande project-name > bqml_tutorial y, luego, haz clic en natality_model.
Haz clic en la pestaña Entrenamiento y en Ver como, selecciona la opción Tabla. Los resultados deberían verse así:
+-----------+--------------------+----------------------+--------------------+ | Iteration | Training data loss | Evaluation data loss | Duration (seconds) | +-----------+--------------------+----------------------+--------------------+ | 0 | 1.6640 | 1.7352 | 6.27 | +-----------+--------------------+----------------------+--------------------+
La columna Training Data Loss (Pérdida de datos de entrenamiento) representa la métrica de pérdida calculada después de que se entrena el modelo en el conjunto de datos de entrenamiento. Debido a que realizaste una regresión lineal, esta columna es el error cuadrático medio.
La columna Pérdida de datos de evaluación (Evaluation Data Loss) es la misma métrica de pérdida calculada en el conjunto de datos de exclusión (datos que se usan a fin de validar el modelo y, por lo tanto, no se incluyen en el entrenamiento). La estrategia de optimización predeterminada utilizada para el entrenamiento es "normal_equation", por lo que solo se requiere una iteración con el fin de converger al modelo final.
Para obtener más información sobre la opción
optimize_strategy
, consulta la declaraciónCREATE MODEL
.Para obtener más información sobre la función
ML.TRAINING_INFO
y la opción de entrenamiento "optimize_strategy", consulta la referencia de sintaxis de BigQuery ML.
Paso cuatro: Evalúa tu modelo
Después de crear tu modelo, evalúa el rendimiento del clasificador mediante la función ML.EVALUATE
. La función ML.EVALUATE
evalúa los valores previstos frente a los datos reales.
La consulta que se usa para evaluar el modelo es la siguiente:
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.natality_model`, ( SELECT * FROM `bigquery-public-data.samples.natality` WHERE weight_pounds IS NOT NULL))
Detalles de la consulta
La declaración SELECT
superior recupera las columnas de su modelo.
La cláusula FROM
usa la función ML.EVALUATE
en tu modelo: bqml_tutorial.natality_model
.
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 la cláusula TRANSFORM
se usa en el entrenamiento, no es necesario especificar las transformaciones ni las columnas específicas. Se restablecen automáticamente.
La cláusula WHERE
(WHERE weight_pounds IS NOT NULL
) excluye las filas en las que peso es NULL.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.natality_model`)
Ejecuta la consulta ML.EVALUATE
Para ejecutar la consulta ML.EVALUATE
que evalúa el modelo, completa los siguientes pasos:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.natality_model`, ( SELECT * FROM `bigquery-public-data.samples.natality` WHERE weight_pounds IS NOT NULL))
Para establecer la ubicación de procesamiento, en la lista desplegable settings_applicationsMore (Más), haz clic en Query settings (Configuración de consulta) (opcional). En Processing location (Ubicación de procesamiento), selecciona United States (US) (Estados Unidos [EE.UU]). Este paso es opcional porque la ubicación de procesamiento se detecta automáticamente en función de la ubicación del conjunto de datos.
Haz clic en Ejecutar.
Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse así:
+---------------------+--------------------+------------------------+---------------------+---------------------+----------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | mean_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+---------------------+---------------------+----------------------+ | 0.9566580179970666 | 1.6756289722442677 | 0.034241471462096516 | 0.7385590721661188 | 0.04650972930257946 | 0.046516832131241026 | +---------------------+--------------------+------------------------+---------------------+---------------------+----------------------+
Debido a que realizaste una regresión lineal, los resultados incluyen las siguientes columnas:
mean_absolute_error
mean_squared_error
mean_squared_log_error
median_absolute_error
r2_score
explained_variance
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 0
indica que el modelo no explica nada de la variabilidad de los datos de respuesta alrededor de la media. Un valor 1
indica que el modelo explica toda la variabilidad de los datos de respuesta alrededor de la media.
Paso cinco: Usa tu modelo para predecir resultados
Ahora que ya evaluaste tu modelo, el siguiente paso es usarlo para predecir un resultado. Puedes usar tu modelo para predecir el peso al nacer de todos los bebés nacidos en Wyoming.
Esta es la consulta usada para predecir el resultado:
#standardSQL SELECT predicted_weight_pounds FROM ML.PREDICT(MODEL `bqml_tutorial.natality_model`, ( SELECT * FROM `bigquery-public-data.samples.natality` WHERE state = "WY"))
Detalles de la consulta
La primera declaración SELECT
recupera la columna predicted_weight_pounds
.
Esta columna se genera mediante la función ML.PREDICT
. Cuando se usa la función ML.PREDICT
, el nombre de la columna de salida para el modelo es predicted_label_column_name
. Para los modelos de regresión lineal, predicted_label
es el valor estimado de label
. Para los modelos de regresión logística, predicted_label
es una de las dos etiquetas de entrada, según la etiqueta que tenga la mayor probabilidad prevista.
La función ML.PREDICT
se usa para predecir resultados con tu modelo: bqml_tutorial.natality_model
.
La declaración SELECT
anidada de esta consulta y la cláusula FROM
son las mismas que las de la consulta CREATE MODEL
. Ten en cuenta que no necesariamente debes pasar todas las columnas como en el entrenamiento, y solo se requieren las que se usan en la cláusula TRANSFORM
. De manera similar a ML.EVALUATE
, las transformaciones dentro de TRANSFORM
se restablecen automáticamente.
La cláusula WHERE
(WHERE state = "WY"
) indica que estás limitando la predicción al estado de Wyoming.
Ejecuta la consulta ML.PREDICT
Para ejecutar la consulta que usa el modelo a fin de predecir un resultado, haga lo siguiente:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL SELECT predicted_weight_pounds FROM ML.PREDICT(MODEL `bqml_tutorial.natality_model`, ( SELECT * FROM `bigquery-public-data.samples.natality` WHERE state = "WY"))
Para establecer la ubicación de procesamiento, en la lista desplegable settings_applicationsMore (Más), haz clic en Query settings (Configuración de consulta) (opcional). En Processing location (Ubicación de procesamiento), selecciona United States (US) (Estados Unidos [EE.UU]). Este paso es opcional porque la ubicación de procesamiento se detecta automáticamente en función de la ubicación del conjunto de datos.
Haz clic en Ejecutar.
Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse así:
+----------------------------+ | predicted_weight_pounds | +----------------------------+ | 7.735962399307027 | +----------------------------+ | 7.728855793480761 | +----------------------------+ | 7.383850250400428 | +----------------------------+ | 7.4132677633242565 | +----------------------------+ | 7.734971309702814 | +----------------------------+
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, 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:
- 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.