En este instructivo, aprenderás a crear un modelo de factorización de matrices y a entrenarlo con las calificaciones de películas de los clientes en el conjunto de datos movielens1m
. Luego, usa el modelo de factorización de matrices para generar recomendaciones de películas para los usuarios.
El uso de calificaciones proporcionadas por los clientes para entrenar el modelo se denomina entrenamiento con comentarios explícitos. Los modelos de factorización de matrices se entrenan con el algoritmo de mínimos cuadrados alternos cuando usas comentarios explí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 películas para los usuarios con el modelo con la función
ML.RECOMMEND
Costos
En este instructivo, se usan componentes facturables de Google Cloud, incluidos los siguientes:
- BigQuery
- BigQuery ML
Para obtener más información sobre los costos de BigQuery, consulta la página 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.
Sube los datos de MovieLens
Sube los datos de movielens1m
a BigQuery con la herramienta de línea de comandos de bq.
Sigue estos pasos para subir los datos de movielens1m
:
Abre Cloud Shell:
Sube los datos de las calificaciones a la tabla
ratings
. En la línea de comandos, pega la siguiente consulta y presionaEnter
:curl -O 'http://files.grouplens.org/datasets/movielens/ml-1m.zip' unzip ml-1m.zip sed 's/::/,/g' ml-1m/ratings.dat > ratings.csv bq load --source_format=CSV bqml_tutorial.ratings ratings.csv \ user_id:INT64,item_id:INT64,rating:FLOAT64,timestamp:TIMESTAMP
Sube los datos de las películas a la tabla
movies
. En la línea de comandos, pega la siguiente consulta y presionaEnter
:sed 's/::/@/g' ml-1m/movies.dat > movie_titles.csv bq load --source_format=CSV --field_delimiter=@ \ bqml_tutorial.movies movie_titles.csv \ movie_id:INT64,movie_title:STRING,genre:STRING
Crea el modelo
Crea un modelo de factorización de matrices y entrena en los datos de la tabla ratings
. El modelo se entrena para predecir una calificación para cada par de usuario y elemento, según las calificaciones de las películas que proporciona el cliente.
La siguiente sentencia CREATE MODEL
usa estas columnas para generar recomendaciones:
user_id
: El ID de usuario.item_id
: Es el ID de la película.rating
: Es la calificación explícita del 1 al 5 que el usuario otorgó al elemento.
Sigue estos pasos para crear 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:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_explicit` OPTIONS ( MODEL_TYPE = 'matrix_factorization', FEEDBACK_TYPE = 'explicit', USER_COL = 'user_id', ITEM_COL = 'item_id', L2_REG = 9.83, NUM_FACTORS = 34) AS SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings`;
La consulta tarda unos 10 minutos en completarse, después de lo cual el modelo
mf_explicit
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_explicit
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) | +-----------+--------------------+--------------------+ | 11 | 0.3943 | 42.59 | +-----------+--------------------+--------------------+ | 10 | 0.3979 | 27.37 | +-----------+--------------------+--------------------+ | 9 | 0.4038 | 40.79 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
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.
También puedes usar la función ML.TRAINING_INFO
para ver las estadísticas de entrenamiento de modelos.
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 películas previstas que muestra el modelo en comparación con las calificaciones reales de las películas de los usuarios de los datos de 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_explicit`, ( SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings` ));
Los resultados debería ser similar al siguiente:
+---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | 0.48494444327829156 | 0.39433706592870565 | 0.025437895793637522 | 0.39017059802629905 | 0.6840033369412044 | 0.6840033369412264 | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+
Una métrica importante en los resultados de la evaluación es la puntuación R2. La puntuación R2 es una medida estadística que determina si las predicciones de regresión lineal se aproximan a los datos reales. Un valor
0
indica que el modelo no explica nada de la variabilidad de los datos de respuesta alrededor de la media. Un valor1
indica que el modelo explica toda la variabilidad de los datos de respuesta alrededor de la media.Para obtener más información sobre el resultado de la función
ML.EVALUATE
, consulta Modelos de factorización de matrices.
También puedes llamar a ML.EVALUATE
sin proporcionar los datos de entrada. Usará las métricas de evaluación calculadas durante el entrenamiento.
Obtén las calificaciones previstas de un subconjunto de pares de usuario y elemento
Usa ML.RECOMMEND
para obtener la calificación prevista de cada película para cinco usuarios.
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_explicit`, ( SELECT user_id FROM `bqml_tutorial.ratings` LIMIT 5 ));
Los resultados debería ser similar al siguiente:
+--------------------+---------+---------+ | predicted_rating | user_id | item_id | +--------------------+---------+---------+ | 4.2125303962491873 | 4 | 3169 | +--------------------+---------+---------+ | 4.8068920531981263 | 4 | 3739 | +--------------------+---------+---------+ | 3.8742203494732403 | 4 | 3574 | +--------------------+---------+---------+ | ... | ... | ... | +--------------------+---------+---------+
Genera recomendaciones
Usa las calificaciones previstas para generar las cinco películas recomendadas más populares para cada usuario.
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` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_explicit`);
Une las calificaciones previstas con la información de la película y selecciona los cinco resultados más populares por usuario. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT user_id, ARRAY_AGG(STRUCT(movie_title, genre, predicted_rating) ORDER BY predicted_rating DESC LIMIT 5) FROM ( SELECT user_id, item_id, predicted_rating, movie_title, genre FROM `bqml_tutorial.recommend` JOIN `bqml_tutorial.movies` ON item_id = movie_id ) GROUP BY user_id;
Los resultados debería ser similar al siguiente:
+---------+-------------------------------------+------------------------+--------------------+ | user_id | f0_movie_title | f0_genre | predicted_rating | +---------+-------------------------------------+------------------------+--------------------+ | 4597 | Song of Freedom (1936) | Drama | 6.8495752907364009 | | | I Went Down (1997) | Action/Comedy/Crime | 6.7203235758772877 | | | Men With Guns (1997) | Action/Drama | 6.399407352232001 | | | Kid, The (1921) | Action | 6.1952890198126731 | | | Hype! (1996) | Documentary | 6.1895766097451475 | +---------+-------------------------------------+------------------------+--------------------+ | 5349 | Fandango (1985) | Comedy | 9.944574012151549 | | | Breakfast of Champions (1999) | Comedy | 9.55661860430112 | | | Funny Bones (1995) | Comedy | 9.52778917835076 | | | Paradise Road (1997) | Drama/War | 9.1643621767929133 | | | Surviving Picasso (1996) | Drama | 8.807353289233772 | +---------+-------------------------------------+------------------------+--------------------+ | ... | ... | ... | ... | +---------+-------------------------------------+------------------------+--------------------+
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 implí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.