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 democratizar el aprendizaje automático permitiéndoles a los profesionales de SQL que compilen modelos con sus herramientas existentes y aumenten la velocidad de desarrollo al eliminar la necesidad de mover datos.
Qué compilarás
Usarás el conjunto de datos de muestra de Analytics 360 para crear un modelo que prediga si un visitante hará una transacción.
Qué aprenderás
Cómo crear, evaluar y utilizar modelos de aprendizaje automático en BigQuery
Requisitos
- Un navegador, como Chrome o Firefox
- Conocimiento básico de SQL o de 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 no incurrir en facturación más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de$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 ok.
4. Crea un modelo
Regresión logística para Analytics 360
Ahora, avancemos a nuestra tarea. Así es cómo se debe crear un modelo para predecir si un visitante hará 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;
En este caso, usamos el sistema operativo del dispositivo del visitante, ya sea que se trate de un dispositivo móvil, el país del visitante y la cantidad de páginas vistas como criterios para determinar si se ha realizado 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 limitaremos nuestros datos de entrenamiento a los recopilados desde el 1 de agosto de 2016 hasta el 31 de junio de 2017. Haremos esto con el objetivo de guardar el último mes de datos para la “predicción”. Además, tenemos un límite de 100,000 datos para ahorrarnos tiempo. Si no tienes prisa, puedes eliminar 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 puedas, 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 opciones de entrenamiento que se usan para producir el modelo. En Estadísticas de entrenamiento, deberías ver una tabla similar a la siguiente:
5. Evalúe 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 la utilizas con un modelo de regresión logística, la consulta anterior muestra 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.
En concreto, te darás cuenta de que las partes SELECT
y FROM
de la consulta son idénticas a las usadas 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
aquí y unimos la parte de BQML de la consulta con comandos de SQL estándar. En concreto, 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 resultados principales. Deberías ver una tabla similar a la siguiente:
Predice compras por usuario
A continuación, se muestra otro ejemplo. Esta vez intentamos predecir la cantidad de transacciones que realiza 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!
Completaste 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, consulte la documentación.