En este tutorial se explica cómo crear un modelo de factorización de matrices y entrenarlo con los datos de sesión de usuario de Google Analytics 360 de la GA360_test.ga_sessions_sample
tabla pública. A continuación, utiliza el modelo de factorización de matriz para generar recomendaciones de contenido para los usuarios del sitio.
Usar información indirecta sobre las preferencias de los clientes, como la duración de la sesión del usuario, para entrenar el modelo se denomina entrenamiento con feedback implícito. Los modelos de factorización de matrices se entrenan con el algoritmo de mínimos cuadrados alternantes ponderados cuando se usa el feedback implícito como datos de entrenamiento.
Crear conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.
Consola
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haga 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, introduce
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).
Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos, usa el comando
bq mk
con la marca --location
. Para ver una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos definida comoUS
y la descripciónBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
En lugar de usar la marca
--dataset
, el comando usa el acceso directo-d
. Si omite-d
y--dataset
, el comando creará un conjunto de datos de forma predeterminada.Confirma que se ha creado el conjunto de datos:
bq ls
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Preparar los datos de muestra
Transforma los datos de la tabla GA360_test.ga_sessions_sample
en una estructura más adecuada para el entrenamiento del modelo y, a continuación, escribe estos datos en una tabla de BigQuery. La siguiente consulta calcula la duración de la sesión de cada usuario para cada contenido, que puede usar como feedback implícito para inferir la preferencia del usuario por ese contenido.
Sigue estos pasos para crear la tabla de datos de entrenamiento:
En la Google Cloud consola, ve a la página 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;
Ver 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ían ser similares a los siguientes:
+---------------------+-----------+------------------+ | visitorId | contentId | session_duration | +---------------------+-----------+------------------+ | 7337153711992174438 | 100074831 | 44652 | +---------------------+-----------+------------------+ | 5190801220865459604 | 100170790 | 121420 | +---------------------+-----------+------------------+ | 2293633612703952721 | 100510126 | 47744 | +---------------------+-----------+------------------+ | 5874973374932455844 | 100510126 | 32109 | +---------------------+-----------+------------------+ | 1173698801255170595 | 100676857 | 10512 | +---------------------+-----------+------------------+
Crear el modelo
Crea un modelo de factorización de matriz y entrénalo con los datos de la tabla analytics_session_data
. El modelo se entrena para predecir una valoración de confianza para cada par visitorId
-contentId
. La calificación de confianza se crea
centrando y escalando por la duración media de la sesión. Se excluyen los registros en los que la duración de la sesión es más de 3,33 veces la mediana, ya que se consideran valores atípicos.
La siguiente instrucción CREATE MODEL
usa estas columnas para generar recomendaciones:
visitorId
: ID del visitante.contentId
— El ID del contenido.rating
: la valoración implícita de 0 a 1 calculada para cada par visitante-contenido, centrada y escalada.
En la Google Cloud consola, ve a la página 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, el modelo
mf_implicit
aparece en el panel Explorador. Como la consulta usa una instrucciónCREATE MODEL
para crear un modelo, no se muestran resultados.
Obtener estadísticas de formación
Si quiere, puede ver las estadísticas de entrenamiento del modelo en laGoogle Cloud consola.
Un algoritmo de aprendizaje automático crea un modelo generando muchas iteraciones del modelo con diferentes parámetros y, a continuación, selecciona la versión del modelo que minimiza la pérdida. Este proceso se denomina minimización del riesgo empírico. Las estadísticas de entrenamiento del modelo te permiten ver la pérdida asociada a cada iteración del modelo.
Siga estos pasos para ver las estadísticas de entrenamiento del modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el panel de la izquierda, haz clic en
Explorador:Si no ves el panel de la izquierda, haz clic en
Ampliar panel de la izquierda para abrirlo.En el panel Explorador, expande tu proyecto y haz clic en Conjuntos de datos.
Haga clic en el conjunto de datos
bqml_tutorial
. También puedes usar la función de búsqueda o los filtros para encontrar el conjunto de datos.Haz clic en la pestaña Modelos.
Haga clic en el modelo
mf_implicit
y, a continuación, en la pestaña Entrenamiento.En la sección Ver como, haga clic en Tabla. Los resultados deberían ser similares a los siguientes:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 5 | 0.0027 | 47.27 | +-----------+--------------------+--------------------+ | 4 | 0.0028 | 39.60 | +-----------+--------------------+--------------------+ | 3 | 0.0032 | 55.57 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
La columna Pérdida de datos de entrenamiento representa la métrica de pérdida calculada después de entrenar el modelo. Como se trata de un modelo de factorización de matrices, esta columna muestra el error cuadrático medio.
Evaluar el modelo
Evalúa el rendimiento del modelo con la función ML.EVALUATE
.
La función ML.EVALUATE
evalúa las clasificaciones de contenido predichas que devuelve el modelo en comparación con las métricas de evaluación calculadas durante el entrenamiento.
Sigue estos pasos para evaluar el modelo:
En la Google Cloud consola, ve a la página 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ían ser similares a los siguientes:
+------------------------+-----------------------+---------------------------------------+---------------------+ | 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 Resultado.
Obtener las valoraciones predichas de un subconjunto de pares de visitantes y contenido
Usa ML.RECOMMEND
para obtener la clasificación prevista de cada contenido
de cinco visitantes del sitio.
Sigue estos pasos para obtener las valoraciones predichas:
En la Google Cloud consola, ve a la página 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ían ser similares a los siguientes:
+-------------------------------+---------------------+-----------+ | predicted_rating_confidence | visitorId | contentId | +-------------------------------+---------------------+-----------+ | 0.0033608418060270262 | 7337153711992174438 | 277237933 | +-------------------------------+---------------------+-----------+ | 0.003602395397293956 | 7337153711992174438 | 158246147 | +-------------------------------+---------------------+-- -------+ | 0.0053197670652785356 | 7337153711992174438 | 299389988 | +-------------------------------+---------------------+-----------+ | ... | ... | ... | +-------------------------------+---------------------+-----------+
Generar recomendaciones
Usa las valoraciones predichas para generar los cinco IDs de contenido recomendados principales de cada ID de visitante.
Sigue estos pasos para generar recomendaciones:
En la Google Cloud consola, ve a la página BigQuery.
Escribe las valoraciones predichas 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ían ser similares a los siguientes:
+---------------------+-----------------+---------------------------------+ | 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 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+