Crea modelos de aprendizaje automático en BigQuery ML
En este instructivo, se muestra cómo crear un modelo de regresión logística con BigQuery ML en la consola de Google Cloud.
BigQuery ML te permite crear y entrenar modelos de aprendizaje automático en BigQuery mediante consultas de SQL. Esto ayuda a que el aprendizaje automático sea más accesible, ya que te permite usar herramientas conocidas, como el editor de SQL de BigQuery y, también, aumenta la velocidad de desarrollo, ya que quita la necesidad de mover datos a un entorno de aprendizaje automático independiente.
En este instructivo, se usa el ejemplo Conjunto de datos de muestra de Google Analytics para BigQuery a fin de crear un modelo que prediga si un visitante de un sitio web realizará una transacción. Para obtener más información sobre el esquema del conjunto de datos de Analytics, consulta Esquema de BigQuery Export en el Centro de ayuda de Analytics.
Objetivos
En este instructivo, se muestra cómo completar las siguientes tareas:
- Usar la sentencia
CREATE MODEL
para crear un modelo de regresión logística binaria. - Usar la función
ML.EVALUATE
para evaluar el modelo. - Usar la función
ML.PREDICT
para hacer predicciones mediante el modelo.
Costos
En este instructivo, se usan componentes facturables de Google Cloud, 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 los precios de BigQuery ML.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery se habilita automáticamente en proyectos nuevos.
Para activar BigQuery en un proyecto existente, ve a
Enable the BigQuery API.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:
En la consola de Google Cloud, ve a la página de 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, ingresa
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Los conjuntos de datos públicos se almacenan en la multirregión
US
. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
Crea un modelo de regresión logística
Crea un modelo de regresión logística con un conjunto de datos de muestra de Analytics para BigQuery.
SQL
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE MODEL `bqml_tutorial.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
La consulta tarda varios minutos en completarse. Una vez completada la primera iteración, tu modelo (
sample_model
) aparece en el panel de navegación. Debido a que en la consulta se usa una sentenciaCREATE MODEL
para crear un modelo, no se muestran los resultados de la consulta.
Detalles de la consulta
La declaración CREATE MODEL
crea el modelo y, luego, lo entrena con los datos recuperados por la declaración SELECT
de tu consulta.
La cláusula OPTIONS(model_type='logistic_reg')
crea un modelo de regresión logística. Un modelo de regresión logística divide los datos de entrada en dos clases y, luego, calcula la probabilidad de que los datos estén en una de las clases. Lo que intentas detectar, por ejemplo, si un correo electrónico es spam, se representa con un 1 y otros valores se representan con un 0. La probabilidad de que un valor determinado pertenezca a la clase que intentas detectar se indica mediante un valor entre 0 y 1.
Por ejemplo, si un correo electrónico recibe una estimación de probabilidad de 0.9, hay una probabilidad del 90% de que el correo electrónico sea spam.
La declaración SELECT
de la consulta recupera las siguientes columnas que usa el modelo para predecir la probabilidad de que un cliente complete una transacción:
totals.transactions
: la cantidad total de transacciones de comercio electrónico dentro de la sesión. Si la cantidad de transacciones esNULL
, el valor en la columnalabel
se establece en0
. De lo contrario, se establece como1
. Estos valores representan los posibles resultados. Crear un alias con el nombrelabel
es una alternativa a la configuración de la opcióninput_label_cols=
en la declaraciónCREATE MODEL
.device.operatingSystem
: el sistema operativo del dispositivo del visitante.device.isMobile
: indica si el dispositivo del visitante es un dispositivo móvil.geoNetwork.country
: el país de origen de las sesiones, en función de la dirección IP.totals.pageviews
: la cantidad total de páginas vistas dentro de la sesión.
La cláusula FROM
: hace que la consulta entrene el modelo mediante las tablas de muestra bigquery-public-data.google_analytics_sample.ga_sessions
.
Estas tablas están fragmentadas por fecha, por lo que debes agregarlas mediante un comodín en el nombre de la tabla: google_analytics_sample.ga_sessions_*
.
La cláusula WHERE
, _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
, limita la cantidad de tablas que analiza la consulta. El período analizado es del 1 de agosto de 2016 al 30 de junio de 2017.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Consulta las estadísticas de pérdida del modelo
El aprendizaje automático consiste en crear un modelo que pueda usar datos para hacer una predicción. El modelo no es más que una función que toma datos de entrada y realiza cálculos para producir un resultado, es este caso, una predicción.
Los algoritmos de aprendizaje automático toman varios ejemplos en los que ya se conoce la predicción (como los datos históricos de las compras de los usuarios) y ajustan, de forma iterativa, las ponderaciones en el modelo para que sus predicciones coincidan con los valores reales. Para ello, minimiza qué tan equivocado está el modelo con una métrica llamada “pérdida”.
Se espera que para cada iteración, la pérdida debería disminuir, idealmente a cero. Una pérdida de cero significa que el modelo es 100% preciso.
Cuando entrenas el modelo, BigQuery ML divide los datos de entrada de manera automática en conjuntos de entrenamiento y evaluación para evitar el sobreajuste del modelo. Esto es necesario para que el algoritmo de entrenamiento no se ajuste tanto a los datos de entrenamiento que no pueda generalizarse a ejemplos nuevos.
Usa la consola de Google Cloud para ver cómo cambia la pérdida del modelo durante las iteraciones de entrenamiento del modelo:
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, expande bqml_tutorial > Modelos y, luego, haz clic en sample_model.
Haz clic en la pestaña Entrenamiento y observa el grafo Pérdida. En el gráfico Pérdida, se muestra el cambio en la métrica de pérdida en las iteraciones del conjunto de datos de entrenamiento. Si mantienes el cursor sobre el grafo, puedes ver que hay líneas para la pérdida de entrenamiento y la pérdida de evaluación. Como se realizó una regresión logística, el valor de pérdida de entrenamiento se calcula como pérdida logística mediante los datos de entrenamiento. La pérdida de evaluación es la pérdida de registro calculada en los datos de evaluación. Ambos tipos de pérdida representan los valores de pérdida promedio, promediados en todos los ejemplos en los conjuntos de datos respectivos para cada iteración.
También puedes ver los resultados del entrenamiento de modelos mediante la función ML.TRAINING_INFO
.
Evalúa el modelo
Evalúa el rendimiento del modelo con la función ML.EVALUATE
. La función ML.EVALUATE
evalúa los valores previstos que generó el modelo con los datos reales. Para calcular las métricas específicas de regresión logística, puedes usar la función de SQL ML.ROC_CURVE
o la función bigframes.ml.metrics.roc_curve
de BigQuery DataFrames.
En este instructivo, se usa un modelo de clasificación binaria que detecta transacciones. Los valores de la columna label
son las dos clases que generó el modelo: 0
(sin transacciones) y 1
(transacción realizada).
SQL
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
Los resultados deberían verse así:
+--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | precision | recall | accuracy | f1_score | log_loss | roc_auc | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+ | 0.468503937007874 | 0.11080074487895716 | 0.98534315834767638 | 0.17921686746987953 | 0.04624221101176898 | 0.98174125874125873 | +--------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
Debido a que realizaste una regresión logística, los resultados incluyen las siguientes columnas:
precision
: métrica para modelos de clasificación. La precisión identifica la frecuencia con la que un modelo predijo de manera correcta la clase positiva.recall
: métrica para los modelos de clasificación que responde a la siguiente pregunta: de todas las etiquetas positivas posibles, ¿cuántas identificó correctamente el modelo?accuracy
: la precisión es la fracción de las predicciones que un modelo de clasificación acertó.f1_score
: una medida de la precisión del modelo. La puntuación f1 es el promedio armónico de la precisión y la recuperación. El mejor valor de una puntuación f1 es 1. El peor valor es 0.log_loss
: la función de pérdida utilizada en una regresión logística. Esta es la medida de qué tan lejos están las predicciones del modelo de las etiquetas correctas.roc_auc
: el área bajo la curva ROC. Esta es la probabilidad de que un clasificador tenga más certeza de que un ejemplo positivo elegido al azar sea realmente positivo en comparación con que un ejemplo negativo elegido al azar sea positivo. Para obtener más información, consulta Clasificación en el Curso intensivo de aprendizaje automático.
Detalles de la consulta
La sentencia SELECT
inicial recupera las columnas de su modelo.
La cláusula FROM
usa la función ML.EVALUATE
en el modelo.
La sentencia SELECT
anidada y la cláusula FROM
son las mismas que las de la consulta CREATE MODEL
.
La cláusula WHERE
, _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
, limita la cantidad de tablas que analiza la consulta. El período analizado es del 1 de julio de 2017 al 1 de agosto de 2017. Estos son los datos que usas para evaluar el rendimiento predictivo del modelo. Se recolectaron en el mes inmediatamente posterior al período comprendido por los datos de entrenamiento.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Usa el modelo para predecir resultados
Usa el modelo para predecir la cantidad de transacciones realizadas por los visitantes del sitio web de cada país.
SQL
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10
Los resultados deberían verse así:
+----------------+---------------------------+ | country | total_predicted_purchases | +----------------+---------------------------+ | United States | 220 | | Taiwan | 8 | | Canada | 7 | | India | 2 | | Turkey | 2 | | Japan | 2 | | Italy | 1 | | Brazil | 1 | | Singapore | 1 | | Australia | 1 | +----------------+---------------------------+
Detalles de la consulta
La sentencia SELECT
inicial recupera la columna country
y suma la columna predicted_label
. La columna predicted_label
se genera mediante la función ML.PREDICT
. Cuando usas la función ML.PREDICT
, el nombre de la columna de resultado del 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 la etiqueta que describe mejor el valor de datos de entrada dado, ya sea 0
o 1
.
La función ML.PREDICT
se usa para predecir resultados con tu modelo.
La sentencia SELECT
anidada y la cláusula FROM
son las mismas que las de la consulta CREATE MODEL
.
La cláusula WHERE
, _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
, limita la cantidad de tablas que analiza la consulta. El período analizado es del 1 de julio de 2017 al 1 de agosto de 2017. Estos son los datos para los que realizas predicciones. Se recolectaron en el mes inmediatamente posterior al período comprendido por los datos de entrenamiento.
Las cláusulas GROUP BY
y ORDER BY
agrupan los resultados por país y los ordenan por la suma de las compras previstas en orden descendente.
En este caso, la cláusula LIMIT
se usa para mostrar solo los 10 primeros resultados.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Prediga compras por usuario
Predice la cantidad de transacciones que realizará cada visitante de un sitio web.
SQL
Esta consulta es idéntica a la consulta de la sección anterior, excepto por la cláusula GROUP BY
. Aquí la cláusula GROUP BY
, GROUP BY fullVisitorId
, se usa para agrupar los resultados por ID de visitante.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10
Los resultados deberían verse así:
+---------------------+---------------------------+ | fullVisitorId | total_predicted_purchases | +---------------------+---------------------------+ | 9417857471295131045 | 4 | | 112288330928895942 | 2 | | 2158257269735455737 | 2 | | 489038402765684003 | 2 | | 057693500927581077 | 2 | | 2969418676126258798 | 2 | | 5073919761051630191 | 2 | | 7420300501523012460 | 2 | | 0456807427403774085 | 2 | | 2105122376016897629 | 2 | +---------------------+---------------------------+
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames 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 BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.
Puedes borrar el proyecto que creaste o conservar el proyecto y borrar el conjunto de datos.
Borra el conjunto de datos
Borrar el proyecto quita todos tus conjuntos de datos y tablas. Si prefieres volver a usar el proyecto, puedes borrar el conjunto de datos que creaste en este instructivo:
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, selecciona el conjunto de datos bqml_tutorial que creaste.
Haz clic en > Borrar.
AccionesEn el cuadro de diálogo Borrar conjunto de datos, escribe
delete
para confirmar el comando de eliminación.Haz clic en Borrar.
Borra el proyecto
Para borrar el proyecto, haz lo siguiente:
- 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.
Próximos pasos
- Para obtener más información sobre el aprendizaje automático, consulta el Curso intensivo de aprendizaje automático.
- Para obtener una descripción general de BigQuery ML, consulta Introducción a BigQuery ML.
- Para obtener más información sobre la consola de Google Cloud, consulta Usa la consola de Google Cloud.