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

1. Introducción

En este codelab, crearemos un modelo de predicción de puntuaciones de películas con el modelo personalizado de BigQuery ML usando solo SQL y, luego, implementaremos el modelo en Vertex AI. 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 en el aprendizaje supervisado para crear un modelo de predicción de regresión de varias clases para la predicción de la puntuación de una película sin necesidad de programación, pero solo con consultas en 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 en SQL
  • Implementar 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 ingresando 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 datos que requiere mucha experiencia en el área, además de la tecnología para preparar un conjunto de datos óptimo y prepararlo para tu proyecto de AA. A los fines de este codelab, usaremos el archivo data que ya está preparado.

5. Crea y carga el conjunto de datos

Un conjunto de datos de BigQuery es una colección de tablas. Todas las tablas en 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 como una región (asia-south1).

  1. Asegúrate de tener el archivo de datos (.csv) listo. 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 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 cargar. Además de los archivos locales, el comando bq load puede cargar archivos desde Cloud Storage con URI 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 (utilicé una lista separada por comas). ¡Claro! Nuestros datos csv ahora están cargados en la tabla Movies.movies.

  1. Realiza consultas 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 de bq c. API

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

Usé el espacio de trabajo de BigQuery Web SQL para ejecutar consultas. El lugar de trabajo de SQL se ve así:

109a0b2c7155e9b3.png

Usa el comando de 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 puedes usar el tipo de modelo de regresión de clases múltiples para predecir si un valor pertenece a una de varias categorías. Estos problemas se conocen como problemas de clasificación, porque intentan clasificar los datos en dos o más categorías.

Una aclaración breve sobre la elección del modelo: Esta es una elección experimental del modelo elegida aquí, basada en la evaluación de resultados. Ejecuté algunos modelos inicialmente y, finalmente, seguí con LOGISTIC REG para que fuera simple y obtener resultados más cercanos a la calificación real de la película a partir de varias bases de datos. Ten en cuenta que esto se debe considerar solo como una muestra 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 BUEN o MALO mediante este modelo de regresión logística en lugar de predecir la puntuación.

Selecciona tus datos de entrenamiento

Ya dividimos los datos de películas (en csv) en 3 categorías en la tabla mediante el campo "data_cat". que tiene uno de 3 valores: TRAIN, TEST y PREDICT. La división del conjunto de datos con fines de prueba 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 el lugar de trabajo de SQL de la IU web de BigQuery:

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 instrucción CREATE MODEL entrena un modelo con los datos de entrenamiento en la instrucción 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 multiclase: 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&#39; obliga a BQML a entrenar con los datos según las condiciones de la consulta (data_cat = "TRAIN"). También 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 usar como columna de etiqueta. Aquí, la columna de etiquetas es puntaje, por lo que el modelo aprenderá cuál de los 10 valores de calificación es más probable en función de los otros valores presentes en cada fila.
  5. El valor ‘auto_class_weights=TRUE’ balancea 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 están equilibradas, el modelo puede aprender a predecir la clase de etiquetas más popular con mayor precisión.
  6. La instrucción SELECT consulta la tabla que cargamos con los datos csv. La cláusula WHERE filtra las filas en la tabla de entrada para que solo se seleccione el conjunto de datos TRAIN en este paso.

Una vez creado, aparecerá lo siguiente en la sección de ESQUEMA del lugar 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 el paso anterior y los datos de evaluación devueltos por 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, log_loss y roc_auc), que son 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 automáticamente.

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ó correctamente? 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 realmente acertó Exactitud = Cantidad de predicciones correctas / Cantidad total de predicciones

Predice calificaciones de películas 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 PUNTUACIÓN prevista de la película en una escala del 1 al 10 (clasificación). Debes estar preguntándote por qué hay varias filas de predicción en cada película. Esto se debe a que el modelo devolvió las posibles etiquetas predichas y la probabilidad de que ocurra cada una en orden descendente.

Analiza el modelo y los resultados previstos

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

  1. Para comprender por qué tu modelo genera estos resultados de predicción, puedes usar la función ML.EXPLAIN_PREDICT
  2. Para saber qué atributos son los 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. Predecir calificaciones de películas con BigQuery AutoML

AutoML es excelente si quieres dejar que el servicio de BigQuery cree el modelo por ti y se relaje hasta que se generen los resultados de tu modelo. La función AUTOML está disponible directamente en BQML (model_type=AUTOML_CLASSIFIER o AUTOML_REGRESSOR) y es mucho más fácil de llamar si los datos ya se encuentran 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 que se crea el modelo, puedes seguir los pasos para EVALUATE, PREDICT y EXPLAIN_PREDICT, tal como lo analizamos en el modelo personalizado de BQML. Obtén más información sobre AutoML de BigQuery en la documentación.

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

Ahora puedes ver todos tus modelos de AA en Vertex AI Model Registry, lo que facilita a tu organización implementar y administrar modelos. Esto incluye modelos creados con BigQuery ML, AutoML y modelos de entrenamiento personalizado. 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 model_registry="vertex_ai" en la consulta CREATE MODEL para que BigQuery ML pueda elegir qué modelos quiere registrar de forma explícita en Vertex AI Model Registry. Obtén más información sobre este tema en este blog.

9. Resumen

En menos de 30 minutos, tenemos:

  1. Configura BigQuery como nuestra base de datos para el proyecto de estadísticas
  2. Modelo de predicción personalizado creado solo con datos SQL de BigQuery y sin otra programación
  3. Creación del modelo de AA automático de BQ solo con consultas en 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 la puntuación de una película con BQML personalizado y AutoML, y lo implementaste en Vertex AI Model Registry y todo esto solo con SQL.