Predicción de calificaciones de películas con BQML mediante SQL

1. Introducción

En este codelab, crearemos un modelo de predicción de puntuación de películas con el modelo personalizado de BigQuery ML usando solo SQL y lo implementaremos en VertexAI. Aprenderás a hacer lo siguiente:

  1. Cómo crear un conjunto de datos de BigQuery con Cloud Shell y cargar datos desde un archivo
  2. Cómo usar BigQuery ML para el aprendizaje supervisado y crear un modelo de predicción de regresión multiclase para la predicción de la puntuación de películas sin mucha codificación, sino solo con consultas de SQL

Qué compilarás

Crearás un

  • Un conjunto de datos de BigQuery que contenga los componentes de la tabla y del modelo
  • Modelo de BigQuery ML para predecir la calificación de una película con consultas SQL
  • Implementa el modelo en Vertex AI Model Registry

Requisitos

  • Un navegador, como Chrome o Firefox.
  • Un proyecto de Google Cloud con la facturación habilitada.

2. Crea tu proyecto

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
  3. Navega a BigQuery para habilitar la API. También puedes abrir la IU web de BigQuery directamente si ingresas la siguiente URL en tu navegador: https://console.cloud.google.com/bigquery

3. Activar Cloud Shell

  1. Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq: En la consola de Cloud, haz clic en Activar Cloud Shell en la esquina superior derecha: 6757b2fb50ddcc2d.png
  2. Una vez que te conectes a Cloud Shell, deberías ver que ya se te autenticó y que el proyecto ya se configuró con el ID de tu proyecto. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list
  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto.
gcloud config list project
  1. Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <PROJECT_ID>

Consulta la documentación para ver los comandos y el uso de gcloud.

4. Cómo preparar los datos de entrenamiento

Este es un paso importante en todos los proyectos, productos y apps relacionados con los datos que requieren mucho conocimiento del dominio, además de la tecnología para preparar un conjunto de datos óptimo y prepararlo para tu proyecto de AA. A los efectos de este codelab, usaremos el archivo data que ya está preparado.

5. Cómo crear y cargar el conjunto de datos

Un conjunto de datos de BigQuery es una colección de tablas. Todas las tablas de un conjunto de datos se almacenan en la misma ubicación de datos. También puedes adjuntar controles de acceso personalizados para limitar el acceso a un conjunto de datos y sus tablas.

  1. En Cloud Shell, usa el comando bq mk para crear un conjunto de datos llamado "movies".
bq mk --location=<<LOCATION>> movies

Establece la ubicación en una región (asia-south1).

  1. Asegúrate de tener listo el archivo de datos (.csv). Ejecuta los siguientes comandos en Cloud Shell para clonar el repositorio y navegar al proyecto:
git clone <<repository link>>

cd movie-score
  1. Usa el comando bq load para cargar tu archivo CSV en una tabla de BigQuery (ten en cuenta que también puedes subirlo directamente desde la IU de BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string

Descripción de las opciones: –source_format=CSV: Usa el formato de datos CSV cuando se analiza el archivo de datos. –skip_leading_rows=1: Omite la primera línea del archivo CSV porque es una fila de encabezado. Movies.movies: El primer argumento posicional define en qué tabla se deben cargar los datos. ./movies.csv (el segundo argumento posicional) define qué archivo se cargará. Además de los archivos locales, el comando bq load puede cargar archivos de Cloud Storage con URIs gs://my_bucket/path/to/file. Un esquema, que se puede definir en un archivo de esquema JSON o como una lista separada por comas (yo usé una lista separada por comas). ¡Claro! Nuestros datos CSV ahora se cargan en la tabla movies.movies.

  1. Realiza la consulta de una de las siguientes 3 maneras:

Podemos interactuar con BigQuery de tres maneras. Probaremos dos de ellas: a. IU web de BigQuery b. El comando bq c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

Usé BigQuery Web SQL Workspace para ejecutar consultas. El lugar de trabajo de SQL se ve de la siguiente manera:

109a0b2c7155e9b3.png

Usa el comando bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. Predecir la calificación de una película en una escala del 1 al 10

BigQuery ML admite el aprendizaje supervisado con el tipo de modelo de regresión logística. Puedes usar el tipo de modelo de regresión logística binaria para predecir si un valor pertenece a una de dos categorías, o bien, puedes usar el tipo de modelo de regresión de varias clases para predecir si un valor pertenece a una de varias categorías. Estos problemas se conocen como problemas de clasificación, ya que intentan clasificar los datos en dos o más categorías.

Nota breve sobre la elección del modelo: Esta es una elección experimental del modelo que se eligió aquí, en función de la evaluación de los resultados. Al principio, probé algunos modelos y, finalmente, me decidí por la REGRESIÓN LOGÍSTICA para mantener la simplicidad y obtener resultados más cercanos a la clasificación real de las películas de varias bases de datos. Ten en cuenta que esto debe considerarse solo como un ejemplo para implementar el modelo y NO es necesariamente el modelo recomendado para este caso de uso. Otra forma de implementar esto es predecir el resultado de la película como BUENO / MALO con este modelo de regresión logística en lugar de predecir la puntuación.

Selecciona tus datos de entrenamiento

Ya dividimos los datos de las películas (en CSV) en 3 categorías en la tabla con el campo "data_cat" que tiene uno de los 3 valores: TRAIN, TEST y PREDICT. Dividir el conjunto de datos para pruebas y entrenamiento es un aspecto importante del modelo. Si necesitas más información para comprender la división de conjuntos de datos, consulta la documentación.

Crea el modelo de regresión logística

Podemos usar la sentencia CREATE MODEL con la opción "LOGISTIC_REG" para crear y entrenar un modelo de regresión logística.

Ejecuta la siguiente consulta en BigQuery SQL Workspace de la IU web:

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

Detalles de la consulta:

  1. La sentencia CREATE MODEL entrena un modelo con los datos de entrenamiento en la sentencia SELECT.
  2. La cláusula OPTIONS especifica el tipo de modelo y las opciones de entrenamiento. Aquí, la opción LOGISTIC_REG especifica un tipo de modelo de regresión logística. No es necesario especificar un modelo de regresión logística binaria frente a un modelo de regresión logística de varias clases: BigQuery ML puede determinar cuál entrenar según la cantidad de valores únicos en la columna de la etiqueta.
  3. data_split_method='NO_SPLIT' obliga a BQML a entrenar con los datos según las condiciones de la consulta (data_cat = 'TRAIN'). Además, ten en cuenta que es mejor usar "AUTO_SPLIT" en esta opción para permitir que el framework (o el servicio en este caso) aleatorice la partición de las divisiones de entrenamiento y prueba.
  4. La opción input_label_cols especifica qué columna de la sentencia SELECT se usará como columna de la etiqueta. Aquí, la columna de la etiqueta es puntuación, por lo que el modelo aprenderá cuál de los 10 valores de puntuación es más probable que se base en los otros valores presentes en cada fila.
  5. La opción "auto_class_weights=TRUE" equilibra las etiquetas de clase en los datos de entrenamiento. De forma predeterminada, los datos de entrenamiento no están ponderados. Si las etiquetas en los datos de entrenamiento no tienen un equilibrio, el modelo puede aprender a predecir la clase de etiquetas más popular
  6. La sentencia SELECT consulta la tabla que cargamos con los datos CSV. La cláusula WHERE filtra las filas de la tabla de entrada para que solo se seleccione el conjunto de datos TRAIN en este paso.

Una vez creado, el siguiente texto aparecerá en la sección SCHEMA del espacio de trabajo de SQL de BigQuery:

Etiquetas

93efd0c1a7883690.png

Funciones

8c539338df1a9652.png

Evalúa tu modelo de regresión logística

Después de crear tu modelo, evalúa su rendimiento con la función ML.EVALUATE. La función ML.EVALUATE compara los valores predichos con los reales. La consulta para evaluar el modelo es la siguiente:

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

La función ML.EVALUATE toma el modelo entrenado en nuestro paso anterior y los datos de evaluación que muestra una subconsulta SELECT. La función muestra una sola fila de estadísticas del modelo.

b54b0ebd6514a498.png

Debido a que realizaste una regresión logística, los resultados incluyen las métricas que ves en la captura de pantalla anterior: precisión, recuperación, exactitud, puntuación F1, pérdida logística y roc_auc, que son realmente fundamentales para evaluar el rendimiento del modelo. También puedes llamar a ML.EVALUATE sin proporcionar datos de entrada. ML.EVALUATE recupera las métricas de evaluación derivadas durante el entrenamiento, que usa el conjunto de datos de evaluación reservado de forma automática.

Resumen de las métricas clave:

Precisión: ¿Qué proporción de identificaciones positivas fue correcta? Precisión = Verdadero positivo / (verdadero positivo + falso positivo) Recuperación: ¿Qué proporción de positivos reales se identificó de forma correcta? Recuperación = Verdadero positivo / (verdadero positivo + falso negativo) Exactitud: Es una métrica para evaluar modelos de clasificación. Es la fracción de predicciones que nuestro modelo acertó. Exactitud = Cantidad de predicciones correctas / Cantidad total de predicciones

Cómo predecir la calificación de una película con ML.PREDICT

La siguiente consulta predice la puntuación de cada película en la parte PREDICT del conjunto de datos.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

A continuación, se muestra un fragmento de los resultados:

1efb91967acc1f0c.png

El resultado del modelo muestra la CALIFICACIÓN prevista de la película en una escala del 1 al 10 (clasificación). Te preguntarás por qué hay varias filas de predicción para cada película. Esto se debe a que el modelo mostró las posibles etiquetas predichas y la probabilidad de ocurrencia de cada una en orden decreciente.

Cómo analizar los resultados previstos y el modelo

Además, puedes realizar dos pasos de análisis excelentes como parte de los resultados de la predicción:

  1. Para comprender por qué el modelo genera estos resultados de predicción, puedes usar la función ML.EXPLAIN_PREDICT.
  2. Para saber qué características son las más importantes para determinar el rango de ingresos en general, puedes usar la función ML.GLOBAL_EXPLAIN.

Puedes leer sobre estos pasos en detalle en la documentación.

7. Predice la calificación de una película con BigQuery AutoML

AutoML es ideal si quieres que el servicio de BigQuery cree el modelo por ti y relajarte hasta que se generen los resultados del modelo. La función de AUTOML está disponible directamente en BQML (model_type=AUTOML_CLASSIFIER o AUTOML_REGRESSOR) y es mucho más fácil llamarla si los datos ya están en BigQuery.

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

Una vez creado el modelo, puedes realizar los pasos para EVALUATE, PREDICT y EXPLAIN_PREDICT tal como lo explicamos en el modelo BQML personalizado. Obtén más información sobre BigQuery AutoML en la documentación.

8. Implementa modelos de BQML en Vertex AI Model Registry con un clic

Ahora puedes ver todos tus modelos de AA en Vertex AI Model Registry, lo que facilita que tu organización administre e implemente modelos. Esto incluye los modelos creados con BigQuery ML, AutoML y los modelos entrenados personalizados. A continuación, le mostramos cómo hacerlo:

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
   model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

Incluye la opción model_registry="vertex_ai" en la consulta CREATE MODEL para que BigQuery ML pueda elegir qué modelos quiere registrar explícitamente en Vertex AI Model Registry. Puedes obtener más información sobre este tema en este blog.

9. Resumen

En menos de 30 minutos, tenemos lo siguiente:

  1. Configura BigQuery como nuestra base de datos para el proyecto de estadísticas
  2. Creaste un modelo de predicción personalizado solo con SQL de datos de BigQuery y sin ningún otro código
  3. Creaste un modelo de AutoML de BQ solo con consultas SQL
  4. Se implementó el modelo de BQML en Vertex AI Model Registry

10. Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta publicación:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.
  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.

11. Felicitaciones

¡Felicitaciones! Creaste correctamente un modelo de predicción de puntuación de películas con BQML personalizado y AutoML, y lo implementaste en Vertex AI Model Registry. Todo esto solo con SQL.