arrow_back

Prediga la duración de un viaje en bicicleta con un modelo de regresión en BQML

Acceder Unirse
Obtén acceso a más de 700 labs y cursos

Prediga la duración de un viaje en bicicleta con un modelo de regresión en BQML

Lab 1 hora universal_currency_alt 5 créditos show_chart Avanzado
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Obtén acceso a más de 700 labs y cursos

Descripción general

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, te permite enfocarte 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
  • Extraer los pesos de tu modelo

Requisitos

  • Un proyecto de Google Cloud
  • Un navegador, como Google Chrome o Mozilla Firefox

Configuración y requisitos

En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.

  1. Accede a Qwiklabs desde una ventana de incógnito.

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

  3. Cuando esté listo, haga clic en Comenzar lab.

  4. Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.

  5. Haga clic en Abrir Google Console.

  6. 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.

  7. Acepta las condiciones y omite la página de recursos de recuperación.

Abra BigQuery Console

  1. En Google Cloud Console, seleccione Menú de navegación > BigQuery. Se abrirá el cuadro de mensaje Bienvenido 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.
  2. 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 Data Studio.

  1. 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
  1. Haga clic en EJECUTAR.
  2. Haz clic en EXPLORAR DATOS > Explorar con Data Studio en la consola de Cloud de BigQuery.
  3. Cuando se le solicite, seleccione el botón EMPEZAR.
  4. Selecciona AUTORIZAR cuando se te pregunte si Google Data Studio puede acceder a tus datos.
Nota: Si aparece el mensaje Oops… Not able to connect to your data, haz clic en Back. Haz clic en Guardar en el Explorador de Data Studio.
  1. En la pestaña Gráfico, selecciona Gráfico de columnas.

  2. En la pestaña DATOS del menú lateral derecho, establezca la configuración de la siguiente manera:

  • Dimensión: start_station_name
  • Métrica: Duración
  • Ordenar por: Duración en orden Descendente
  • Interacciones del gráfico: Marca Cross-filtering y Change sorting
  1. 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:

Un diagrama que se asemeja a los parámetros de configuración, los datos y los estilos seleccionados.

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.

Tenga en cuenta que 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.

  1. 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
  1. Visualiza tus datos en Data Studio. Para el día de la semana, la visualización debe parecerse a lo siguiente:

Un gráfico de barras en el que se muestra la duración en el eje Y (0-2k) y el día de la semana en el eje X (17-1).

Para la hora del día, la visualización debe parecerse a lo siguiente:

El gráfico de barras está desglosado de forma detallada, y las horas aparecen en el eje X en lugar de los días de la semana.

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.

  1. 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
  1. Visualiza tus datos en Data Studio.

Un gráfico de barras, con la duración (0-2.8k) en el eje Y, y bike_count (0-50) en el eje X.

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.

  1. Cree un conjunto de datos en BigQuery llamado bike_model para almacenar su modelo.
  2. Establezca la Ubicación de los datos en la región UE, ya que los datos que estamos entrenando están en la UE.
  3. Haz clic en Crear conjunto de datos.

La página Crear conjunto de datos (Create dataset), en la que se deben completar los campos ID de conjunto de datos y Ubicación de los datos, y el vencimiento de la tabla está configurado en Nunca.

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.

  1. Ingrese 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

Tenga en cuenta que el entrenamiento de este modelo tarda entre 2 y 3 minutos.

  1. 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 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.

  1. 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
  1. Para ver las métricas de este modelo, ingrese 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 intervalos de variables en 4 discretizaciones: (-inf,5), [5,10), [10,17) y [17,inf).

  1. Para crear un modelo de AA de BigQuery con la hora del día en intervalos y atributos de días de semana combinados, use 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
  1. Para ver las métricas de este modelo, ingrese 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ó.

  1. Para crear un modelo de AA de BigQuery con la cláusula TRANSFORM que incorpore la hora del día en intervalos y atributos de días de la semana combinados, use 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
  1. Con la cláusula TRANSFORM en su lugar, ingrese esta consulta para predecir la duración del alquiler en Park Lane ahora mismo (su 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) )

El resultado de la consulta con la información de predicted_duration, start_station_name y start-date.

  1. 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)

    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:

    El resultado de la consulta con “null” como peso dentro de la entrada procesada de dayofweek.

    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 su lab, haga clic en Finalizar lab. Qwiklabs quitará los recursos que usó y limpiará la cuenta por usted.

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.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. 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.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. 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.