Usa BigQuery ML para predecir el peso de un recién nacido

En este instructivo, se presenta BigQuery ML a los analistas de datos, una característica que permite a los usuarios crear y ejecutar modelos de aprendizaje automático en BigQuery mediante consultas de SQL. El objetivo es democratizar el aprendizaje automático. A fin de lograrlo, se habilita a los profesionales de SQL para que creen modelos con sus herramientas existentes y se elimina la necesidad de trasladar datos con el fin de aumentar la velocidad de desarrollo.

En este instructivo, debes usar la tabla de muestra de natalidad para crear un modelo que predice el peso de un recién nacido según el sexo del bebé, la duración del embarazo y la información demográfica sobre la madre. La tabla de muestra de natalidad contiene información sobre cada nacimiento en los Estados Unidos durante un período de 40 años.

Objetivos

En este instructivo, usarás las siguientes características:

  • BigQuery ML para crear un modelo de regresión lineal binario con la declaración CREATE MODEL
  • La función ML.EVALUATE para evaluar el modelo de AA
  • La función ML.PREDICT para hacer predicciones con el modelo de AA

Costos

Este instructivo usa componentes facturables de Cloud Platform, incluidos los siguientes:

  • Google BigQuery
  • BigQuery ML

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

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

Antes de comenzar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. BigQuery se habilita de forma automática en proyectos nuevos. Para activar BigQuery en un proyecto preexistente, dirígete a {% dynamic if "no_credentials" in setvar.task_params %} {% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %} {% dynamic if not setvar.redirect_url %} {% dynamic setvar redirect_url %}https://console.cloud.google.com{% dynamic endsetvar %} {% dynamic endif %}{% dynamic endif %} {% dynamic if setvar.in_henhouse_no_auth_whitelist %} {% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %} {% dynamic endif %} {% dynamic elif setvar.in_henhouse_service_account_whitelist %} {% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}SERVICE_ACCOUNT{% dynamic endsetvar %} {% dynamic endif %}{% dynamic endif %} {% dynamic if not setvar.service_account_roles and setvar.credential_type == "SERVICE_ACCOUNT" %} {% dynamic setvar service_account_roles %} {% dynamic endsetvar %} {% dynamic endif %} {% dynamic setvar console %} {% dynamic if "no_steps" not in setvar.task_params %}
  5. {% dynamic endif %} {% dynamic if setvar.api_list %} {% dynamic if setvar.in_henhouse_no_auth_whitelist or setvar.in_henhouse_service_account_whitelist %} Configurar un proyecto de GCP Console.

    Configurar un proyecto

    Haz clic para realizar alguna de las siguientes acciones:

    • Crear o seleccionar un proyecto.
    • Habilitar las {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}{% dynamic endif %}{% dynamic if "," in setvar.api_list %} API{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} necesarias para el proyecto.
    • {% dynamic if setvar.credential_type == 'SERVICE_ACCOUNT' %}
    • Crear una cuenta de servicio.
    • Descargar una clave privada como JSON.
    • {% dynamic endif %}

    Puedes visualizar y administrar estos recursos en GCP Console en cualquier momento.

    {% dynamic else %}{% dynamic if "no_text" not in setvar.task_params %} Habilita las {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}{% dynamic endif %}{% dynamic if "," in setvar.api_list %} API{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} necesarias. {% dynamic endif %}

    Habilita las {% dynamic if "," in setvar.api_list %} API{% dynamic else %} API{% dynamic endif %}

    {% dynamic endif %}{% dynamic endif %}{% dynamic if "no_steps" not in setvar.task_params %}
  6. {% dynamic endif %}{% dynamic endsetvar %}{% dynamic print setvar.console %}

Público

Este es un instructivo introductorio destinado a los analistas de datos.

Un analista de datos usa SQL estándar de BigQuery para analizar tendencias de datos que informan sobre la estrategia y las operaciones empresariales. Esto incluye el uso de BigQuery ML para entrenar y evaluar modelos del AA y realizar estadísticas predictivas.

Los analistas de datos usan una variedad de herramientas basadas, en su mayoría, en IU, incluidas las siguientes opciones:

  • La IU web de BigQuery
  • Hojas de cálculo
  • Software estadístico, como RStudio
  • Herramientas de visualización, como Cloud Datalab y Data Studio

Paso uno: crea tu conjunto de datos

El primer paso es crear un conjunto de datos de BigQuery donde se almacenará tu modelo de AA. Para crear tu conjunto de datos, haz lo siguiente:

  1. Dirígete a la IU web de BigQuery.

    Ir a la IU web de BigQuery

  2. En el panel de navegación, en la sección Recursos, haz clic en el nombre de tu proyecto.

  3. En el panel de detalles a la derecha, haz clic en Create dataset (Crear conjunto de datos).

  4. En la página Create dataset (Crear conjunto de datos), sigue estos pasos:

    • En Dataset ID (ID de conjunto de datos), ingresa bqml_tutorial.
    • En Data location (Ubicación de los datos), elige United States (US) [Estados Unidos (EE.UU.)]. En la actualidad, los conjuntos de datos públicos se almacenan en la ubicación multirregión US. Para que sea más simple, debes colocar tu conjunto de datos en la misma ubicación.

      Crear página de conjunto de datos

  5. Usa los valores predeterminados para el resto de la configuración y haz clic en Create dataset (Crear conjunto de datos).

Paso dos: crea tu modelo

A continuación, debes crear un modelo de regresión lineal con la tabla de muestra de natalidad para BigQuery. Con la siguiente consulta de SQL estándar se crea el modelo que debes usar para predecir el peso de un recién nacido.

#standardSQL
CREATE MODEL `bqml_tutorial.natality_model`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['weight_pounds']) AS
SELECT
  weight_pounds,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL
  AND RAND() < 0.001

Además de crear el modelo, el comando CREATE MODEL también lo entrena.

Detalles de la consulta

La cláusula CREATE MODEL se usa para crear y entrenar el modelo llamado bqml_tutorial.natality_model.

La cláusula OPTIONS(model_type='linear_reg', input_label_cols=['weight_pounds']) indica que se crea un modelo de regresión lineal. 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. La columna weight_pounds 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 (sus valores deben ser números reales).

La declaración SELECT de esta consulta usa las siguientes columnas para predecir el peso de un recién nacido:

  • weight_pounds: peso del niño, en libras (FLOAT64)
  • is_male: TRUE si el niño es varón, FALSE si es mujer (BOOL)
  • gestation_weeks: el número de semanas del embarazo (INT64)
  • mother_age: edad de la madre en el momento del parto (INT64)
  • mother_race: un valor entero que corresponde al origen étnico de la madre (INT64, igual que child_race en el esquema de la tabla) Para hacer que BigQuery ML trate mother_race como una característica no numérica, en la que cada valor distinto representa una clasificación diferente, la consulta convierte mother_race en una STRING. Esto es importante porque el origen étnico suele tener más significado como una clasificación en lugar de un número entero (que tiene orden y escala).

La cláusula FROM (bigquery-public-data.samples.natality) indica que se consulta la tabla de muestra de natalidad en el conjunto de datos de muestras, que se encuentra en el proyecto bigquery-public-data.

La cláusula WHERE (WHERE weight_pounds IS NOT NULL AND RAND() < 0.001) excluye las filas donde el peso es NULL y usa la función RAND para crear una muestra aleatoria de los datos.

Ejecuta la consulta CREATE MODEL

Si quieres ejecutar la consulta CREATE MODEL para crear y entrenar tu modelo, haz lo siguiente:

  1. En la IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    CREATE MODEL `bqml_tutorial.natality_model`
    OPTIONS
      (model_type='linear_reg',
        input_label_cols=['weight_pounds']) AS
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS string) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL
      AND RAND() < 0.001
    
  3. Haz clic en Ejecutar consulta.

    La consulta tarda unos minutos en completarse. Una vez completada la primera iteración, tu modelo (natality_model) aparece en el panel de navegación de la IU web de BigQuery. Debido a que la consulta usa una declaración CREATE MODEL para crear una tabla, sus resultados no son visibles.

(Opcional) Paso tres: 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 IU web de BigQuery. En este instructivo, se usa la IU web de BigQuery.

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 la multa para una mala predicción, un número que indica qué tan mala fue la predicción del modelo en un ejemplo individual. 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.

Para ver las estadísticas de entrenamiento del modelo que se generaron cuando se ejecutó la consulta CREATE MODEL, haz lo siguiente:

  1. En la sección Recursos de la IU web de BigQuery, expande [PROJECT_ID] > bqml_tutorial y, luego, haz clic en natality_model.

  2. Haz clic en la pestaña Model stats (Estadísticas del modelo). Los resultados deberían verse de la siguiente manera:

    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 la iteración dada en el conjunto de datos de entrenamiento. Como se realizó una regresión lineal, esta columna es el error cuadrático medio. La columna Evaluation Data Loss (Pérdida de datos de evaluación) es la misma métrica de pérdida calculada en el conjunto de datos de exclusión (datos que se usan a fin de validar el modelo y, por lo tanto, no se incluyen en el entrenamiento).

    Para obtener más detalles sobre la función ML.TRAINING_INFO, consulta la Referencia de sintaxis de BigQuery ML.

Paso cuatro: Evalúa tu modelo

Después de crear tu modelo, debes evaluar el rendimiento del clasificador con la función ML.EVALUATE. La función ML.EVALUATE compara los valores predichos con los reales. Un clasificador es uno de varios valores de destino enumerados para una etiqueta.

La consulta que se usa para evaluar el modelo es la siguiente:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      weight_pounds,
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL))

Detalles de la consulta

La primera declaración SELECT recupera las columnas de tu modelo.

La cláusula FROM usa la función ML.EVALUATE en tu modelo: bqml_tutorial.natality_model.

La declaración SELECT y la cláusula FROM anidadas de esta consulta son las mismas que las de la consulta CREATE MODEL.

La cláusula WHERE (WHERE weight_pounds IS NOT NULL) excluye las filas donde el peso es NULL.

Ejecuta la consulta ML.EVALUATE

Para ejecutar la consulta ML.EVALUATE que evalúa el modelo, haz lo siguiente:

  1. En la IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          weight_pounds,
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          weight_pounds IS NOT NULL))
    
  3. (Opcional) Para establecer la ubicación de procesamiento, haz clic en Opciones > Configuración de la consulta. En Ubicación del procesamiento, elige US. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática según la ubicación del conjunto de datos.

  4. Haz clic en Ejecutar consulta.

  5. Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse de la siguiente manera:

    Salida de ML.EVALUATE

    Debido a que se realizó 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. 0 indica que el modelo no explica la variabilidad de los datos de respuesta alrededor de la media. 1 indica que el modelo explica toda la variabilidad de los datos de respuesta alrededor de la media.

Paso cinco: Usa tu modelo para predecir resultados

Ahora que ya evaluaste tu modelo, el siguiente paso es usarlo para predecir un resultado. Usa tu modelo para predecir el peso de todos los bebés recién nacidos en Wyoming.

La consulta usada para predecir el resultado es la siguiente:

#standardSQL
SELECT
  predicted_weight_pounds
FROM
  ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      is_male,
      gestation_weeks,
      mother_age,
      CAST(mother_race AS STRING) AS mother_race
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      state = "WY"))

Detalles de la consulta

La primera declaración SELECT recupera la columna predicted_weight_pounds. A esta columna la genera la función ML.PREDICT. Cuando se usa la función ML.PREDICT, el nombre de la columna de resultado para el modelo es predicted_<label_column_name>. Para los modelos de regresión lineal, predicted_label es el valor estimado de label. Para los modelos de regresión logística, predicted_label es una de las dos etiquetas de entrada, depende cuál tenga la mayor probabilidad predicha.

La función ML.PREDICT se usa para predecir los resultados con tu modelo: bqml_tutorial.natality_model.

La declaración SELECT y la cláusula FROM anidadas de esta consulta son las mismas que las de la consulta CREATE MODEL.

La cláusula WHERE (WHERE state = “WY”) indica que se limita la predicción al estado de Wyoming.

Ejecuta la consulta ML.PREDICT

Para ejecutar la consulta que usa el modelo a fin de predecir un resultado, haz lo siguiente:

  1. En la IU web de BigQuery, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la siguiente consulta de SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
      predicted_weight_pounds
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          is_male,
          gestation_weeks,
          mother_age,
          CAST(mother_race AS STRING) AS mother_race
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          state = "WY"))
    
  3. (Opcional) Para establecer la ubicación de procesamiento, haz clic en Opciones > Configuración de la consulta. En Ubicación del procesamiento, elige US. Este paso es opcional porque la ubicación de procesamiento se detecta de forma automática según la ubicación del conjunto de datos.

  4. Haz clic en Ejecutar consulta.

  5. Cuando la consulta finalice, haz clic en la pestaña Results (Resultados) debajo del área de texto de la consulta. Los resultados deberían verse de la siguiente manera:

    Salida de ML.PREDICT

Limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

  • 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 IU web.

    Ir a la IU web

  2. En el panel de navegación, desplaza el cursor sobre el conjunto de datos bqml_tutorial que creaste.

  3. Haz clic en el ícono de la flecha hacia abajo imagen de flecha hacia abajo junto al nombre de tu conjunto de datos en el panel de navegación y haz clic en Delete dataset (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 Delete dataset, escribe el nombre de tu conjunto de datos (bqml_tutorial) para confirmar el borrado y luego haz clic en OK (Aceptar).

Borra tu proyecto

Para borrar el proyecto, haz lo siguiente:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

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

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.