En este instructivo, se presenta a los analistas de datos el modelo de factorización de matrices en BigQuery ML. BigQuery ML permite a los usuarios crear y ejecutar modelos de aprendizaje automático en BigQuery mediante consultas de SQL. El objetivo es democratizar el aprendizaje automático. Para lograrlo, se habilita a los profesionales de SQL a que compilen modelos mediante sus herramientas existentes y se quita la necesidad de trasladar datos con el fin de aumentar la velocidad de desarrollo.
En este instructivo, aprenderás a crear un modelo de factorización de matrices a partir de comentarios implícitos mediante la tabla de muestra GA360_test.ga_sessions_sample
para hacer recomendaciones en función de un ID de visitante y un ID de contenido.
La tabla ga_sessions_sample
contiene información sobre una parte de datos de sesión que recopiló Google Analytics 360 y que se enviaron a BigQuery.
Objetivos
En este instructivo usarás lo siguiente:
- BigQuery ML: Para crear un modelo de recomendaciones implícitas mediante la declaración
CREATE MODEL
- La función
ML.EVALUATE
: Para evaluar los modelos de AA - La función
ML.WEIGHTS
: Para inspeccionar los pesos de los factores latentes generados durante el entrenamiento - La función
ML.RECOMMEND
: A fin de generar recomendaciones para los usuarios
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.
Paso uno: Crea tu 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.
Paso dos: Carga los datos de Load Analytics 360 en BigQuery
La mayoría de las veces, las calificaciones de los datos no reflejan un valor que el usuario establece de forma explícita. En estas situaciones, podemos diseñar un proxy para estos valores como una calificación implícita y usar un algoritmo diferente a fin de calcular las recomendaciones. En este ejemplo, veremos un conjunto de datos de muestra de Analytics 360. Este ejemplo se basa en el siguiente artículo.
La siguiente es una consulta que se ejecutará para crear un conjunto de datos con calificaciones implícitas a partir de lo que duró la sesión de un visitante en una página de cloud-training-demos.GA360_test.ga_sessions_sample
. El objetivo de esta consulta es crear un conjunto de datos con tres columnas que se puedan asignar a una columna de usuarios, una de elementos y una de calificaciones.
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL 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
De modo opcional, para configurar la ubicación de procesamiento, haga clic en Más > Configuración de la consulta (More > Query Settings). En Processing location (Ubicación de procesamiento), elige
US
. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática en función de la ubicación del conjunto de datos.Haz clic en Ejecutar.
Cuando la consulta termine de ejecutarse, aparecerá (
bqml_tutorial.analytics_session_data
) en el panel de navegación. Debido a que en la consulta se usa una declaraciónCREATE TABLE
para crear una tabla, no verás los resultados.La tabla creada debería verse de la siguiente manera:
Ten en cuenta que este resultado es específico de la forma en que se exportaron los datos a BigQuery. La consulta para extraer tus propios datos puede diferir.
Paso tres: Crea el modelo de recomendaciones implícitas
A continuación, crea un modelo de recomendaciones implícitas mediante la tabla de Google Analytics que se cargó en el paso anterior. La siguiente consulta de GoogleSQL se usa con el fin de crear el modelo que se empleará para predecir una calificación de confianza de cada par visitorId
contentId
. Las calificaciones se crean con centro y escalamiento según la mediana de duración de la sesión, y se filtran los registros en los que la duración de la sesión es más de 3.33 veces la mediana como valores atípicos.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` 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
Detalles de la consulta
La cláusula CREATE MODEL
se usa para crear y entrenar el modelo llamado bqml_tutorial.my_implicit_mf_model
.
La cláusula OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT',
user_col='visitorId', ...)
indica que estás creando un modelo de factorización de matrices. Debido a que se especifica feedback_type='IMPLICIT'
, se entrenará un modelo de factorización de matrices explícita.
En Crea un modelo de factorización de matrices explícita, se explica con un ejemplo cómo crear este tipo de modelo.
La declaración SELECT
de esta consulta usa las siguientes columnas para generar recomendaciones.
visitorId
: El ID de visitante (INT64)contentId
: El ID de contenido (INT64)rating
: La calificación implícita de 0 a 1 calculada paravisitorId
, y su respectivocontentId
centrado y escalado (FLOAT64)
La cláusula FROM
(bqml_tutorial.analytics_session_data
) indica que consultas la tabla analytics_session_data
en el conjunto de datos bqml_tutorial
. Si se siguieron las instrucciones de los pasos dos y ocho, este conjunto de datos se encuentra en el proyecto de BigQuery.
Ejecuta la consulta CREATE MODEL
A fin de ejecutar la consulta CREATE MODEL
para crear y entrenar tu modelo, sigue estos pasos:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` 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`
Haz clic en Ejecutar.
La consulta toma unos 12 minutos en completarse, después de lo cual tu modelo (
my_implicit_mf_model
) aparece en el panel de navegación. Debido a que en la consulta se usa una declaraciónCREATE MODEL
para crear un modelo, no se muestran los resultados.
Paso cuatro (opcional): Obtén estadísticas de entrenamiento
Para ver los resultados del entrenamiento de modelos, puedes usar la función ML.TRAINING_INFO
o puedes ver las estadísticas en la consola de Google Cloud En este instructivo, usarás la consola de Google Cloud.
Para compilar un modelo, los algoritmos de aprendizaje automático examinan muchos ejemplos y buscan un modelo que minimice la pérdida. Este proceso se llama minimización del riesgo empírico.
Para ver las estadísticas de entrenamiento de modelos que se generaron cuando ejecutaste la consulta CREATE MODEL
, sigue estos pasos:
En el panel de navegación de la consola de Google Cloud, en la sección Recursos, expande [PROJECT_ID] > bqml_tutorial y, luego, haz clic en my_implicit_mf_model.
Haga clic en la pestaña Entrenamiento y, luego, en Tabla. Los resultados deberían verse como estos:
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 en el conjunto de datos de entrenamiento. Dado que realizaste la factorización de matrices, esta columna es el error cuadrático medio. De forma predeterminada, los modelos de factorización de matrices no dividirán los datos, por lo que la columna Pérdida de datos de evaluación no estará presente, a menos que se especifique un conjunto de datos de exclusión, ya que dividir los datos implica la posibilidad de perder todas las calificaciones de un usuario o un elemento. Como resultado, el modelo no tendrá información de factores latentes sobre usuarios o elementos faltantes.
Para obtener más detalles sobre la función
ML.TRAINING_INFO
, consulta la referencia de la sintaxis de BigQuery ML.
Paso cinco: Evalúa el modelo
Después de crear el modelo, evalúa el rendimiento del recomendador mediante la función ML.EVALUATE
. La función ML.EVALUATE
evalúa las calificaciones previstas en comparación con las reales.
La consulta que se usa para evaluar el modelo es la siguiente:
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
Detalles de la consulta
La primera sentencia SELECT
recupera las columnas de tu modelo.
La cláusula FROM
usa la función ML.EVALUATE
en el modelo bqml_tutorial.my_implicit_mf_model
.
Ejecuta la consulta ML.EVALUATE
Para ejecutar la consulta ML.EVALUATE
que evalúa el modelo, sigue estos pasos:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
De modo opcional, para configurar la ubicación de procesamiento, haga clic en Más > Configuración de la consulta (More > Query Settings). En Processing location (Ubicación de procesamiento), elige
US
. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática en función de la ubicación del conjunto de datos.Haz clic en Ejecutar.
Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse así:
Debido a que realizaste una factorización de matrices implícita, los resultados incluyen las siguientes columnas:
mean_average_precision
mean_squared_error
normalized_discounted_cumulative_gain
average_rank
mean_average_precision
,normalized_discounted_cumulative_gain
yaverage_rank
son métricas de clasificación que se explican en Métricas de factorización de matrices implícita.
Paso seis: Predice calificaciones y haz recomendaciones
Usa tu modelo para predecir calificaciones y hacer recomendaciones.
Busca todas las calificaciones de confianza de contentId
para un conjunto de visitorIds
ML.RECOMMEND
no necesita tomar ningún argumento adicional además del modelo, pero puede incluir una tabla opcional. Si la tabla de entrada solo tiene una columna que coincide con el nombre de la columna de entrada user
o item
, se generarán todas las calificaciones de elementos previstas para cada user
y viceversa. Ten en cuenta que si todos los users
o items
están en la tabla de entrada, se muestran los mismos resultados que si no pasas ningún argumento opcional a ML.RECOMMEND
.
El siguiente es un ejemplo de una consulta que se usa a fin de recuperar todas las calificaciones de confianza previstas para 5 visitantes.
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5))
Detalles de la consulta
La declaración SELECT
superior recupera las columnas visitorId
, contentId
y predicted_rating_confidence
. La función ML.RECOMMEND
genera la última columna mencionada. Cuando usas la función ML.RECOMMEND
, el nombre de la columna de resultado de los modelos de factorización de matrices implícita es predicted_rating-column-name_confidence
. En los modelos de factorización de matrices implícita, predicted_rating_confidence
es la confianza estimada para el par user
/item
. Este valor de confianza se encuentra entre 0 y 1; la confianza más alta indica que el user
prefiere item
más que un item
con un valor de confianza más bajo.
La función ML.RECOMMEND
se usa para predecir calificaciones mediante el modelo bqml_tutorial.my_implicit_mf_model
.
La declaración SELECT
anidada de esta consulta solo selecciona la columna visitorId
de la tabla original que se usó para el entrenamiento.
La cláusula LIMIT
(LIMIT 5
) filtrará de forma aleatoria 5 visitorId
para enviarlos a ML.RECOMMEND
.
Busca las calificaciones para todos los pares de visitorId y contentId
Ahora que ya evaluaste el modelo, el siguiente paso es usarlo para obtener una confianza de calificación. Usa el modelo para predecir las confianzas de las combinaciones de usuario y elemento de la siguiente consulta:
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Detalles de la consulta
La declaración SELECT
superior recupera las columnas visitorId
, contentId
y predicted_rating_confidence
. La función ML.RECOMMEND
genera la última columna mencionada. Cuando usas la función ML.RECOMMEND
, el nombre de la columna de resultado de los modelos de factorización de matrices implícita es predicted_rating-column-name_confidence
. En los modelos de factorización de matrices implícita, predicted_rating_confidence
es la confianza estimada para el par user
/item
. Este valor de confianza se encuentra entre 0 y 1; la confianza más alta indica que el user
prefiere item
más que un item
con un valor de confianza más bajo.
La función ML.RECOMMEND
se usa para predecir calificaciones mediante el modelo bqml_tutorial.my_implicit_mf_model
.
Una forma de guardarlo es la siguiente:
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Si se produce un error Query Exceeded Resource Limits
con ML.RECOMMEND
, vuelve a intentarlo con un nivel de facturación superior. En la herramienta de línea de comandos de BigQuery, esto se puede configurar mediante --maximum_billing_tier
.
Genera recomendaciones
En la siguiente consulta, se usa ML.RECOMMEND
para mostrar los 5 contentId
más recomendados por visitorId
.
#standardSQL 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
Detalles de la consulta
La declaración SELECT
agrega los resultados de la consulta ML.RECOMMEND
mediante GROUP BY visitorId
para agregar contentId
y predicted_rating_confidence
en orden descendente y solo mantiene los 5 ID de contenido principales.
Mediante la consulta de recomendaciones anterior, podemos establecer un orden según la calificación prevista y mostrar los elementos previstos más importantes para cada usuario. Con la siguiente consulta, se unen los item_ids
con los movie_ids
que se encuentran en la tabla movielens.movie_titles
subida antes y muestra las 5 películas más recomendadas por usuario.
Ejecuta la consulta ML.RECOMMEND
Para ejecutar la consulta ML.RECOMMEND
que muestra los 5 ID de contenido más recomendados por ID de visitante, haz lo siguiente:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas.
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Haz clic en Ejecutar.
Cuando la consulta termine de ejecutarse, aparecerá (
bqml_tutorial.recommend_content
) en el panel de navegación de la consola de Google Cloud. Debido a que en la consulta se usa una sentenciaCREATE TABLE
para crear una tabla, no verás los resultados.Redacta otra consulta nueva. Ingresa la siguiente consulta de GoogleSQL en el área de texto del Editor de consultas una vez que la consulta anterior termine de ejecutarse.
#standardSQL 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
De modo opcional, para configurar la ubicación de procesamiento, haga clic en Más > Configuración de la consulta (More > Query Settings). En Processing location (Ubicación de procesamiento), elige
US
. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática en función de la ubicación del conjunto de datos.Haz clic en Ejecutar.
Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse así:
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, ingresa el nombre del conjunto de datos (
bqml_tutorial
) y, luego, haz clic en Borrar para confirmar el comando de borrado.
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.
Próximos pasos
- Para obtener más información sobre el aprendizaje automático, consulta el Curso intensivo de aprendizaje automático.
- Para obtener una descripción general de BigQuery ML, consulta Introducción a BigQuery ML.
- Para obtener más información sobre la consola de Google Cloud, consulta Usa la consola de Google Cloud.