Primeros pasos con BigQuery ML

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

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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.

select-bq_0.png

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

select-bq.png

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

8b0218390329e8cf.png

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.

4f51bf57291a59db.png

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

63e32478a5652fbc.png

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:

b8bd9548a0d89165.png

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:

1c7779f6028730cc.png

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:

e639f7a409741dcb.png

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:

2be1d8fa96e10178.png

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.