1. Descripción general
BigQuery ML (BQML) permite a los usuarios crear y ejecutar modelos de aprendizaje automático en BigQuery con consultas en SQL. El objetivo es permitir que más personas tengan acceso al aprendizaje automático facultando a los profesionales de SQL para que creen modelos mediante sus herramientas existentes y quitando la necesidad de trasladar datos para aumentar la velocidad de desarrollo.
Qué compilarás
Usarás el conjunto de datos de muestra de Analytics 360 para crear un modelo que prediga si un visitante realizará una transacción.
Qué aprenderás
Crear, evaluar y usar modelos de aprendizaje automático en BigQuery
Requisitos
- Un navegador, como Chrome o Firefox
- Conocimiento básico de SQL o BigQuery
- Documentación de BQML
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.



Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.
Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza”, en la que se aconseja cómo cerrar recursos para que no se te facture más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
Abra BigQuery en Console
En Google Developers Console, haga clic en el ícono de menú que aparece en la parte superior izquierda de la pantalla.

Desplácese hacia abajo en el menú y haga clic en BigQuery:

Se abrirá BigQuery Console en una nueva pestaña del navegador:

Pero no encontrará nada aquí. Por suerte, existe una gran cantidad de conjuntos de datos públicos disponibles en BigQuery para que explore.
3. Crea un conjunto de datos
Para crear un conjunto de datos, haga clic en la flecha junto al nombre de su proyecto y seleccione Crear nuevo conjunto de datos.

A continuación, asigna el nombre bqml_codelab a tu conjunto de datos y haz clic en Aceptar.

4. Crea un modelo
Regresión logística para Analytics 360
Ahora, pasemos a nuestra tarea. A continuación, se explica cómo crear un modelo para predecir si un visitante realizará una transacción.
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170631' LIMIT 100000;
Aquí, utilizamos el sistema operativo del dispositivo del visitante, la información sobre si este es un dispositivo móvil, el país del visitante y la cantidad de vistas de página como criterio para determinar si se realizó una transacción.
En este caso, "codelab" es el nombre del conjunto de datos y "sample_model" es el nombre de nuestro modelo. El tipo de modelo especificado es regresión logística binaria. En este caso, label es lo que intentamos ajustar. Ten en cuenta que, si solo te interesa 1 columna, esta es una forma alternativa de configurar input_label_cols. También limitamos nuestros datos de entrenamiento a los recopilados entre el 1 de agosto de 2016 y el 31 de junio de 2017. Hacemos esto para guardar el último mes de datos para la "predicción". Además, limitaremos la cantidad de datos a 100,000 para ahorrar tiempo. Si no tienes prisa, puedes quitar la última línea.
La ejecución del comando CREATE MODEL crea un trabajo de consulta que se ejecutará de manera asíncrona para que pueda, por ejemplo, cerrar o actualizar la ventana de la IU de BigQuery.
Opcional: Información del modelo y estadísticas de entrenamiento
Si te interesa, puedes obtener información sobre el modelo haciendo clic en sample_model en el conjunto de datos bqml_codelab en la IU. En Detalles, deberías encontrar información básica sobre el modelo y las opciones de entrenamiento que se usan para producirlo. En Estadísticas de entrenamiento, deberías ver una tabla similar a la siguiente:

5. Evalúa el modelo
Evalúa nuestro modelo
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));
Si se usa con un modelo de regresión lineal, la consulta anterior muestra las siguientes columnas: mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score y explained_variance. Si se usa con un modelo de regresión logística, la consulta anterior devuelve las siguientes columnas: precision, recall, accuracy, f1_score, log_loss y roc_auc. Consulta el glosario de aprendizaje automático o ejecuta una búsqueda de Google para comprender cómo se calcula y qué significa cada una de estas métricas.
Concretamente, te darás cuenta de que las partes SELECT y FROM de la consulta son idénticas a la utilizada durante el entrenamiento. La parte WHERE refleja el cambio en el período y la parte FROM muestra que estamos llamando a ml.EVALUATE. Deberías ver una tabla similar a la siguiente:

6. Use el modelo
Predice compras por país
Aquí intentamos predecir la cantidad de transacciones realizadas por visitantes de cada país, ordenar los resultados y seleccionar los 10 países que realizaron más compras.
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10;
Observa que esta consulta es muy similar a la consulta de evaluación que demostramos en la sección anterior. En lugar de ml.EVALUATE, usamos ml.PREDICT y unimos la parte BQML de la consulta con comandos de SQL estándar. Concretamente, nos interesan el país y la suma de las compras de cada país, por lo que usamos SELECT, GROUP BY y ORDER BY. Aquí se usa LIMIT para garantizar que solo obtengamos los 10 primeros resultados. Deberías ver una tabla similar a la siguiente:

Predice compras por usuario
A continuación, se muestra otro ejemplo. Esta vez, intentaremos predecir la cantidad de transacciones realizadas por cada visitante, ordenar los resultados y seleccionar los 10 visitantes que más transacciones realizan.
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10;
Deberías ver una tabla similar a la siguiente:

7. ¡Felicitaciones!
Terminaste este codelab. ¿Buscas un desafío? Intenta crear un modelo de regresión lineal con BQML.
Temas abordados
- Crear un modelo de regresión logística binaria
- Evaluar el modelo
- Usar el modelo para hacer predicciones
Próximos pasos
- Para obtener más información sobre BQML, consulta la documentación.