Usa BigQuery ML para predecir el peso de un pingüino


En este instructivo, usarás un modelo de regresión lineal en BigQuery ML para predecir el peso de un pingüino a partir de la información demográfica del pingüino. Una regresión lineal es un tipo de modelo de regresión que genera un valor continuo a partir de una combinación lineal de atributos de entrada.

En este instructivo, se usa el conjunto de datos bigquery-public-data.ml_datasets.penguins.

Objetivos

En este instructivo, realizarás las siguientes tareas:

  • Crear un modelo de regresión lineal.
  • Evalúa el modelo.
  • Haz predicciones mediante el modelo.

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

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  3. Habilita la API de BigQuery.

    Habilita la API

Permisos necesarios

Para crear el modelo con BigQuery ML, necesitas los siguientes permisos de IAM:

  • bigquery.jobs.create
  • bigquery.models.create
  • bigquery.models.getData
  • bigquery.models.updateData
  • bigquery.models.updateMetadata

Para ejecutar inferencias, necesitas los siguientes permisos:

  • bigquery.models.getData en el modelo
  • bigquery.jobs.create

Crea un conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haz clic en Ver acciones > Crear conjunto de datos.

    Crea un conjunto de datos.

  4. 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.

      Página Crear un conjunto de datos

Crea el modelo

Crea un modelo de regresión lineal con la sentencia CREATE MODEL y especificando LINEAR_REG para el tipo de modelo. La creación del modelo incluye el entrenamiento del modelo.

La siguiente información es útil para saber sobre la declaración CREATE MODEL:

  • La opción input_label_cols especifica qué columna de la declaración SELECT se usará como columna de la etiqueta. Aquí, la columna de la etiqueta es body_mass_g. Para los modelos de regresión lineal, la columna de la etiqueta debe tener un valor real, es decir, sus valores deben ser números reales.
  • La declaración SELECT de esta consulta usa las siguientes columnas de la tabla bigquery-public-data.ml_datasets.penguins para predecir el peso de un pingüino:

    • species: la especie del pingüino.
    • island: la isla en la que reside el pingüino.
    • culmen_length_mm: la longitud del culmen del pingüino en milímetros.
    • culmen_depth_mm: la profundidad del culmen del pingüino en milímetros.
    • flipper_length_mm: la longitud de las aletas del pingüino en milímetros.
    • sex: el sexo del pingüino.
  • La cláusula WHERE en la declaración SELECT de esta consulta, WHERE body_mass_g IS NOT NULL, excluye las filas en las que la columna body_mass_g es NULL.

Ejecuta la consulta que crea tu modelo de regresión lineal:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el Editor de consultas, ejecute la siguiente consulta:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
    OPTIONS
      (model_type='linear_reg',
      input_label_cols=['body_mass_g']) AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
    
  3. La creación del modelo penguins_model toma alrededor de 30 segundos. Para ver el modelo, ve al panel Explorador, expande el conjunto de datos bqml_tutorial y, luego, expande la carpeta Modelos.

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.

Un algoritmo de aprendizaje automático examina muchos ejemplos y trata de encontrar un modelo que minimice la pérdida. Este proceso se llama minimización del riesgo empírico.

La pérdida es una penalidad por una predicción incorrecta. Es un número que indica qué tan mala fue la predicción del modelo en un solo ejemplo. Si la predicción del modelo es perfecta, la pérdida es cero; de lo contrario, es mayor. El objetivo de entrenar a un modelo es encontrar un conjunto de pesos y ordenadas al origen que tengan, en promedio, una pérdida baja en todos los ejemplos.

Be las estadísticas de entrenamiento de modelos que se generaron cuando ejecutaste la consulta CREATE MODEL:

  1. En el panel Explorador, expande el conjunto de datos bqml_tutorial y, luego, la carpeta Modelos. Haz clic en penguins_model para abrir el panel de información del modelo.

  2. Haz clic en la pestaña Entrenamiento y, luego, en Tabla. Los resultados debería ser similares al siguiente:

    Resultado de ML.TRAINING_INFO

    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. Como se realizó una regresión lineal, esta columna muestra el valor del error cuadrático medio. Se utiliza automáticamente una estrategia de optimización “normal_equation” para este entrenamiento, por lo que solo se requiere una iteración con el fin de converger en el modelo final. Para obtener más información sobre cómo configurar la estrategia de optimización del modelo, consulta optimize_strategy.

Evalúa el modelo

Después de crear el modelo, evalúa su rendimiento mediante la función ML.EVALUATE. La función ML.EVALUATE evalúa los valores previstos que generó el modelo con los datos reales.

Como entrada, la función ML.EVALUATE toma el modelo entrenado y un conjunto de datos que coincide con el esquema de los datos que usaste para entrenar el modelo. En un entorno de producción, debes evaluar el modelo con datos diferentes a los que usaste para entrenarlo. Si ejecutas ML.EVALUATE sin proporcionar datos de entrada, la función recupera las métricas de evaluación calculadas durante el entrenamiento. Estas métricas se calculan mediante el conjunto de datos de evaluación reservado de forma automática:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.penguins_model`);

Ejecuta la consulta ML.EVALUATE:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el Editor de consultas, ejecute la siguiente consulta:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.penguins_model`,
        (
        SELECT
          *
        FROM
          `bigquery-public-data.ml_datasets.penguins`
        WHERE
          body_mass_g IS NOT NULL));
    
  3. Los resultados debería ser similar al siguiente:

    Salida de ML.EVALUATE

    Debido a que realizaste una regresión lineal, los resultados incluyen las siguientes columnas:

    • mean_absolute_error
    • mean_squared_error
    • mean_squared_log_error
    • median_absolute_error
    • r2_score
    • explained_variance

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 valor 1 indica que el modelo explica toda la variabilidad de los datos de respuesta alrededor de la media.

También puedes ver el panel de información del modelo en la consola de Google Cloud para ver las métricas de evaluación:

Salida de ML.EVALUATE

Usa el modelo para predecir resultados

Ahora que ya evaluaste tu modelo, el siguiente paso es usarlo para predecir un resultado. Puedes ejecutar la función ML.PREDICT en el modelo para predecir la masa corporal en gramos de todos los pingüinos que viven en las islas Biscoe.

Como entrada, la función ML.PREDICT toma el modelo entrenado y un conjunto de datos que coincide con el esquema de los datos que usaste para entrenar el modelo, sin incluir la columna de la etiqueta.

Ejecuta la consulta ML.PREDICT:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el Editor de consultas, ejecute la siguiente consulta:

    SELECT
      *
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.penguins_model`,
        (
        SELECT
          *
        FROM
          `bigquery-public-data.ml_datasets.penguins`
        WHERE island = 'Biscoe'));
    
  3. Los resultados debería ser similar al siguiente:

    Salida de ML.PREDICT

Explica los resultados de la predicción

Para comprender por qué el modelo genera estos resultados de predicción, puedes usar la función ML.EXPLAIN_PREDICT.

ML.EXPLAIN_PREDICT es una versión extendida de la función ML.PREDICT. ML.EXPLAIN_PREDICT no solo genera resultados de predicción, sino también columnas adicionales para explicar los resultados de la predicción. En la práctica, puedes ejecutar ML.EXPLAIN_PREDICT en lugar de ML.PREDICT. Para obtener más información, consulta la descripción general de Explainable AI para BigQuery ML.

Ejecuta la consulta ML.EXPLAIN_PREDICT:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el Editor de consultas, ejecute la siguiente consulta:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'),
      STRUCT(3 as top_k_features));
    
  3. Los resultados debería ser similar al siguiente:

    Resultado de ML.EXPLAIN_PREDICT

En el caso de los modelos de regresión lineal, los valores de Shapley se usan a fin de generar valores de atribución de atributos para cada atributo del modelo. ML.EXPLAIN_PREDICT genera las tres atribuciones de atributos principales por fila de la tabla penguins porque top_k_features se configuró como 3 en la consulta. Estas atribuciones se ordenan por el valor absoluto de la atribución en orden descendente. En todos los ejemplos, la característica sex contribuyó más a la predicción general.

Explica el modelo de forma global

Para saber qué características son generalmente las más importantes a fin de determinar el peso del pingüino, puedes usar la función ML.GLOBAL_EXPLAIN. Para usar ML.GLOBAL_EXPLAIN, debes volver a entrenar el modelo con la opción ENABLE_GLOBAL_EXPLAIN configurada como TRUE.

Vuelve a entrenar y obtén explicaciones globales para el modelo:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el Editor de consultas, ejecuta la siguiente consulta para volver a entrenar el modelo:

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
      OPTIONS (
        model_type = 'linear_reg',
        input_label_cols = ['body_mass_g'],
        enable_global_explain = TRUE)
    AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
    
  3. En el Editor de consultas, ejecuta la siguiente consulta para obtener explicaciones globales:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `bqml_tutorial.penguins_model`)
    
  4. Los resultados debería ser similar al siguiente:

    Resultado de ML.GLOBAL_EXPLAIN

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:

  1. Si es necesario, abre la página de BigQuery en la consola de Google Cloud.

    Ir a la página de BigQuery

  2. En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.

  3. 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.

  4. 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:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a 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 borrar el proyecto.

Próximos pasos