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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the 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 un conjunto de datos de muestra de Analytics para BigQuery.

SQL

Puedes crear 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.

Permite trabajar con BigQuery DataFrames.

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.

from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Drop rows with nulls to get training data
training_data = bq_df.dropna(subset=["body_mass_g"])

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data.drop(columns=["body_mass_g"])
label_columns = training_data[["body_mass_g"]]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
    replace=True,
)

La creación del modelo tarda 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 o la función score de BigQuery DataFrames para evaluar los valores previstos que generó el modelo con los datos reales.

SQL

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));
      

Permite trabajar con BigQuery DataFrames.

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.

import bigframes.pandas as bpd

# Select the model you will be evaluating. `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model` object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
)

# Score the model with input data defined in an earlier step to compare
# model predictions on feature_columns to true labels in label_columns.
score = model.score(feature_columns, label_columns)
# Expected output results:
# index  mean_absolute_error  mean_squared_error  mean_squared_log_error  median_absolute_error  r2_score  explained_variance
#   0        227.012237         81838.159892            0.00507                173.080816        0.872377    0.872377
#   1 rows x 6 columns

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 o la función predict de BigQuery DataFrames en el modelo para predecir la masa corporal en gramos de todos los pingüinos que viven en las islas Biscoe.

SQL

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'));

Permite trabajar con BigQuery DataFrames.

Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.

# Select the model you'll use for predictions. `read_gbq_model` loads
# model data from BigQuery, but you could also use the `model` object
# object from previous steps.
model = bpd.read_gbq_model(
    your_model_id,
    # For example: "bqml_tutorial.penguins_model",
)

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Use 'contains' function to filter by island containing the string
# "Biscoe".
biscoe_data = bq_df.loc[bq_df["island"].str.contains("Biscoe")]

result = model.predict(biscoe_data)

# Expected output results:
#     predicted_body_mass_g  	      species	                island	 culmen_length_mm  culmen_depth_mm   body_mass_g 	flipper_length_mm	sex
# 23	  4681.782896	   Gentoo penguin (Pygoscelis papua)	Biscoe	      <NA>	            <NA>	        <NA>	          <NA>	        <NA>
# 332	  4740.7907	       Gentoo penguin (Pygoscelis papua)	Biscoe	      46.2	            14.4	        214.0	          4650.0	    <NA>
# 160	  4731.310452	   Gentoo penguin (Pygoscelis papua)	Biscoe	      44.5	            14.3	        216.0	          4100.0	    <NA>

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

Realiza una limpieza

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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Próximos pasos