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

En este instructivo, se presenta BigQuery ML a los analistas de datos. BigQuery ML 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 compilen 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 natality 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 de la madre. La tabla de muestra natality 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 funciones:

  • BigQuery ML para crear un modelo de regresión lineal 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

En este instructivo, se usan componentes facturables de Cloud Platform, 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 la página Precios de BigQuery ML.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página Selector de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  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 existente, ve a Habilita la API de BigQuery.

    Habilita la API

Paso uno: Crea el 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, sigue estos pasos:

  1. Ve a la IU web de BigQuery en Cloud Console.

    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 Crear conjunto de datos (Create dataset).

    Crear conjunto de datos

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

    • En ID del conjunto de datos (Dataset ID), ingresa bqml_tutorial.
    • En Ubicación de los datos (Data location), selecciona Estados Unidos (EE.UU.) [United States (US)]. En la actualidad, los conjuntos de datos públicos se almacenan en la ubicación multirregión de 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 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, ejecutar el comando CREATE MODEL entrena el modelo que creas.

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 estás creando 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: VERDADERO si el niño es de sexo masculino, FALSO si es de sexo femenino (BOOL).
  • gestation_weeks: la cantidad de semanas de embarazo (INT64).
  • mother_age: edad reportada de la madre cuando da a luz (INT64).
  • mother_race: un número entero que corresponde al origen étnico de la madre (INT64, igual que child_race en el esquema de la tabla). Para obligar a BigQuery ML a tratar mother_race como un atributo no numérico, con cada valor distinto que representa una categoría diferente, la consulta convierte mother_race en una STRING. Esto es importante porque es más probable que el origen étnico tenga más significado como categoría que un número entero, que tiene orden y escala.

La cláusula FROM, bigquery-public-data.samples.natality, indica que estás consultando la tabla de muestra de natalidad en el conjunto de datos de muestras. Este conjunto de datos está 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 dibujar una muestra aleatoria de los datos.

Ejecuta la consulta CREATE MODEL

A fin de ejecutar la consulta CREATE MODEL para crear y entrenar tu modelo, sigue estos pasos:

  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.

    La consulta tarda unos 30 segundos en completarse, después de lo cual tu modelo (natality_model) aparece en el panel de navegación de la IU web de BigQuery. No verás los resultados de la consulta debido a que la consulta usa una declaración CREATE MODEL para crear una tabla.

Paso tres: obtén estadísticas de entrenamiento (opcional)

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, utilizarás la IU web de BigQuery.

Un algoritmo de aprendizaje automático compila un modelo mediante la examinación de muchos ejemplos, y trata de encontrar uno 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 de modelos que se generaron cuando ejecutaste la consulta CREATE MODEL, sigue estos pasos:

  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 Entrenamiento y, luego, en Tabla. Los resultados deberían verse de la siguiente manera:

    Resultado de ML.TRAINING_INFO

    La columna Pérdida de datos de entrenamiento (Training Data Loss) 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 es el error cuadrático medio. La columna Pérdida de datos de evaluación (Evaluation Data Loss) 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). La estrategia de optimización “normal_equation” se usa automáticamente para el entrenamiento, por lo que solo se requiere una iteración a fin de converger al modelo final. Para obtener más detalles sobre la opción optimize_strategy, consulta la declaración CREATE MODEL.

    Para obtener más detalles sobre la función ML.TRAINING_INFO y la opción de entrenamiento “optimize_strategy”, consulta la referencia de sintaxis de BigQuery ML.

Paso cuatro: evalúa tu modelo

Después de crear tu modelo, evalúas el rendimiento del clasificador con la función ML.EVALUATE. La función ML.EVALUATE evalúa los valores previstos frente a los datos reales.

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 anidada de esta consulta y la cláusula FROM son las mismas que las de la consulta CREATE MODEL.

La cláusula WHERE, WHERE weight_pounds IS NOT NULL, excluye las filas cuyo peso es NULL.

También puedes llamar a ML.EVALUATE sin proporcionar los datos de entrada. Utilizará las métricas de evaluación calculadas durante el entrenamiento:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`)

Ejecuta la consulta ML.EVALUATE

Para ejecutar la consulta ML.EVALUATE que evalúa el modelo, sigue estos pasos:

  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. Para configurar la ubicación de procesamiento, haz clic en Más > Configuración de consulta (More > Query settings) (opcional). En Ubicación de procesamiento (Processing location), elige US. Este paso es opcional porque la ubicación de procesamiento se detecta automáticamente en función de la ubicación del conjunto de datos.

    Configuración de consulta

  4. Haz clic en Ejecutar.

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

    Resultado 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. 0 indica que el modelo no explica la variabilidad de los datos de respuesta en torno a 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. Esta columna se genera mediante la función ML.PREDICT. Cuando usas la función ML.PREDICT, el nombre de la columna de salida 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, según la etiqueta que tenga la mayor probabilidad predicha.

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

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

La cláusula WHERE, WHERE state = "WY", indica que estás limitando 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. Para configurar la ubicación de procesamiento, haz clic en Más > Configuración de consulta (More > Query settings) (opcional). En Ubicación de procesamiento (Processing location), elige US. Este paso es opcional porque la ubicación de procesamiento se detecta automáticamente en función de la ubicación del conjunto de datos.

    Configuración de consulta

  4. Haz clic en Ejecutar.

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

    Resultado 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 de BigQuery.

    Ir a la IU web 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 Cloud Console, ve a la página Administrar recursos.

    Ir a la página Administrar recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Próximos pasos