Instrucciones y requisitos de configuración del lab
Protege tu cuenta y tu progreso. Usa siempre una ventana de navegador privada y las credenciales del lab para ejecutarlo.

Predice compras de visitantes con BigQuery ML

Lab 1 hora 10 minutos universal_currency_alt 5 créditos show_chart Introductorio
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Este contenido aún no está optimizado para dispositivos móviles.
Para obtener la mejor experiencia, visítanos en una computadora de escritorio con un vínculo que te enviaremos por correo electrónico.

Descripción general

BigQuery ML (BigQuery Machine Learning) es una función de BigQuery con la que los analistas de datos pueden crear, entrenar y evaluar conjuntos de datos, además de hacer predicciones, con modelos de aprendizaje automático y programación mínima.

El conjunto de datos de comercio electrónico de muestra de Google Analytics que tiene millones de registros de Google Analytics para Google Merchandise Store está cargado en BigQuery. En este lab, usarás estos datos para ejecutar algunas consultas típicas que las empresas querrían conocer sobre los hábitos de compra de sus clientes.

Objetivos

En este lab, aprenderás a realizar las siguientes tareas:

  • Utilizar BigQuery para buscar conjuntos de datos públicos
  • Consultar y explorar el conjunto de datos de comercio electrónico
  • Crear un conjunto de datos de entrenamiento y evaluación para usar en la predicción por lotes
  • Crear un modelo de clasificación (regresión logística) en BigQuery ML
  • Evaluar el rendimiento de tu modelo de aprendizaje automático
  • Predecir y clasificar la probabilidad de que un visitante realice una compra

Configura tus entornos

Configuración del lab

En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.

  1. Accede a Qwiklabs desde una ventana de incógnito.

  2. Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
    No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.

  3. Cuando esté listo, haga clic en Comenzar lab.

  4. Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.

  5. Haga clic en Abrir Google Console.

  6. Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
    Si usa otras credenciales, se generarán errores o incurrirá en cargos.

  7. Acepta las condiciones y omite la página de recursos de recuperación.

Abra BigQuery en Console

  1. En la consola de Google Cloud, seleccione elmenú de navegación > BigQuery.

Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en la consola de Cloud, Contiene un vínculo a la guía de inicio rápido y enumera las actualizaciones de la IU.

  1. Haga clic en Listo.

Accede al conjunto de datos del curso

Una vez que BigQuery esté abierto, abre el proyecto data-to-insights en una nueva pestaña del navegador para incorporar este proyecto en tu panel de proyectos de BigQuery.

Las definiciones de los campos del conjunto de datos de comercio electrónico de data-to-insights se encuentran en la página [UA] Esquema de BigQuery Export. Mantén el vínculo abierto en una nueva pestaña como referencia.

Tarea 1: Explora los datos de comercio electrónico

Situación: Tu equipo de analistas de datos exportó a BigQuery los registros de Google Analytics de un sitio web de comercio electrónico y creó una nueva tabla con todos los datos de comercio electrónico sin procesar de sesiones de visitantes para que los explores. Con estos datos, intentarás responder algunas preguntas.

Pregunta: Del total de usuarios que visitaron nuestro sitio web, ¿qué porcentaje realizó una compra?

  1. Haz clic en el Editor de consultas.
  2. Agrega lo siguiente en el campo de consulta nueva:
#standardSQL WITH visitors AS( SELECT COUNT(DISTINCT fullVisitorId) AS total_visitors FROM `data-to-insights.ecommerce.web_analytics` ), purchasers AS( SELECT COUNT(DISTINCT fullVisitorId) AS total_purchasers FROM `data-to-insights.ecommerce.web_analytics` WHERE totals.transactions IS NOT NULL ) SELECT total_visitors, total_purchasers, total_purchasers / total_visitors AS conversion_rate FROM visitors, purchasers
  1. Haz clic en Ejecutar.

El resultado: 2.69%

Pregunta: ¿Cuáles son los 5 productos más vendidos?

  1. Agrega la siguiente consulta en el EDITOR de consultas; luego, haz clic en Ejecutar:
SELECT p.v2ProductName, p.v2ProductCategory, SUM(p.productQuantity) AS units_sold, ROUND(SUM(p.localProductRevenue/1000000),2) AS revenue FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h, UNNEST(h.product) AS p GROUP BY 1, 2 ORDER BY revenue DESC LIMIT 5;

Este es el resultado:

Fila v2ProductName v2ProductCategory units_sold revenue
1 Nest® Learning Thermostat 3rd Gen-USA - Stainless Steel Nest-USA 17651 870976.95
2 Nest® Cam Outdoor Security Camera - USA Nest-USA 16930 684034.55
3 Nest® Cam Indoor Security Camera - USA Nest-USA 14155 548104.47
4 Nest® Protect Smoke + CO White Wired Alarm-USA Nest-USA 6394 178937.6
5 Nest® Protect Smoke + CO White Battery Alarm-USA Nest-USA 6340 178572.4

Pregunta: ¿Cuántos visitantes realizaron compras en visitas posteriores al sitio web?

  1. Ejecuta la siguiente consulta para averiguarlo:
# visitors who bought on a return visit (could have bought on first as well WITH all_visitor_stats AS ( SELECT fullvisitorid, # 741,721 unique visitors IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) SELECT COUNT(DISTINCT fullvisitorid) AS total_visitors, will_buy_on_return_visit FROM all_visitor_stats GROUP BY will_buy_on_return_visit

Estos son los resultados:

Fila total_visitors will_buy_on_return_visit
1 729848 0
2 11873 1

Si analizas los resultados, puedes ver que (11873 / 729848) = 1.6% del total de visitantes regresarán y comprarán desde el sitio web. Esto incluye el subconjunto de visitantes que compraron en su primera sesión y, luego, regresaron y compraron nuevamente.

Este comportamiento es muy común con los artículos de lujo, ya que el cliente necesita llevar a cabo una investigación y comparación considerables por adelantado antes de decidirse (piensa en las compras de automóviles), pero, en menor medida, también ocurre con los productos de este sitio (camisetas, accesorios, etcétera).

En el mundo del marketing en línea, identificar a estos futuros clientes y aplicar estrategias de marketing enfocadas a ellos según las características de su primera visita aumentará los porcentajes de conversiones y reducirá la salida a sitios de la competencia.

Tarea 2: Selecciona atributos y crea tu conjunto de datos de entrenamiento

Ahora crearás un modelo de aprendizaje automático en BigQuery para predecir si es probable que un usuario nuevo realice una compra en el futuro. La identificación de estos usuarios de gran valor puede ayudar a que el equipo de marketing segmente las promociones especiales y campañas publicitarias en función de ellos.

Google Analytics capta una amplia variedad de dimensiones y mediciones sobre la visita de un usuario a este sitio web de comercio electrónico. Explora la lista completa de campos en la Guía del [UA] Esquema de BigQuery Export y, luego, obtén una vista previa del conjunto de datos de demostración para encontrar atributos útiles que ayudarán a un modelo de aprendizaje automático a comprender la relación entre los datos de la primera visita de un usuario a tu sitio web y si ese visitante volverá y realizará una compra.

Tu equipo decide probar si estos dos campos son entradas adecuadas para tu modelo de clasificación:

  • totals.bounces (si el visitante abandonó el sitio web inmediatamente)
  • totals.timeOnSite (cuánto tiempo estuvo el visitante en nuestro sitio web)

El aprendizaje automático será tan bueno como los datos de entrenamiento que se incorporan. Si no hay suficiente información para que el modelo determine y aprenda la relación entre los atributos de entrada y la etiqueta (en este caso, si el visitante realizó una compra en una visita posterior), entonces no tendrás un modelo preciso. Si bien entrenar un modelo solo a partir de estos dos campos es un comienzo, verás si son lo suficientemente buenos como para producir un modelo preciso.

  • En el EDITOR de consultas, escribe la siguiente consulta y, luego, haz clic en Ejecutar.
SELECT * EXCEPT(fullVisitorId) FROM # features (SELECT fullVisitorId, IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site FROM `data-to-insights.ecommerce.web_analytics` WHERE totals.newVisits = 1) JOIN (SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid) USING (fullVisitorId) ORDER BY time_on_site DESC LIMIT 10;

Resultados:

Fila bounces time_on_site will_buy_on_return_visit
1 0 15047 0
2 0 12136 0
3 0 11201 0
4 0 10046 0
5 0 9974 0
6 0 9564 0
7 0 9520 0
8 0 9275 1
9 0 9138 0
10 0 8872 0

Discusión: will_buy_on_return_visit no se conoce después de la primera visita. Nuevamente, tu predicción se basa en un subconjunto de usuarios que regresaron a tu sitio web y compraron. Debido a que no conoces el futuro en el momento de la predicción, no puedes decir con certeza si un nuevo visitante regresará y comprará. El valor de compilar un modelo de AA es calcular la probabilidad de compras futuras en función de los datos obtenidos de su primera sesión.

Pregunta: En cuanto a los resultados iniciales de los datos, ¿crees que time_on_site y bounces serán buenos indicadores de si el usuario regresará y comprará o no?

Respuesta: A menudo, es demasiado pronto para saber antes de entrenar y evaluar el modelo, pero a primera vista, de los 10 time_on_site principales, solo 1 cliente regresó a comprar, lo cual no es muy prometedor. Veamos qué tan bien funciona el modelo.

Tarea 3: Crea un conjunto de datos de BigQuery para almacenar modelos

A continuación, crea un nuevo conjunto de datos de BigQuery que también almacenará tus modelos de AA.

  1. En el panel izquierdo, haz clic en el nombre de tu proyecto, luego en el ícono de Ver acciones (tres puntos) y, por último, selecciona Crear conjunto de datos.

La opción Crear conjunto de datos

  1. En el diálogo Crear conjunto de datos, realiza lo siguiente:
  • En ID de conjunto de datos, escribe ecommerce.
  • Deja los demás valores en su configuración predeterminada.
  1. Haz clic en Crear conjunto de datos.

Tarea 4: Selecciona un tipo de modelo de BigQuery ML y especifica las opciones

Ahora que ya seleccionaste tus atributos iniciales, tienes todo listo para crear tu primer modelo de AA en BigQuery.

Hay dos tipos de modelos para elegir:

Modelo Tipo de modelo Tipo de datos de etiqueta Ejemplo
Previsión linear_reg Valor numérico (generalmente un número entero o punto flotante) Previsión de cifras de ventas para el próximo año según los datos históricos de ventas
Clasificación logistic_reg 0 o 1 para clasificación binaria Clasificación de un correo electrónico como spam o no spam según el contexto
Nota: Existen muchos tipos de modelos adicionales que se usan en el aprendizaje automático (como las redes neuronales y los árboles de decisión) y que están disponibles en bibliotecas como TensorFlow. En el momento de la redacción de este lab, BigQuery ML es compatible con los dos mencionados anteriormente.

  1. Ingresa la siguiente consulta para crear un modelo y especificar sus opciones:
CREATE OR REPLACE MODEL `ecommerce.classification_model` OPTIONS ( model_type='logistic_reg', labels = ['will_buy_on_return_visit'] ) AS #standardSQL SELECT * EXCEPT(fullVisitorId) FROM # features (SELECT fullVisitorId, IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site FROM `data-to-insights.ecommerce.web_analytics` WHERE totals.newVisits = 1 AND date BETWEEN '20160801' AND '20170430') # train on first 9 months JOIN (SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid) USING (fullVisitorId) ;
  1. Luego, haz clic en Ejecutar para entrenar tu modelo.

Espera a que el modelo se entrene (de 5 a 10 minutos).

Nota: Durante el entrenamiento, no puedes ingresar en el modelo todos los datos disponibles, ya que debes reservar algunos datos aún no vistos para la evaluación y prueba del modelo. Para lograr esto, agrega una condición de cláusula WHERE para filtrar los datos de sesión correspondientes a los primeros 9 meses de tu conjunto de datos de 12 meses y realizar el entrenamiento solo en función de ellos.

Luego del entrenamiento del modelo, verás el mensaje “This statement created a new model named qwiklabs-gcp-xxxxxxxxx:ecommerce.classification_model”.

  1. Haz clic en Ir al modelo.

Observa el conjunto de datos de comercio electrónico y confirma que aparezca classification_model.

A continuación, evaluarás el rendimiento del modelo en comparación con nuevos datos de evaluación no vistos.

Tarea 5: Evalúa el rendimiento del modelo de clasificación

Selecciona tus criterios de rendimiento

Para los problemas de clasificación en AA, lo mejor es minimizar la tasa de falsos positivos (predecir que el usuario regresará y comprará, y no lo hace) y maximizar la tasa de verdaderos positivos (predecir que el usuario regresará y comprará, y sí lo hace).

Esta relación se visualiza con una curva ROC (característica operativa del receptor) como la que se muestra aquí, en la que intentas maximizar el área bajo la curva o AUC:

Diagrama de comparación de curvas ROC

En BigQuery ML, roc_auc es simplemente un campo que puedes usar para consultas cuando evalúas tu modelo de AA entrenado.

  • Ahora que ya se completó el entrenamiento, puedes evaluar el rendimiento del modelo si ejecutas esta consulta con el comando ML.EVALUATE:
SELECT roc_auc, CASE WHEN roc_auc > .9 THEN 'good' WHEN roc_auc > .8 THEN 'fair' WHEN roc_auc > .7 THEN 'not great' ELSE 'poor' END AS model_quality FROM ML.EVALUATE(MODEL ecommerce.classification_model, ( SELECT * EXCEPT(fullVisitorId) FROM # features (SELECT fullVisitorId, IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site FROM `data-to-insights.ecommerce.web_analytics` WHERE totals.newVisits = 1 AND date BETWEEN '20170501' AND '20170630') # eval on 2 months JOIN (SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid) USING (fullVisitorId) ));

Deberías ver el siguiente resultado:

Fila roc_auc model_quality
1 0.724588 not great

Luego de evaluar tu modelo, obtendrás un roc_auc de 0.72, que muestra que el modelo no tiene un poder predictivo bueno. Dado que el objetivo es lograr que el área bajo la curva se acerque lo más posible a 1.0, quedan aspectos por mejorar.

Tarea 6: Mejora el rendimiento del modelo con ingeniería de atributos

Como se indicó anteriormente, hay muchos más atributos en el conjunto de datos que pueden ayudar a que el modelo comprenda mejor la relación entre la primera sesión de un visitante y la probabilidad de que realice una compra en una visita posterior.

Agrega atributos nuevos y crea un segundo modelo de aprendizaje automático denominado classification_model_2:

  • Qué tan lejos llegó el visitante en el proceso de confirmación de la compra en su primera visita
  • De dónde vino el visitante (fuente de tráfico: búsqueda orgánica, sitio de referencia, etcétera)
  • Categoría del dispositivo (dispositivo móvil, tablet, computadora de escritorio)
  • Información geográfica (país)
  1. Ejecuta la siguiente consulta para crear este segundo modelo:
CREATE OR REPLACE MODEL `ecommerce.classification_model_2` OPTIONS (model_type='logistic_reg', labels = ['will_buy_on_return_visit']) AS WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # add in new features SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # labels will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # behavior on the site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # where the visitor came from trafficSource.source, trafficSource.medium, channelGrouping, # mobile or desktop device.deviceCategory, # geographic IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # only predict for new visits AND totals.newVisits = 1 AND date BETWEEN '20160801' AND '20170430' # train 9 months GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ); Nota: Todavía estás entrenando sobre los mismos primeros 9 meses de datos, incluso con este nuevo modelo. Es importante tener el mismo conjunto de datos de entrenamiento para garantizar que un mejor resultado del modelo se puede atribuir a mejores atributos de entrada y no a datos de entrenamiento nuevos o diferentes.

Un nuevo atributo clave que se agregó a la consulta del conjunto de datos de entrenamiento es el progreso máximo en el proceso de confirmación de la compra que cada visitante alcanzó en su sesión, que se registra en el campo hits.eCommerceAction.action_type. Si lo buscas en las definiciones de los campos, verás que tiene la asignación de campo de "compra completada = 6".

Además, el conjunto de datos de estadísticas web tiene campos anidados y repetidos como ARRAYS, que deben dividirse en filas separadas en tu conjunto de datos. Esto se logra con el uso de la función UNNEST(), que puedes ver en la consulta anterior.

Espera a que el modelo nuevo termine el entrenamiento (de 5 a 10 minutos).

  1. Evalúa este nuevo modelo para ver si hay mejor poder predictivo. Para ello, ejecuta la siguiente consulta:
#standardSQL SELECT roc_auc, CASE WHEN roc_auc > .9 THEN 'good' WHEN roc_auc > .8 THEN 'fair' WHEN roc_auc > .7 THEN 'not great' ELSE 'poor' END AS model_quality FROM ML.EVALUATE(MODEL ecommerce.classification_model_2, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # add in new features SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # labels will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # behavior on the site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # where the visitor came from trafficSource.source, trafficSource.medium, channelGrouping, # mobile or desktop device.deviceCategory, # geographic IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # only predict for new visits AND totals.newVisits = 1 AND date BETWEEN '20170501' AND '20170630' # eval 2 months GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ));

(Resultado)

Fila roc_auc model_quality
1 0.910382 good

Con este nuevo modelo, ahora obtienes un roc_auc de 0.91, que es significativamente mejor que el primer modelo.

Ahora que tienes un modelo entrenado, es hora de hacer algunas predicciones.

Tarea 7: Predice qué nuevos visitantes regresarán y realizarán una compra

A continuación, escribirás una consulta para predecir qué nuevos visitantes regresarán y realizarán una compra.

  • Ejecuta la siguiente consulta de predicción, que usa el modelo de clasificación mejorado para predecir la probabilidad de que un visitante nuevo de Google Merchandise Store realice una compra en una próxima visita:
SELECT * FROM ml.PREDICT(MODEL `ecommerce.classification_model_2`, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) SELECT CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id, # labels will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # behavior on the site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # where the visitor came from trafficSource.source, trafficSource.medium, channelGrouping, # mobile or desktop device.deviceCategory, # geographic IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE # only predict for new visits totals.newVisits = 1 AND date BETWEEN '20170701' AND '20170801' # test 1 month GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ) ORDER BY predicted_will_buy_on_return_visit DESC;

Las predicciones se realizan en función de los datos del último mes (de un total de 12 meses) del conjunto de datos.

Ahora tu modelo mostrará los resultados de las predicciones para las sesiones de comercio electrónico de julio de 2017. Puedes ver tres campos recién agregados:

  • predicted_will_buy_on_return_visit: si el modelo considera que el visitante comprará después (1 = sí)
  • predicted_will_buy_on_return_visit_probs.label: el clasificador binario para sí/no
  • predicted_will_buy_on_return_visit_probs.prob: la confianza que el modelo tiene en su predicción (1 = 100%)

Resultados

  • Del 6% principal de los visitantes nuevos (ordenados en forma decreciente de probabilidad prevista), más del 6% realiza una compra en una visita posterior.
  • Estos usuarios representan casi el 50% de todos los visitantes nuevos que realizan una compra en una visita posterior.
  • En general, solo el 0.7% de los visitantes nuevos realizan una compra en una visita posterior.
  • Segmentar las campañas para el 6% principal de los visitantes nuevos aumenta 9 veces el ROI de marketing en comparación con segmentarlas para todos.

Información adicional

roc_auc es solo una de las métricas de rendimiento disponibles durante la evaluación del modelo. También están disponibles las de exactitud, precisión y recuperación. Saber en qué métrica de rendimiento confiar depende en gran medida de cuál es tu objetivo o meta general.

¡Felicitaciones!

Creaste un modelo de aprendizaje automático usando únicamente SQL.

Desafío

Resumen

En las dos tareas anteriores, viste el poder de la ingeniería de atributos en acción para mejorar el rendimiento de nuestros modelos. Sin embargo, es posible que aún podamos mejorar el rendimiento mediante la exploración de otros tipos de modelos. Para problemas de clasificación, BigQuery ML también admite los siguientes tipos de modelos:

Tarea

Si bien el rendimiento de nuestro modelo de clasificación lineal (regresión logística) fue bueno después de aplicarle la ingeniería de atributos, puede ser un modelo demasiado simple para capturar completamente la relación entre los atributos y las etiquetas. Tu desafío es crear un clasificador XGBoost con el mismo conjunto de datos y las mismas etiquetas que usaste en la Tarea 6 para crear el modelo ecommerce.classification_model_2.

Nota: Sugerencia: Usa las siguientes opciones para Boosted_Tree_Classifier:
1. L2_reg = 0.1
2. num_parallel_tree = 8
3. max_tree_depth = 10

Es posible que debas revisar la documentación que se incluye en el vínculo que aparece más arriba para ver la sintaxis exacta. El entrenamiento del modelo llevará alrededor de 7 minutos. Si necesitas ayuda para escribir la consulta, revisa la sección de solución a continuación.

Solución:

Esta es la solución que necesitas para crear un clasificador XGBoost:

CREATE OR REPLACE MODEL `ecommerce.classification_model_3` OPTIONS (model_type='BOOSTED_TREE_CLASSIFIER' , l2_reg = 0.1, num_parallel_tree = 8, max_tree_depth = 10, labels = ['will_buy_on_return_visit']) AS WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # add in new features SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # labels will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # behavior on the site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # where the visitor came from trafficSource.source, trafficSource.medium, channelGrouping, # mobile or desktop device.deviceCategory, # geographic IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # only predict for new visits AND totals.newVisits = 1 AND date BETWEEN '20160801' AND '20170430' # train 9 months GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country );

Ahora evaluaremos nuestro modelo y veremos cómo nos fue:

#standardSQL SELECT roc_auc, CASE WHEN roc_auc > .9 THEN 'good' WHEN roc_auc > .8 THEN 'fair' WHEN roc_auc > .7 THEN 'not great' ELSE 'poor' END AS model_quality FROM ML.EVALUATE(MODEL ecommerce.classification_model_3, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) # add in new features SELECT * EXCEPT(unique_session_id) FROM ( SELECT CONCAT(fullvisitorid, CAST(visitId AS STRING)) AS unique_session_id, # labels will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # behavior on the site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # where the visitor came from trafficSource.source, trafficSource.medium, channelGrouping, # mobile or desktop device.deviceCategory, # geographic IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE 1=1 # only predict for new visits AND totals.newVisits = 1 AND date BETWEEN '20170501' AND '20170630' # eval 2 months GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ));

Nuestro roc_auc aumentó de 0.02 a 0.94, aproximadamente.

Nota: Tus valores exactos diferirán debido a la aleatoriedad involucrada en el proceso de entrenamiento.

Es un cambio pequeño en el roc_auc, pero ten en cuenta que 1 es un roc_auc perfecto; por lo tanto, a medida que se acerca al 1, se vuelve cada vez más difícil mejorar la métrica.

Este es un excelente ejemplo de lo fácil que es probar diferentes tipos de modelos con diferentes opciones para ver su rendimiento en BigQuery ML. Pudimos usar un tipo de modelo mucho más complejo con solo cambiar una línea de SQL.

Es razonable que nos preguntemos: “¿De dónde salieron las elecciones para estas opciones?”, y la respuesta es de los experimentos. Cuando tratas de encontrar el mejor tipo de modelo para tus problemas, debes experimentar con diferentes conjuntos de opciones en un proceso que se conoce como ajuste de hiperparámetros.

Para finalizar, generaremos predicciones con nuestro modelo mejorado y veremos cómo se comparan con aquellas generadas anteriormente. Con el uso de un modelo clasificador de árbol con boosting, puedes observar una leve mejora de 0.2 en nuestro ROC AUC, en comparación con el modelo anterior. La siguiente consulta predecirá qué nuevos visitantes regresarán y realizarán una compra:

SELECT * FROM ml.PREDICT(MODEL `ecommerce.classification_model_3`, ( WITH all_visitor_stats AS ( SELECT fullvisitorid, IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0) AS will_buy_on_return_visit FROM `data-to-insights.ecommerce.web_analytics` GROUP BY fullvisitorid ) SELECT CONCAT(fullvisitorid, '-',CAST(visitId AS STRING)) AS unique_session_id, # labels will_buy_on_return_visit, MAX(CAST(h.eCommerceAction.action_type AS INT64)) AS latest_ecommerce_progress, # behavior on the site IFNULL(totals.bounces, 0) AS bounces, IFNULL(totals.timeOnSite, 0) AS time_on_site, totals.pageviews, # where the visitor came from trafficSource.source, trafficSource.medium, channelGrouping, # mobile or desktop device.deviceCategory, # geographic IFNULL(geoNetwork.country, "") AS country FROM `data-to-insights.ecommerce.web_analytics`, UNNEST(hits) AS h JOIN all_visitor_stats USING(fullvisitorid) WHERE # only predict for new visits totals.newVisits = 1 AND date BETWEEN '20170701' AND '20170801' # test 1 month GROUP BY unique_session_id, will_buy_on_return_visit, bounces, time_on_site, totals.pageviews, trafficSource.source, trafficSource.medium, channelGrouping, device.deviceCategory, country ) ) ORDER BY predicted_will_buy_on_return_visit DESC;

El resultado ahora muestra un modelo de clasificación que puede predecir mejor la probabilidad de que un visitante nuevo de Google Merchandise Store realice una compra en una visita posterior. Si comparas el resultado de arriba con el modelo anterior que se mostró en la Tarea 7, puedes ver que la confianza que el modelo tiene en sus predicciones es más exacta cuando se compara con un modelo de regresión logística.

Finalice su lab

Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.

Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.

La cantidad de estrellas indica lo siguiente:

  • 1 estrella = Muy insatisfecho
  • 2 estrellas = Insatisfecho
  • 3 estrellas = Neutral
  • 4 estrellas = Satisfecho
  • 5 estrellas = Muy satisfecho

Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.

Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.

Copyright 2026 Google LLC. Todos los derechos reservados. Google y el logotipo de Google son marcas de Google LLC. El resto de los nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que están asociados.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

Un lab a la vez

Confirma para finalizar todos los labs existentes y comenzar este

Usa la navegación privada para ejecutar el lab

Usar una ventana de incógnito o de navegación privada es la mejor forma de ejecutar este lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.