Hacer ingeniería de atributos con la cláusula TRANSFORM

En este instructivo, se te enseña a usar la TRANSFORM cláusula de la CREATE MODEL instrucción para realizar ingeniería de atributos al mismo tiempo que creas y entrenas un modelo. Con la cláusula TRANSFORM, puedes especificar una o más funciones de procesamiento previo para transformar los datos de entrada que usas para entrenar el modelo. El procesamiento previo que aplicas al modelo se aplica automáticamente cuando usas el modelo con las ML.EVALUATE y ML.PREDICT funciones.

En este instructivo, se usa el conjunto de datos público bigquery-public-data.ml_datasets.penguin.

Objetivos

En este instructivo, se te guiará para completar las siguientes tareas:

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud, incluyendo:

  • BigQuery
  • BigQuery ML

Para obtener más información sobre los costos de BigQuery, consulta la página de precios de BigQuery.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. BigQuery se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, dirígete a .

    Habilita la API de BigQuery.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    Habilitar la API

Crea un conjunto de datos

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

Console

  1. En la Google Cloud consola de, ve a la página 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.

  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, selecciona EE.UU..

    • Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos nuevo, usa el bq mk --dataset comando.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos establecida en US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirma que se haya creado el conjunto de datos:

    bq ls

API

Llama al datasets.insert método con un recurso de conjunto de datos definido.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Crea el modelo

Crea un modelo de regresión lineal para predecir el peso de un pingüino y entrenarlo en la tabla de muestra penguins.

La OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) cláusula indica que estás creando un modelo de regresión lineal. Un modelo de regresión lineal genera un valor continuo a partir de una combinación lineal de atributos de entrada. La columna body_mass_g es la columna de la etiqueta de entrada. Para los modelos de regresión lineal, la columna de la etiqueta debe tener un valor real (es decir, los valores de la columna deben ser números reales).

La cláusula TRANSFORM de esta consulta utiliza las siguientes columnas de la declaración SELECT:

  • body_mass_g: Se usa en el entrenamiento sin ningún cambio.
  • culmen_depth_mm: Se usa en el entrenamiento sin ningún cambio.
  • flipper_length_mm: Se usa en el entrenamiento sin ningún cambio.
  • bucketized_culmen_length: Se genera a partir de culmen_length_mm mediante el agrupamiento de culmen_length_mm basado en cuantiles con la función analítica ML.QUANTILE_BUCKETIZE().
  • culmen_length_mm: El valor original de culmen_length_mm, convertido en un valor STRING y usado en el entrenamiento.
  • species_sex: Se genera al cruzar species y sex mediante el uso de la función ML.FEATURE_CROSS.

No es necesario usar todas las columnas de la tabla de entrenamiento en la cláusula TRANSFORM.

La cláusula WHERE (WHERE body_mass_g IS NOT NULL AND RAND() < 0.2) excluye las filas donde el peso de los pingüinos es NULL y usa la función RAND para dibujar una muestra aleatoria de los datos.

Para crear un modelo, sigue estos pasos:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform`
      TRANSFORM(
        body_mass_g,
        culmen_depth_mm,
        flipper_length_mm,
        ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length,
        CAST(culmen_length_mm AS string) AS culmen_length_mm,
        ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex)
      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
      AND RAND() < 0.2;

    La consulta tarda unos 15 minutos en completarse, después de lo cual el modelo penguin_transform aparece en el panel Explorador. Debido a que en la consulta se usa una declaración CREATE MODEL para crear un modelo, no se muestran los resultados.

Evalúa el modelo

Evalúa el rendimiento del modelo con la función ML.EVALUATE. La función ML.EVALUATE evalúa los pesos de pingüinos previstos que muestra el modelo con los pesos reales de los pingüinos de los datos de entrenamiento.

La declaración SELECT anidada de esta consulta y la cláusula FROM son las mismas que las de la consulta CREATE MODEL. Debido a que usaste la cláusula TRANSFORM cuando creaste el modelo, no necesitas especificar las columnas y las transformaciones de nuevo en la función ML.EVALUATE. La función las recupera automáticamente del modelo.

Para evaluar el modelo, sigue estos pasos:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL
        ));

    Los resultados debería ser similar al siguiente:

    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |   64.21134350607677 | 13016.433317859564 |   7.140935762696211E-4 |     15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

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

    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.

Usa el modelo para predecir el peso de los pingüinos

Usa el modelo con la función ML.PREDICT para predecir el peso de los pingüinos machos.

La función ML.PREDICT muestra el valor previsto en la predicted_label_column_name columna, en este caso predicted_body_mass_g.

Cuando usas la función ML.PREDICT, no tienes que pasar todas las columnas que se usan en el entrenamiento de modelos. Solo se requieren las columnas que usaste en la cláusula TRANSFORM. Al igual que ML.EVALUATE, la función ML.PREDICT recupera automáticamente las columnas y las transformaciones de TRANSFORM del modelo.

Para obtener predicciones del modelo, sigue estos pasos:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    SELECT
      predicted_body_mass_g
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            sex = 'MALE'
        ));

    Los resultados debería ser similar al siguiente:

    +-----------------------+
    | predicted_body_mass_g |
    +-----------------------+
    |    2810.2868541725757 |
    +-----------------------+
    |    3813.6574220842676 |
    +-----------------------+
    |     4098.844698262214 |
    +-----------------------+
    |     4256.587135004173 |
    +-----------------------+
    |     3008.393497302691 |
    +-----------------------+
    |     ...               |
    +-----------------------+
    

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 Google Cloud consola.

    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. En el lado derecho de la ventana, haz clic en Borrar conjunto de datos. 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 Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que tú 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.

¿Qué sigue?