En este instructivo, aprenderás a crear un modelo de factorización de matrices y a entrenarlo con los datos de la sesión del usuario de Google Analytics 360 en la tabla GA360_test.ga_sessions_sample
pública. Luego, usa el modelo de factorización de matrices para generar recomendaciones de contenido para los usuarios del sitio.
El uso de información indirecta de las preferencias del cliente, como la duración de la sesión del usuario, para entrenar el modelo se denomina entrenamiento con comentarios implícitos. Los modelos de factorización de matrices se entrenan con el algoritmo de mínimos cuadrados ponderados alternos cuando usas comentarios implícitos como datos de entrenamiento.
Objetivos
En este instructivo, se te guiará para completar las siguientes tareas:
- Crear un modelo de factorización de matrices con la sentencia
CREATE MODEL
- Evalúa el modelo con la función
ML.EVALUATE
. - Generar recomendaciones de contenido para los usuarios con el modelo con la función
ML.RECOMMEND
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.
Para obtener más información sobre los costos de BigQuery ML, consulta los precios de BigQuery ML.
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.
Permisos necesarios
- Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de IAM. Para crear el recurso de conexión, necesitas los siguientes permisos:
bigquery.connections.create
bigquery.connections.get
Para crear el modelo, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Para ejecutar inferencias, necesitas los siguientes permisos:
bigquery.models.getData
bigquery.jobs.create
Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.
Crea un 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.
Prepara los datos de muestra
Transforma los datos de la tabla GA360_test.ga_sessions_sample
en una mejor
estructura para el entrenamiento de modelos y, luego, escríbelos en una
tabla de BigQuery. En la siguiente consulta, se calcula la duración de la sesión para cada usuario y para cada elemento de contenido, que luego puedes usar como comentarios implícitos para inferir la preferencia del usuario por ese contenido.
Sigue estos pasos para crear la tabla de datos de entrenamiento:
En la consola de Google Cloud, ve a la página de BigQuery.
Crea la tabla de datos de entrenamiento. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
CREATE OR REPLACE TABLE `bqml_tutorial.analytics_session_data` AS WITH visitor_page_content AS ( SELECT fullVisitorID, ( SELECT MAX( IF( index = 10, value, NULL)) FROM UNNEST(hits.customDimensions) ) AS latestContentId, (LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time) AS session_duration FROM `cloud-training-demos.GA360_test.ga_sessions_sample`, UNNEST(hits) AS hits WHERE # only include hits on pages hits.type = 'PAGE' GROUP BY fullVisitorId, latestContentId, hits.time ) # aggregate web stats SELECT fullVisitorID AS visitorId, latestContentId AS contentId, SUM(session_duration) AS session_duration FROM visitor_page_content WHERE latestContentId IS NOT NULL GROUP BY fullVisitorID, latestContentId HAVING session_duration > 0 ORDER BY latestContentId;
Consultar un subconjunto de los datos de entrenamiento En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;
Los resultados debería ser similar al siguiente:
+---------------------+-----------+------------------+ | visitorId | contentId | session_duration | +---------------------+-----------+------------------+ | 7337153711992174438 | 100074831 | 44652 | +---------------------+-----------+------------------+ | 5190801220865459604 | 100170790 | 121420 | +---------------------+-----------+------------------+ | 2293633612703952721 | 100510126 | 47744 | +---------------------+-----------+------------------+ | 5874973374932455844 | 100510126 | 32109 | +---------------------+-----------+------------------+ | 1173698801255170595 | 100676857 | 10512 | +---------------------+-----------+------------------+
Crea el modelo
Crea un modelo de factorización de matrices y entrena en los datos de la tabla analytics_session_data
. El modelo se entrena para predecir una calificación de confianza para cada par visitorId
-contentId
. La calificación de confianza se crea con centro y escalamiento según la mediana de duración de la sesión. Los registros en los que la duración de la sesión es más de 3.33 veces la mediana se filtran como valores atípicos.
La siguiente sentencia CREATE MODEL
usa estas columnas para generar recomendaciones:
visitorId
: Es el ID de visitante.contentId
: Es el ID de contenido.rating
: La calificación implícita de 0 a 1 calculada para cada par visitante-contenido, centrada y ajustada
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_implicit` OPTIONS ( MODEL_TYPE = 'matrix_factorization', FEEDBACK_TYPE = 'implicit', USER_COL = 'visitorId', ITEM_COL = 'contentId', RATING_COL = 'rating', L2_REG = 30, NUM_FACTORS = 15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data` WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1;
La consulta tarda unos 10 minutos en completarse, después de lo cual el modelo
mf_implicit
aparece en el panel Explorador. Debido a que en la consulta se usa una sentenciaCREATE MODEL
para crear un modelo, no se muestran los resultados.
Obtén estadísticas de entrenamiento
De manera opcional, puedes ver las estadísticas de entrenamiento del modelo en la consola de Google Cloud.
Para compilar un modelo, los algoritmos de aprendizaje automático crean muchas iteraciones del modelo con diferentes parámetros y, luego, seleccionan la versión del modelo que minimiza la pérdida. Este proceso se llama minimización del riesgo empírico. Las estadísticas de entrenamiento del modelo te permiten ver la pérdida asociada con cada iteración del modelo.
Sigue estos pasos para ver las estadísticas de entrenamiento del modelo:
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto, expande el conjunto de datos
bqml_tutorial
y, luego, expande la carpeta Modelos.Haz clic en el modelo
mf_implicit
y, luego, en la pestaña Entrenamiento.En la sección Ver como, haz clic en Tabla. Los resultados debería ser similares al siguiente:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 5 | 0.0027 | 47.27 | +-----------+--------------------+--------------------+ | 4 | 0.0028 | 39.60 | +-----------+--------------------+--------------------+ | 3 | 0.0032 | 55.57 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
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. Debido a que este es un modelo de factorización de matrices, esta columna muestra el error cuadrático medio.
Evalúa el modelo
Evalúa el rendimiento del modelo con la función ML.EVALUATE
.
La función ML.EVALUATE
evalúa las calificaciones de contenido previstas que muestra el modelo en función de las métricas de evaluación calculadas durante el entrenamiento.
Sigue estos pasos para evaluar el modelo:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);
Los resultados debería ser similar al siguiente:
+------------------------+-----------------------+---------------------------------------+---------------------+ | mean_average_precision | mean_squared_error | normalized_discounted_cumulative_gain | average_rank | +------------------------+-----------------------+---------------------------------------+---------------------+ | 0.4434341257478137 | 0.0013381759837648962 | 0.9433280547112802 | 0.24031636088594222 | +------------------------+-----------------------+---------------------------------------+---------------------+
Para obtener más información sobre el resultado de la función
ML.EVALUATE
, consulta Modelos de factorización de matrices.
Obtén las calificaciones previstas para un subconjunto de pares de visitantes y contenido
Usa ML.RECOMMEND
para obtener la clasificación prevista de cada elemento de contenido para cinco visitantes del sitio.
Sigue estos pasos para obtener clasificaciones previstas:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_implicit`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5 ));
Los resultados debería ser similar al siguiente:
+-------------------------------+---------------------+-----------+ | predicted_rating_confidence | visitorId | contentId | +-------------------------------+---------------------+-----------+ | 0.0033608418060270262 | 7337153711992174438 | 277237933 | +-------------------------------+---------------------+-----------+ | 0.003602395397293956 | 7337153711992174438 | 158246147 | +-------------------------------+---------------------+-- -------+ | 0.0053197670652785356 | 7337153711992174438 | 299389988 | +-------------------------------+---------------------+-----------+ | ... | ... | ... | +-------------------------------+---------------------+-----------+
Genera recomendaciones
Usa las calificaciones previstas para generar los cinco IDs de contenido recomendados más importantes para cada ID de visitante.
Sigue estos pasos para generar recomendaciones:
En la consola de Google Cloud, ve a la página de BigQuery.
Escribe las calificaciones previstas en una tabla. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
Selecciona los cinco resultados principales por visitante. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT visitorId, ARRAY_AGG( STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId;
Los resultados debería ser similar al siguiente:
+---------------------+-----------------+---------------------------------+ | visitorId | rec:contentId | rec:predicted_rating_confidence | +---------------------+-----------------+------------------------- ------+ | 867526255058981688 | 299804319 | 0.88170525357178664 | | | 299935287 | 0.54699439944935124 | | | 299410466 | 0.53424780863188659 | | | 299826767 | 0.46949603950374219 | | | 299809748 | 0.3379991197434149 | +---------------------+-----------------+---------------------------------+ | 2434264018925667659 | 299824032 | 1.3903516407308065 | | | 299410466 | 0.9921995618196483 | | | 299903877 | 0.92333625294129218 | | | 299816215 | 0.91856701667757279 | | | 299852437 | 0.86973661454890561 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+
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.
Haz clic en Borrar conjunto de datos en el lado derecho de la ventana. Esta acción borra el conjunto de datos, la tabla y todos los datos.
En el cuadro de diálogo Borrar conjunto de datos, escribe el nombre del conjunto de datos (
bqml_tutorial
) para confirmar el comando de borrado y, luego, haz clic en Borrar.
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.
¿Qué sigue?
- Intenta crear un modelo de factorización de matrices basado en comentarios explícitos.
- Para obtener una descripción general de BigQuery ML, consulta Introducción a BigQuery ML.
- Para obtener más información sobre el aprendizaje automático, consulta el Curso intensivo de aprendizaje automático.