BigQuery es la base de datos analítica de bajo costo, no-ops y completamente administrada de Google. Con BigQuery, puedes consultar muchos terabytes de datos sin tener que administrar infraestructuras y sin necesitar un administrador de base de datos. BigQuery usa SQL y puede aprovechar el modelo de pago por uso. Además, permite que te enfoques en el análisis de datos para buscar estadísticas valiosas.
BigQuery Machine Learning es una función de BigQuery con la que los analistas de datos pueden crear, entrenar, evaluar y predecir con modelos de aprendizaje automático y programación mínima.
En este lab, usarás el conjunto de datos de bicicletas de Londres para crear un modelo de regresión en BigQuery ML para predecir la duración de un viaje. Supongamos que tienes un negocio de alquiler de bicicletas con dos tipos de bicicletas en stock: una resistente y para viajes diarios, y otra de carrera, rápida pero frágil. Si es probable que el alquiler de bicicletas sea de larga duración, debemos contar con bicicletas de carrera. En cambio, si va a ser de corta duración, debemos tener en stock bicicletas para viajes diarios. Por lo tanto, para crear un sistema con un stock adecuado de bicicletas, debemos predecir la duración de los alquileres.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
Consultar y explorar el conjunto de datos de bicicletas de Londres para la ingeniería de atributos
Crear un modelo de regresión lineal en BigQuery ML
Evaluar el rendimiento de tu modelo de aprendizaje automático
En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
Accede a Qwiklabs desde una ventana de incógnito.
Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.
Cuando esté listo, haga clic en Comenzar lab.
Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.
Haga clic en Abrir Google Console.
Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
Si usa otras credenciales, se generarán errores o incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación.
Abra BigQuery en Console
En Google Cloud Console, seleccione el menú de navegación > BigQuery.
Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en Cloud Console, que contiene un vínculo a la guía de inicio rápido y enumera las actualizaciones de la IU.
Haga clic en Listo.
Tarea 1. Explora los datos de bicicletas para la ingeniería de atributos
El primer paso para solucionar un problema de AA es formularlo (es decir, identificar los atributos de nuestro modelo y la etiqueta). Dado que el objetivo de nuestro primer modelo es predecir la duración de un alquiler según nuestro conjunto de datos históricos de alquileres de bicicletas, la etiqueta es la duración del alquiler.
Si creemos que la duración variará en función de la estación en la que se alquile la bicicleta, el día de la semana y la hora del día, estos pueden ser nuestros atributos. Antes de continuar y crear un modelo con estos atributos, es recomendable verificar que estos factores realmente influyan en la etiqueta.
Proponer atributos para un modelo de aprendizaje automático se denomina ingeniería de atributos. A menudo, la ingeniería de atributos es la parte más importante de crear modelos de AA precisos y puede tener un impacto mucho mayor que ajustar hiperparámetros o decidir qué algoritmo usar. Una buena ingeniería de atributos requiere un conocimiento profundo de los datos y el dominio. A menudo, es un proceso de prueba de hipótesis: tienes una idea para un atributo, compruebas si funciona (tiene información mutua con la etiqueta) y, luego, lo agregas al modelo. Si no funciona, debes intentarlo nuevamente.
Impacto de la estación
Para comprobar si la duración de un alquiler varía según la estación, podemos ver el resultado de la siguiente consulta en Looker Studio.
En el EDITOR de consultas, pega la siguiente consulta:
SELECT
start_station_name,
AVG(duration) AS duration
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
GROUP BY
start_station_name
Haz clic en EJECUTAR.
Haz clic en ABRIR EN > Looker Studio en la consola de Cloud de BigQuery.
Cuando se te solicite, selecciona el botón EMPEZAR.
Haz clic en el Gráfico que se encuentra en el lienzo.
En la pestaña CONFIGURACIÓN del menú lateral derecho, establece la configuración de la siguiente manera:
Dimensión: start_station_name
Métrica: Duración
Ordenar por: Duración en orden Descendente
Interacción con el gráfico: Habilita Filtrado cruzado y Cambiar orden.
En la pestaña ESTILO del menú lateral derecho, establece la configuración de la siguiente manera:
Gráfico de barras: Vertical
Barras: 100
Ejes: Mostrar ejes
Tu trazado debe parecerse a lo siguiente:
No hay dudas de que varias estaciones están asociadas con alquileres de larga duración (más de 3,000 segundos), pero la mayoría de las estaciones tiene duraciones de un rango relativamente acotado. Si todas las estaciones en Londres tuviesen duraciones de un rango acotado, la estación en la que el alquiler se iniciara no sería un buen atributo. Sin embargo, en este problema, como se ve en el gráfico start_station_name, sí es importante.
Nota: No podemos usar end_station_name como un atributo, ya que, en el momento en el que se alquila la bicicleta, no sabemos dónde se devolverá.
Dado que estamos creando un modelo de aprendizaje automático para predecir eventos en el futuro, debemos tomar la precaución de no usar columnas que se desconozcan en el momento en que se realice la predicción. Este criterio de tiempo/causalidad impone limitaciones respecto de qué atributos podemos usar.
Impacto del día de la semana y la hora del día
Para los siguientes candidatos de atributos, el proceso es similar. Podemos comprobar si dayofweek (o, de manera similar, hourofday) es importante.
En la ventana del Editor de consultas, pega la siguiente consulta:
SELECT
EXTRACT(dayofweek
FROM
start_date) AS dayofweek,
AVG(duration) AS duration
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
GROUP BY
dayofweek
Haz clic en ABRIR EN > Looker Studio en la consola de Cloud de BigQuery.
Nota: Si ves un mensaje de error del sistema, debes realizar algunos cambios para visualizar los datos en Looker Studio descritos en los pasos del 3 al 11.
Haz clic en la tabla que contiene los datos duration y dayofweek.
En Configuración > Métrica, coloca el cursor sobre dayofweek y haz clic en el ícono de lápiz para editar.
En el menú desplegable Display format, haz clic en Número de semana y, luego, elige Formato de fecha personalizado.
Cambia la fecha personalizada por “Día” w y, luego, haz clic en Aplicar.
En el gráfico, ahora se mostrarán Día 1 a Día 7 en el campo dayofweek.
Haz clic en el gráfico en que se muestra el error del sistema.
En Configuración > Dimensión, haz clic en Duración y cambia a dayofweek.
En Configuración > Dimensión, coloca el cursor sobre dayofweek y haz clic en el ícono de lápiz para editar.
En el menú desplegable Display format, selecciona Formato de fecha personalizado y cambia la fecha personalizada por “Día” w. Luego, haz clic en Aplicar.
En Configuración > Métrica, haz clic en dayofweek y cambia a duration.
Para el día de la semana, la visualización debe parecerse a lo siguiente:
Para la hora del día, la visualización debe parecerse a lo siguiente:
Nota: Al igual que en los pasos anteriores, es posible que debas modificar las propiedades en Looker Studio para obtener el resultado deseado.
Está claro que la duración varía en función del día de la semana y de la hora del día. Al parecer, las duraciones son mayores los fines de semana (días 1 y 7) que los días de entre semana. De manera similar, las duraciones son mayores temprano a la mañana y a media tarde. Por lo tanto, dayofweek y hourofday son buenos atributos.
Impacto de la cantidad de bicicletas
Otro potencial atributo es la cantidad de bicicletas que hay en la estación. Podríamos formular la hipótesis de que las personas se quedan con las bicicletas durante más tiempo si hay menos en alquiler en la estación.
En la ventana del Editor de consultas, pega la siguiente consulta:
SELECT
bikes_count,
AVG(duration) AS duration
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
JOIN
`bigquery-public-data`.london_bicycles.cycle_stations
ON
cycle_hire.start_station_name = cycle_stations.name
GROUP BY
bikes_count
Visualiza tus datos en Looker Studio.
Notamos que la relación es ruidosa y no tiene una tendencia visible (compárala con la hora del día, por ejemplo). Esto indica que la cantidad de bicicletas no es un buen atributo.
Tarea 2. Crea un conjunto de datos de entrenamiento
Según la exploración del conjunto de datos de bicicletas y la relación de varias columnas con la columna de la etiqueta, podemos preparar el conjunto de datos de entrenamiento. Para hacerlo, extraemos los atributos seleccionados y la etiqueta:
SELECT
duration,
start_station_name,
CAST(EXTRACT(dayofweek
FROM
start_date) AS STRING) AS dayofweek,
CAST(EXTRACT(hour
FROM
start_date) AS STRING) AS hourofday
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
Las columnas de atributos deben ser numéricas (INT64, FLOAT64, etc.) o categóricas (STRING). Si el atributo es numérico, pero debe tratarse como categórico, debemos transmitirlo como string. Esto explica por qué transmitimos las columnas dayofweek y hourofday, que son números enteros (en los rangos 1 a 7 y 0 a 23, respectivamente), en cadenas.
Si la preparación de datos implica uniones o transformaciones costosas en términos de procesamiento, puede ser una buena idea guardar los datos de entrenamiento preparados como una tabla para no repetir este trabajo durante la experimentación. Si las transformaciones son triviales, pero la consulta en sí misma es muy larga, podría resultar conveniente guardarla como una vista para evitar la repetición.
En este caso, la consulta es sencilla y corta; por lo tanto, para mayor claridad, no la guardaremos.
Crea un conjunto de datos en BigQuery llamado bike_model para almacenar tu modelo. Establece el Tipo de ubicación como Multirregión y selecciona la región UE (múltiples regiones de la Unión Europea), ya que los datos con los que estamos entrenando se encuentran en la UE. Haz clic en Crear conjunto de datos.
Para entrenar el modelo de AA y guardarlo en el conjunto de datos bike_model, debemos llamar a CREATE MODEL, que funciona de manera similar a CREATE TABLE. Dado que la etiqueta que estamos intentando predecir es numérica, este es un problema de regresión, por lo que la opción más adecuada es elegir linear_reg como el tipo de modelo en OPTIONS.
Ingresa la siguiente consulta en el Editor de consultas:
CREATE OR REPLACE MODEL
bike_model.model
OPTIONS
(input_label_cols=['duration'],
model_type='linear_reg') AS
SELECT
duration,
start_station_name,
CAST(EXTRACT(dayofweek
FROM
start_date) AS STRING) AS dayofweek,
CAST(EXTRACT(hour
FROM
start_date) AS STRING) AS hourofday
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
WHERE `duration` IS NOT NULL
Ten en cuenta que el entrenamiento de este modelo tarda entre 2 y 3 minutos.
Para ver algunas métricas relacionadas con el entrenamiento de modelos, ingresa la siguiente consulta en la ventana del editor de BigQuery:
SELECT * FROM ML.EVALUATE(MODEL `bike_model.model`)
El error absoluto promedio es 1,025 segundos, es decir, aproximadamente 17 minutos. Esto significa que debemos esperar poder predecir la duración de los alquileres de bicicletas con un error promedio de aproximadamente 17 minutos.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un conjunto de datos de entrenamiento
Tarea 3. Mejora el modelo con la ingeniería de atributos
Combina días de la semana
Podríamos haber elegido otras maneras para representar los atributos que tenemos. Por ejemplo, recuerda que, cuando exploramos la relación entre dayofweek y duration de los alquileres, descubrimos que las duraciones eran mayores los fines de semana que los días de entre semana. Por lo tanto, en lugar de tratar el valor sin procesar de dayofweek como un atributo, podemos emplear esta estadística fusionando varios valores de dayofweek en la categoría de día de semana.
Crea un modelo de AA de BigQuery con los días de semana combinados a través de la siguiente consulta:
CREATE OR REPLACE MODEL
bike_model.model_weekday
OPTIONS
(input_label_cols=['duration'],
model_type='linear_reg') AS
SELECT
duration,
start_station_name,
IF
(EXTRACT(dayofweek
FROM
start_date) BETWEEN 2 AND 6,
'weekday',
'weekend') AS dayofweek,
CAST(EXTRACT(hour
FROM
start_date) AS STRING) AS hourofday
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
WHERE `duration` IS NOT NULL
Para ver las métricas de este modelo, ingresa la siguiente consulta en la ventana del editor de BigQuery:
SELECT * FROM ML.EVALUATE(MODEL `bike_model.model_weekday`)
Este modelo tiene como resultado un error absoluto promedio de 966 segundos, que es inferior a los 1,025 segundos del modelo original, lo que significa que mejoró.
Crea intervalos de la hora del día
En función de la relación entre hourofday y duration, podemos experimentar con la creación de buckets de variables en 4 discretizaciones: (-inf,5), [5,10), [10,17) y [17,inf).
Para crear un modelo de AA de BigQuery con la hora del día en buckets y atributos de días de semana combinados, usa la siguiente consulta:
CREATE OR REPLACE MODEL
bike_model.model_bucketized
OPTIONS
(input_label_cols=['duration'],
model_type='linear_reg') AS
SELECT
duration,
start_station_name,
IF
(EXTRACT(dayofweek
FROM
start_date) BETWEEN 2 AND 6,
'weekday',
'weekend') AS dayofweek,
ML.BUCKETIZE(EXTRACT(hour
FROM
start_date),
[5, 10, 17]) AS hourofday
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
WHERE `duration` IS NOT NULL
Para ver las métricas de este modelo, ingresa la siguiente consulta en la ventana del editor de BigQuery:
SELECT * FROM ML.EVALUATE(MODEL `bike_model.model_bucketized`)
Este modelo tiene como resultado un error absoluto promedio de 904 segundos, que es inferior a los 966 segundos del modelo de día de entre semana a fin de semana. Es una mejora adicional.
Haz clic en Revisar mi progreso para verificar el objetivo.
Mejorar el modelo con la ingeniería de atributos
Tarea 4. Realiza predicciones
Nuestro mejor modelo contiene varias transformaciones de datos. ¿No sería bueno que BigQuery pudiera recordar los conjuntos de transformaciones que hicimos en el entrenamiento y los aplicara automáticamente en el momento de la predicción? Puedes hacerlo, gracias a la cláusula TRANSFORM.
En este caso, el modelo resultante necesita únicamente start_station_name y start_date para predecir duration. Las transformaciones se guardan y se llevan a cabo en los datos sin procesar proporcionados para crear atributos de entrada para el modelo. La principal ventaja de colocar todas las funciones de procesamiento previo dentro de la cláusula TRANSFORM es que no es necesario que los clientes del modelo sepan qué tipo de procesamiento previo se realizó.
Para crear un modelo de AA de BigQuery con la cláusula TRANSFORM que incorpore la hora del día en buckets y atributos de días de la semana combinados, usa la siguiente consulta:
CREATE OR REPLACE MODEL
bike_model.model_bucketized TRANSFORM(* EXCEPT(start_date),
IF
(EXTRACT(dayofweek
FROM
start_date) BETWEEN 2 AND 6,
'weekday',
'weekend') AS dayofweek,
ML.BUCKETIZE(EXTRACT(HOUR
FROM
start_date),
[5, 10, 17]) AS hourofday )
OPTIONS
(input_label_cols=['duration'],
model_type='linear_reg') AS
SELECT
duration,
start_station_name,
start_date
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
WHERE `duration` IS NOT NULL
Con la cláusula TRANSFORM en su lugar, ingresa esta consulta para predecir la duración del alquiler en Park Lane ahora mismo (tu resultado variará):
SELECT
*
FROM
ML.PREDICT(MODEL bike_model.model_bucketized,
(
SELECT
'Park Lane , Hyde Park' AS start_station_name,
CURRENT_TIMESTAMP() AS start_date) )
Para realizar predicciones en lote en una muestra de 100 filas en el conjunto de entrenamiento, usa la siguiente consulta:
SELECT
*
FROM
ML.PREDICT(MODEL bike_model.model_bucketized,
(
SELECT
start_station_name,
start_date
FROM
`bigquery-public-data`.london_bicycles.cycle_hire
LIMIT
100) )
Haz clic en Revisar mi progreso para verificar el objetivo.
Realizar predicciones
Tarea 5. Examina los pesos del modelo
Un modelo de regresión lineal predice el resultado como una suma ponderada de sus entradas. A menudo, los pesos del modelo deben utilizarse en un entorno de producción.
Examina (o exporta) los pesos de tu modelo con la siguiente consulta:
SELECT * FROM ML.WEIGHTS(MODEL bike_model.model_bucketized)
Ten en cuenta que los atributos numéricos tienen un único peso, mientras que los atributos categóricos tienen un peso para cada valor posible. Por ejemplo, el atributo dayofweek tiene los siguientes pesos:
Esto significa que, si el día es un día de semana, la contribución de este atributo a la predicción de duración general es 1,709 segundos (los pesos que proporcionan el rendimiento óptimo no son únicos, por lo que podrías obtener un valor diferente).
Haz clic en Revisar mi progreso para verificar el objetivo.
Examinar los pesos del modelo
Finalice su lab
Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.
La cantidad de estrellas indica lo siguiente:
1 estrella = Muy insatisfecho
2 estrellas = Insatisfecho
3 estrellas = Neutral
4 estrellas = Satisfecho
5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.
Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.
Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
.
Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar
Usa la navegación privada
Copia el nombre de usuario y la contraseña proporcionados para el lab
Haz clic en Abrir la consola en modo privado
Accede a la consola
Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación
No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
Un lab a la vez
Confirma para finalizar todos los labs existentes y comenzar este
Usa la navegación privada para ejecutar el lab
Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así
evitarás cualquier conflicto entre tu cuenta personal y la cuenta
de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
En este lab, utilizarás el conjunto de datos de bicicletas de Londres para crear un modelo de regresión en BQML que prediga la duración de un viaje.
Duración:
0 min de configuración
·
Acceso por 60 min
·
60 min para completar