En este tutorial se explica cómo crear un modelo de factorización de matriz y entrenarlo con las valoraciones de películas de los clientes del conjunto de datos movielens1m
. Después, usa el modelo de factorización de matriz para generar recomendaciones de películas para los usuarios.
Usar las valoraciones proporcionadas por los clientes para entrenar el modelo se denomina entrenamiento con feedback explícito. Los modelos de factorización de matrices se entrenan con el algoritmo de mínimos cuadrados alternantes cuando se usa feedback explí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.
Subir los datos de MovieLens
Sube los datos movielens1m
a BigQuery.
CLI
Sigue estos pasos para subir los datos de movielens1m
con la herramienta de línea de comandos bq:
Abre Cloud Shell:
Sube los datos de las valoraciones a la tabla
ratings
. En la línea de comandos, pega la siguiente consulta y pulsaEnter
: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 la película a la tabla
movies
. En la línea de comandos, pega la siguiente consulta y pulsaEnter
: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
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.
Primero, crea un objeto Client
con
bqclient = google.cloud.bigquery.Client()
y, a continuación, carga los datos movielens1m
en el conjunto de datos que has creado en el paso anterior.
Crear el modelo
Crea un modelo de factorización de matriz y entrénalo con los datos de la ratings
tabla. El modelo se entrena para predecir una valoración de cada par usuario-elemento, en función de las valoraciones de películas proporcionadas por los clientes.
SQL
La siguiente instrucción CREATE MODEL
usa estas columnas para generar recomendaciones:
user_id
— El ID de usuario.item_id
: el ID de la película.rating
: la valoración explícita del 1 al 5 que el usuario ha dado al elemento.
Sigue estos pasos para crear 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:
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, el modelo
mf_explicit
aparece en el panel Explorador. Como la consulta usa una instrucciónCREATE MODEL
para crear un modelo, no se muestran resultados.
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.
El código tarda unos 10 minutos en completarse. Después, el modelo mf_explicit
aparece en el panel Explorador.
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, despliega tu proyecto, haz clic en Conjuntos de datos y, a continuación, en el conjunto de datos
bqml_tutorial
.Haz clic en la pestaña Modelos.
Haga clic en el modelo
mf_explicit
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) | +-----------+--------------------+--------------------+ | 11 | 0.3943 | 42.59 | +-----------+--------------------+--------------------+ | 10 | 0.3979 | 27.37 | +-----------+--------------------+--------------------+ | 9 | 0.4038 | 40.79 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
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.
También puedes usar la función ML.TRAINING_INFO
para ver las estadísticas de entrenamiento del modelo.
Evaluar el modelo
Evalúa el rendimiento del modelo comparando las valoraciones de películas predichas que devuelve el modelo con las valoraciones de películas reales de los usuarios de los datos de entrenamiento.
SQL
Usa la función ML.EVALUATE
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_explicit`, ( SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings` ));
Los resultados deberían ser similares a los siguientes:
+---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | 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 R. La puntuación R2 es una medida estadística que determina si las predicciones de regresión lineal se aproximan a los datos reales. El valor
0
indica que el modelo no explica ninguna de las variabilidades de los datos de respuesta en torno a la media. El valor1
indica que el modelo explica toda la variabilidad de los datos de respuesta en torno a la media.Para obtener más información sobre el resultado de la función
ML.EVALUATE
, consulta Resultado.
También puedes llamar a ML.EVALUATE
sin proporcionar los datos de entrada. Usará las métricas de evaluación calculadas durante el entrenamiento.
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.
Llama a
model.score()
para evaluar el modelo.
Obtener las valoraciones predichas de un subconjunto de pares usuario-elemento
Obtén la valoración prevista de cada película para cinco usuarios.
SQL
Usa la función ML.RECOMMEND
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_explicit`, ( SELECT user_id FROM `bqml_tutorial.ratings` LIMIT 5 ));
Los resultados deberían ser similares a los siguientes:
+--------------------+---------+---------+ | predicted_rating | user_id | item_id | +--------------------+---------+---------+ | 4.2125303962491873 | 4 | 3169 | +--------------------+---------+---------+ | 4.8068920531981263 | 4 | 3739 | +--------------------+---------+---------+ | 3.8742203494732403 | 4 | 3574 | +--------------------+---------+---------+ | ... | ... | ... | +--------------------+---------+---------+
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.
Llama al model.predict()
para obtener las valoraciones predichas.
Generar recomendaciones
Usa las valoraciones predichas para generar las cinco películas recomendadas principales para cada usuario.
SQL
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` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_explicit`);
Combina las valoraciones predichas con la información de las películas y selecciona los cinco resultados principales 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ían ser similares a los siguientes:
+---------+-------------------------------------+------------------------+--------------------+ | 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 | +---------+-------------------------------------+------------------------+--------------------+ | ... | ... | ... | ... | +---------+-------------------------------------+------------------------+--------------------+
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.
Llama al model.predict()
para obtener las valoraciones predichas.