En este tutorial, usarás un modelo de regresión logística binario en BigQuery ML para predecir el intervalo de ingresos de las personas en función de sus datos demográficos. Un modelo de regresión logística binaria predice si un valor se incluye en una de las dos categorías. En este caso, se trata de determinar si los ingresos anuales de una persona son superiores o inferiores a 50.000 USD.
En este tutorial se usa el conjunto de datos
bigquery-public-data.ml_datasets.census_adult_income
. Este conjunto de datos contiene información demográfica y sobre ingresos de residentes de EE. UU. de los años 2000 y 2010.
Objetivos
En este tutorial, realizarás las siguientes tareas:- Crea un modelo de regresión logística.
- Evalúa el modelo.
- Hacer predicciones con el modelo.
- Explica los resultados que ha producido el modelo.
Costes
En este tutorial se usan componentes facturables de Google Cloud, incluidos los siguientes:
- BigQuery
- BigQuery ML
Para obtener más información sobre los costes de BigQuery, consulta la página de precios de BigQuery.
Para obtener más información sobre los costes de BigQuery ML, consulta los precios de BigQuery ML.
Antes de empezar
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.
Permisos obligatorios
Para crear el modelo con BigQuery ML, necesita los siguientes permisos de gestión de identidades y accesos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Para ejecutar la inferencia, necesitas los siguientes permisos:
bigquery.models.getData
en el modelobigquery.jobs.create
Introducción
Una tarea habitual en el aprendizaje automático es clasificar los datos en uno de los dos tipos, conocidos como etiquetas. Por ejemplo, un comercio podría querer predecir si un cliente concreto comprará un nuevo producto en función de otra información sobre ese cliente. En ese caso, las dos etiquetas podrían ser will buy
y won't buy
. El comercio puede crear un conjunto de datos de forma que una columna represente ambas etiquetas y también contenga información del cliente, como su ubicación, sus compras anteriores y sus preferencias declaradas. El comercio puede usar un modelo de regresión logística binaria que utilice esta información del cliente para predecir qué etiqueta representa mejor a cada cliente.
En este tutorial, crearás un modelo de regresión logística binaria que predice si los ingresos de una persona que ha respondido al censo de EE. UU. se encuentran en uno de los dos intervalos en función de los atributos demográficos de esa persona.
Crear conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, introduce
census
.En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).
Los conjuntos de datos públicos se almacenan en la
US
multirregión. Para simplificar el proceso, almacena el conjunto de datos en la misma ubicación.Deje el resto de los ajustes predeterminados tal como están y haga clic en Crear conjunto de datos.
Examina los datos
Examina el conjunto de datos e identifica las columnas que se van a usar como datos de entrenamiento para el modelo de regresión logística. Selecciona 100 filas de la tabla census_adult_income
:
SQL
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta de GoogleSQL:
SELECT age, workclass, marital_status, education_num, occupation, hours_per_week, income_bracket, functional_weight FROM `bigquery-public-data.ml_datasets.census_adult_income` LIMIT 100;
Los resultados deberían ser similares a los siguientes:
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Los resultados de la consulta muestran que la columna income_bracket
de la tabla census_adult_income
solo tiene uno de estos dos valores: <=50K
o >50K
.
Preparar los datos de muestra
En este tutorial, predecirás los ingresos de los participantes del censo en función de los valores de las siguientes columnas de la tabla census_adult_income
:
age
: la edad del encuestado.workclass
: clase de trabajo realizado. Por ejemplo, administración local, privada o autónomo.marital_status
education_num
: el nivel de estudios más alto del encuestado.occupation
hours_per_week
: horas trabajadas a la semana.
Excluye las columnas que duplican datos. Por ejemplo, la columna education
, ya que los valores de las columnas education
y education_num
expresan los mismos datos en formatos diferentes.
La columna functional_weight
es el número de personas que la organización del censo cree que representa una fila concreta. Como el valor de esta columna no está relacionado con el valor de income_bracket
de ninguna fila, puede usar el valor de esta columna para separar los datos en conjuntos de entrenamiento, evaluación y predicción. Para ello, cree una columna dataframe
derivada de la columna functional_weight
. Etiqueta el 80% de los datos para entrenar el modelo, el 10% para la evaluación y el 10% para la predicción.
SQL
Crea una vista con los datos de muestra.
Esta vista se usa en la instrucción CREATE MODEL
más adelante en este tutorial.
Ejecuta la consulta que prepara los datos de muestra:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta:
CREATE OR REPLACE VIEW `census.input_data` AS SELECT age, workclass, marital_status, education_num, occupation, 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`;
Consulta los datos de muestra:
SELECT * FROM `census.input_data`;
BigQuery DataFrames
Crea un DataFrame
llamado input_data
. Usarás input_data
más adelante en este tutorial para entrenar el modelo, evaluarlo y hacer predicciones.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Crear un modelo de regresión logística
Crea un modelo de regresión logística con los datos de entrenamiento que has etiquetado en la sección anterior.
SQL
Usa la instrucción CREATE MODEL
y especifica LOGISTIC_REG
para el tipo de modelo.
A continuación, se indican algunos aspectos útiles sobre la instrucción CREATE MODEL
:
La opción
input_label_cols
especifica qué columna de la instrucciónSELECT
se debe usar como columna de etiqueta. En este caso, la columna de etiquetas esincome_bracket
, por lo que el modelo aprende cuál de los dos valores deincome_bracket
es más probable para una fila determinada en función de los demás valores presentes en esa fila.No es necesario especificar si un modelo de regresión logística es binario o multiclase. BigQuery ML determina qué tipo de modelo se va a entrenar en función del número de valores únicos de la columna de etiquetas.
La opción
auto_class_weights
se ha definido comoTRUE
para equilibrar las etiquetas de clase en los datos de entrenamiento. De forma predeterminada, los datos de entrenamiento no tienen ponderación. Si las etiquetas de los datos de entrenamiento están desequilibradas, el modelo puede aprender a predecir la clase de etiquetas más popular con más intensidad. En este caso, la mayoría de los encuestados del conjunto de datos se encuentran en el tramo de ingresos más bajo. Esto puede llevar a un modelo que prediga demasiado la categoría de ingresos más baja. 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 opción
enable_global_explain
tiene el valorTRUE
para que puedas usar la funciónML.GLOBAL_EXPLAIN
en el modelo más adelante en el tutorial.La instrucción
SELECT
consulta la vistainput_data
, que contiene los datos de ejemplo. La cláusulaWHERE
filtra las filas para que solo se usen las filas etiquetadas como datos de entrenamiento para entrenar el modelo.
Ejecuta la consulta que crea tu modelo de regresión logística:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta:
CREATE OR REPLACE MODEL `census.census_model` OPTIONS ( model_type='LOGISTIC_REG', auto_class_weights=TRUE, enable_global_explain=TRUE, data_split_method='NO_SPLIT', input_label_cols=['income_bracket'], max_iterations=15) AS SELECT * EXCEPT(dataframe) FROM `census.input_data` WHERE dataframe = 'training'
En el panel Explorador, haga clic en Conjuntos de datos.
En el panel Conjuntos de datos, haz clic en
census
.Haz clic en el panel Modelos.
Haz clic en
census_model
.En la pestaña Detalles se muestran los atributos que BigQuery ML ha usado para realizar la regresión logística.
BigQuery DataFrames
Usa el método
fit
para entrenar el modelo y el método
to_gbq
para guardarlo en tu conjunto de datos.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Evaluar el rendimiento del modelo
Después de crear el modelo, evalúa su rendimiento en función de los datos de evaluación.
SQL
La función ML.EVALUATE
evalúa los valores predichos generados por el modelo en comparación con los datos de evaluación.
Como entrada, la función ML.EVALUATE
toma el modelo entrenado y las filas de la vista input_data
que tienen evaluation
como valor de la columna dataframe
. La función devuelve una sola fila de estadísticas sobre el modelo.
Ejecuta la consulta ML.EVALUATE
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta:
SELECT * FROM ML.EVALUATE (MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'evaluation' ) );
Los resultados deberían ser similares a los siguientes:
BigQuery DataFrames
Usa el método score
para evaluar el modelo con los datos reales.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
También puedes consultar el panel Evaluación del modelo en la Google Cloud consola para ver las métricas de evaluación calculadas durante el entrenamiento:
Predecir la franja de ingresos
Usa el modelo para predecir el tramo de ingresos más probable de cada encuestado.
SQL
Usa la
función ML.PREDICT
para hacer predicciones sobre el tramo de ingresos probable. Como entrada, la función ML.PREDICT
toma el modelo entrenado y las filas de la vista input_data
que tienen prediction
como valor de la columna dataframe
.
Ejecuta la consulta ML.PREDICT
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta:
SELECT * FROM ML.PREDICT (MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'prediction' ) );
Los resultados deberían ser similares a los siguientes:
La columna predicted_income_bracket
contiene el tramo de ingresos previsto del encuestado.
BigQuery DataFrames
Usa el método
predict
para hacer predicciones sobre el tramo de ingresos probable.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Explicar los resultados de la predicción
Para saber 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 ampliada de la función ML.PREDICT
.
ML.EXPLAIN_PREDICT
no solo genera resultados de predicción, sino que también genera columnas adicionales para explicar los resultados de predicción. Para obtener más información sobre la interpretabilidad, consulta la información general sobre la IA interpretable de BigQuery ML.
Ejecuta la consulta ML.EXPLAIN_PREDICT
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta:
SELECT * FROM ML.EXPLAIN_PREDICT(MODEL `census.census_model`, ( SELECT * FROM `census.input_data` WHERE dataframe = 'evaluation'), STRUCT(3 as top_k_features));
Los resultados deberían ser similares a los siguientes:
En los modelos de regresión logística, los valores de Shapley se usan para determinar la atribución relativa de cada característica del modelo. Como la opción top_k_features
se ha definido como 3
en la consulta, ML.EXPLAIN_PREDICT
muestra las tres principales
atribuciones de la función de cada fila de la vista input_data
. Estas atribuciones se muestran en orden descendente según el valor absoluto de la atribución.
Explica el modelo de forma global
Para saber qué características son las más importantes para determinar la franja de ingresos, usa la función ML.GLOBAL_EXPLAIN
.
Obtener explicaciones globales del modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para obtener explicaciones globales:
SELECT * FROM ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
Los resultados deberían ser similares a los siguientes:
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar un conjunto de datos
Si eliminas un proyecto, se eliminarán todos los conjuntos de datos y todas las tablas que contenga. Si prefieres reutilizar el proyecto, puedes eliminar el conjunto de datos que has creado en este tutorial:
Si es necesario, abre la página de BigQuery en laGoogle Cloud consola.
En el menú de navegación, haga clic en el conjunto de datos census que ha creado.
Haz clic en Eliminar conjunto de datos, en la parte derecha de la ventana. Esta acción elimina el conjunto de datos y el modelo.
En el cuadro de diálogo Eliminar conjunto de datos, confirma el comando de eliminación escribiendo el nombre de tu conjunto de datos (
census
) y, a continuación, haz clic en Eliminar.
Eliminar un proyecto
Para ello, sigue las instrucciones que aparecen a continuación:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Siguientes pasos
- Para obtener una descripción general de BigQuery ML, consulta la introducción a BigQuery ML.
- Para obtener información sobre cómo crear modelos, consulta la página de sintaxis de
CREATE MODEL
.