Compila y usa un modelo de clasificación sobre datos censales

BigQuery ML admite el aprendizaje supervisado con el tipo de modelo de regresión logística. Puedes usar el tipo de modelo de regresión logística binaria para predecir si un valor pertenece a una de dos categorías, o bien, puedes usar el tipo de modelo de regresión de varias clases para predecir si un valor pertenece a una de varias categorías. Estos problemas se conocen como problemas de clasificación, ya que se usan para clasificar los datos en dos o más categorías.

En este instructivo, utilizarás un modelo de regresión logística binaria en BigQuery ML para predecir el rango de ingresos de los encuestados en el conjunto de datos del censo de EE.UU. Este conjunto de datos contiene la información demográfica y de ingresos de los residentes de EE.UU. de los años 2000 y 2010. Los datos incluyen la situación laboral, la categoría del trabajo, el nivel de educación y los datos de ingresos.

Objetivos

En este instructivo, realizarás las siguientes tareas:

  • Crearás un modelo de regresión logística.
  • Evaluarás el modelo de regresión logística.
  • Harás predicciones con él.

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 de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. BigQuery se habilita de forma automática en proyectos nuevos. Para activar BigQuery en un proyecto existente, ve a Habilita la API BigQuery.

    Habilita la API

Introducción

Un problema común con el aprendizaje automático es clasificar los datos en uno de dos tipos, conocidos como etiquetas. Por ejemplo, es posible que un minorista quiera predecir si un cliente determinado comprará un producto nuevo en función de otra información sobre ese cliente. En ese caso, las dos etiquetas podrían ser “will buy” y “will not buy”. Puedes construir tu conjunto de datos, de manera que una columna represente la etiqueta. Los datos que puedes usar para entrenar este modelo de regresión logística binaria incluyen la ubicación del cliente, sus compras anteriores, las preferencias informadas por el cliente, etc.

En este instructivo, utilizarás BigQuery ML para crear un modelo de regresión logística binaria que prediga si el ingreso de un encuestado del censo de EE.UU. se encuentra en uno de los dos rangos según los atributos demográficos del encuestado.

Para crear un modelo de regresión logística, se deben seguir los siguientes pasos.

  • Paso uno: Crea un conjunto de datos para almacenar tu modelo.
    El primer paso es crear un conjunto de datos de BigQuery a fin de almacenar tu modelo.
  • Paso dos: Examina tus datos.
    En este paso, examina el conjunto de datos y, luego, identifica qué columnas usar como datos de entrenamiento para tu modelo de regresión logística.
  • Paso tres: Selecciona tus datos de entrenamiento.
    El siguiente paso es preparar los datos que usarás para entrenar tu modelo de regresión logística binaria mediante la ejecución de una consulta en la tabla census_adult_income. Este paso permite identificar los atributos relevantes almacenarlos en una vista para consultas posteriores a fin de usarlos como datos de entrada.
  • Paso cuatro: Crea un modelo de regresión logística.
    En este paso, usa la declaración CREATE MODEL para crear tu modelo de regresión logística.
  • Paso cinco: Usa la función ML.EVALUATE para evaluar tu modelo.
    Luego, usa la función ML.EVALUATE para proporcionar estadísticas sobre el rendimiento del modelo.
  • Paso seis: Usa la función ML.PREDICT para predecir el ingreso de un participante.
    Finalmente, usa la función ML.PREDICT a fin de predecir el rango de ingresos para un conjunto determinado de participantes del censo.

Paso uno: Crea tu conjunto de datos

El primer paso es crear un conjunto de datos de BigQuery a fin de almacenar tu modelo. Para crear el conjunto de datos, sigue estos pasos:

  1. Ve a la página de BigQuery en Cloud Console.

    Ir a la página 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, ingresa census en ID del 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: Examina tus datos

El siguiente paso es examinar el conjunto de datos y, luego, identificar qué columnas usar como datos de entrenamiento para tu modelo de regresión logística. Puedes usar una consulta de SQL estándar para mostrar filas del conjunto de datos.

La siguiente consulta muestra 100 filas del conjunto de datos del censo de EE.UU.:

SELECT
  *
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
LIMIT
  100;

Ejecuta la consulta

Para ejecutar la consulta que muestra las filas de tu conjunto de datos, sigue estos pasos:

  1. En Cloud Console, 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:

    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    LIMIT
      100;
    
  3. Haz clic en Ejecutar.

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

    Resultado de ML.EVALUATE

    Los resultados de la consulta muestran que la columna income_bracket de la tabla census_adult_income tiene solo uno de dos valores: <=50K o >50K. También muestra que las columnas education y education_num de la tabla census_adult_income expresan los mismos datos en diferentes formatos. La columna functional_weight muestra la cantidad de personas que las organizaciones del censo creen que representa una fila en particular. Los valores de esta columna no están relacionados con el valor de income_bracket de una fila en particular.

Paso tres: Selecciona tus datos de entrenamiento

Luego, selecciona los datos utilizados para entrenar tu modelo de regresión logística. En este instructivo, predecirás el ingreso del encuestado del censo en función de los siguientes atributos:

  • Edad
  • Tipo de trabajo realizado
  • País de origen
  • Estado civil
  • Nivel de educación
  • Ocupación
  • Origen étnico
  • Horas trabajadas por semana

Con la siguiente consulta, se crea una vista que compila tus datos de entrenamiento. Esta vista se incluye en tu declaración CREATE MODEL más adelante en este instructivo.

CREATE OR REPLACE VIEW
  `census.input_view` AS
SELECT
  age,
  workclass,
  native_country,
  marital_status,
  education_num,
  occupation,
  race,
  hours_per_week,
  income_bracket,
  CASE
    WHEN MOD(functional_weight, 10) < 8 THEN 'training'
    WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
    WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
  END AS dataframe
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`

Detalles de la consulta

Esta consulta extrae datos de los encuestados del censo, como education_num, que representa el nivel de educación del encuestado; y workclass, que representa el tipo de trabajo que realiza el encuestado. Esta consulta excluye varias categorías que duplican datos, por ejemplo, las columnas education y education_num de la tabla census_adult_income expresan los mismos datos en formatos diferentes, por lo que esta consulta excluye la columna education. La columna dataframe usa la columna functional_weight excluida a fin de etiquetar el 80% de la fuente de datos para el entrenamiento y reserva los datos restantes para la evaluación y predicción. La consulta crea una vista que contiene estas columnas con el objetivo de que puedas usarlas para realizar el entrenamiento y la predicción más adelante.

Ejecuta la consulta

Para ejecutar la consulta que compila los datos de entrenamiento de tu modelo:

  1. En Cloud Console, 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:

    CREATE OR REPLACE VIEW
      `census.input_view` AS
    SELECT
      age,
      workclass,
      native_country,
      marital_status,
      education_num,
      occupation,
      race,
      hours_per_week,
      income_bracket,
      CASE
        WHEN MOD(functional_weight, 10) < 8 THEN 'training'
        WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
        WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
      END AS dataframe
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    
  3. Haz clic en Ejecutar.

  4. En el panel de navegación, en la sección Recursos, haz clic en el nombre de tu proyecto. La vista debería aparecer debajo.

  5. Haz clic en ella. El esquema de la vista aparece en la pestaña Esquema (Schema) debajo del editor de consultas.

    Resultados de la consulta

Paso cuatro: Crea un modelo de regresión logística

Ahora que examinaste tus datos de entrenamiento, el siguiente paso es crear un modelo de regresión logística con los datos.

Puedes crear y entrenar un modelo de regresión logística usando la declaración CREATE MODEL con la opción 'LOGISTIC_REG'. La siguiente consulta usa una declaración CREATE MODEL para entrenar un nuevo modelo de regresión logística binaria en la vista de la consulta anterior.

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    input_label_cols=['income_bracket']
  ) AS
SELECT
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'

Detalles de la consulta

La declaración CREATE MODEL entrena un modelo con los datos de entrenamiento en la declaración SELECT.

La cláusula OPTIONS especifica el tipo de modelo y las opciones de entrenamiento. Aquí, la opción LOGISTIC_REG especifica un tipo de modelo de regresión logística. No es necesario especificar un modelo de regresión logística binaria frente a un modelo de regresión logística de varias clases: BigQuery ML puede determinar cuál entrenar según la cantidad de valores únicos en la columna de la etiqueta.

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 income_bracket, por lo que el modelo aprenderá cuál de los dos valores de income_bracket es más probable que se base en los demás valores presentes en cada fila.

La opción 'auto_class_weights=TRUE' equilibra las etiquetas de clase en los datos de entrenamiento. De forma predeterminada, los datos de entrenamiento no están ponderados. Si las etiquetas en los datos de entrenamiento están desequilibradas, el modelo puede aprender a predecir en mayor medida la clase de etiquetas más popular. En este caso, la mayoría de los encuestados en el conjunto de datos están en el segmento de ingresos más bajos. Esto puede ocasionar que un modelo prediga el rango de ingresos más bajos con demasiada frecuencia. Los pesos de clase equilibran las etiquetas de clase calculando los pesos de cada clase en proporción inversa a la frecuencia de esa clase.

La declaración SELECT consulta la vista del Paso 2. Esta vista solo contiene las columnas con datos de atributos para entrenar el modelo. La cláusula WHERE filtra las filas en input_view para que solo se incluyan en los datos de entrenamiento aquellas filas que pertenecen al marco de datos de entrenamiento.

Ejecuta la consulta CREATE MODEL

Para ejecutar la consulta que crea tu modelo de regresión logística, realiza los siguientes pasos:

  1. En Cloud Console, 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:

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    data_split_method='NO_SPLIT',
    input_label_cols=['income_bracket'],
    max_iterations=15) AS
SELECT
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'
  1. Haga clic en Ejecutar.

  2. En el panel de navegación, en la sección Recursos, expande [PROJECT_ID] > censo y, luego, haz clic en census_model.

  3. Haz clic en la pestaña Esquema (Schema). El esquema del modelo enumera los atributos que BigQuery ML usó para realizar la regresión logística. El esquema debe verse así:

    Información de esquema del clúster

Paso cinco: Usa la función ML.EVALUATE para evaluar tu modelo

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

La consulta para evaluar el modelo es la siguiente:

SELECT
  *
FROM
  ML.EVALUATE (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'evaluation'
    )
  )

Detalles de la consulta

La función ML.EVALUATE toma el modelo entrenado en el Paso 1 y los datos de evaluación que muestra una subconsulta SELECT. La función muestra una sola fila de estadísticas del modelo. Esta consulta utiliza datos de input_view como datos de evaluación. La cláusula WHERE filtra los datos de entrada para que la subconsulta solo contenga filas en el marco de datos evaluation.

Ejecuta la consulta ML.EVALUATE

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

  1. En Cloud Console, 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:

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_view`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. Para configurar la ubicación de procesamiento, haz clic en Más > Configuración de consulta (More > Query settings) (opcional). En Processing location (Ubicación de procesamiento), 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 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 realizaste una regresión logística, los resultados incluyen las siguientes columnas:

    • precision
    • recall
    • accuracy
    • f1_score
    • log_loss
    • roc_auc

    La precisión del modelo describe la relación entre los valores previstos correctamente y las predicciones totales: una precisión de 0.80 significa que el 80% de las predicciones son correctas.

Paso seis: Usa la función ML.PREDICT para predecir el rango de ingresos

Para identificar el rango de ingresos al que pertenece un encuestado en particular, usa la función ML.PREDICT. La siguiente consulta predice el rango de ingresos de cada encuestado en el marco de datos prediction.

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )

Detalles de la consulta

La función ML.PREDICT predice los resultados con tu modelo y los datos de input_view, filtrados para incluir únicamente las filas en el marco de datos 'prediction'. La declaración superior SELECT recupera el resultado de la función ML.PREDICT.

Ejecuta la consulta ML.PREDICT

Para ejecutar la consulta ML.PREDICT, sigue estos pasos:

  1. En Cloud Console, 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.

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )
  1. Haz clic en Ejecutar.

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

    Resultados de ML.PREDICT

    predicted_income_bracket es el valor previsto de income_bracket.

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 página de BigQuery en Cloud Console.

    Ir a la página 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 y el modelo.

  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 haz clic en Cerrar para borrar el proyecto.

Próximos pasos