Limita los valores previstos para un modelo de serie temporal
En este instructivo aprenderás a usar los límites para limitar los resultados previstos que muestra un modelo de serie temporal. En este instructivo, crearás dos modelos de serie temporal sobre los mismos datos, un modelo que usa límites y otro que no usa límites. Esto te permite comparar los resultados que muestran los modelos y comprender la diferencia que hace la especificación de los límites.
Usa los datos de new_york.citibike_trips
para entrenar los modelos de este instructivo. Este conjunto de datos contiene información sobre los viajes de Citi Bike en la ciudad de Nueva York.
Antes de seguir este instructivo, debes estar familiarizado con la previsión de series temporales individuales. Completa el instructivo Previsión de series temporales individuales a partir de datos de Google Analytics para obtener una introducción a este tema.
Permisos necesarios
- Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de IAM. Para crear el recurso de conexión, necesitas los siguientes permisos:
bigquery.connections.create
bigquery.connections.get
Para crear el modelo, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Para ejecutar inferencias, necesitas los siguientes permisos:
bigquery.models.getData
bigquery.jobs.create
Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.
Objetivos
En este instructivo usarás lo siguiente:
- La declaración
CREATE MODEL
, para crear un modelo de serie temporal - La función
ML.FORECAST
, para prever el total de visitas diarias
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 de 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.
-
Enable the BigQuery API.
-
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.
-
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.
Visualiza las series temporales que deseas prever
Antes de crear el modelo, es útil ver cómo se ve la serie temporal de entrada.
En la siguiente consulta, la cláusula FROM bigquery-public-data.new_york.citibike_trips
indica que consultas la tabla citibike_trips
en el conjunto de datos new_york
.
En la declaración SELECT
, la consulta usa la función EXTRACT
para extraer la información de la fecha de la columna starttime
. La consulta usa la cláusula COUNT(*)
para obtener la cantidad total diaria de viajes con Citi Bike.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
Para ejecutar la consulta, sigue estos pasos:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
Haz clic en Ejecutar. Los resultados de la consulta son similares a los siguientes.
Usa la consola de Google Cloud para graficar los datos de las series temporales. En el panel Resultados de la consulta, haz clic en la pestaña Gráfico. En el panel Configuración del gráfico, elige Barra para el Tipo de gráfico:
Crea un modelo de serie temporal
A continuación, crea un modelo de serie temporal mediante los datos de viajes de Citi Bike en NYC.
La siguiente consulta de GoogleSQL crea un modelo que predice el total de viajes diarios en bicicleta. La cláusula CREATE MODEL
crea y entrena un modelo llamado bqml_tutorial.nyc_citibike_arima_model
.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
La cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica que creas un modelo de serie temporal basado en ARIMA. De forma predeterminada, auto_arima=TRUE
, por lo que el algoritmo auto.ARIMA
ajusta de forma automática los hiperparámetros en los modelos ARIMA_PLUS
. El algoritmo se adapta a decenas de modelos de candidatos y elige el mejor con el criterio de información Akaike (AIC) más bajo.
Además, debido a que el valor predeterminado es data_frequency='AUTO_FREQUENCY'
, el proceso de entrenamiento infiere de forma automática la frecuencia de datos de la serie temporal de entrada. La declaración CREATE MODEL
usa decompose_time_series=TRUE
de forma predeterminada, por lo que las partes del historial y la previsión de la serie temporal se guardan en el modelo. Si configuras el parámetro time_series_id_col = 'start_station_id'
, el modelo se ajustará y preverá varias series temporales mediante una sola consulta basada en start_station_id
. Puedes usar esta información para comprender mejor cómo se prevén las series temporales si recuperas los componentes de las series temporales, como los períodos de temporada.
Ejecuta la consulta CREATE MODEL
para crear y entrenar el modelo:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Haz clic en Ejecutar.
La consulta tarda unos 80 segundos en completarse; luego, el modelo (
nyc_citibike_arima_model
) aparece en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Prevé las series temporales y visualiza los resultados
Para explicar cómo se prevén las series temporales, visualiza todos los componentes de las series temporales, como la estacionalidad y la tendencia, mediante la función ML.FORECAST
.
Para ello, siga estos pasos:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
Haz clic en Ejecutar. Los resultados de la consulta son similares a los siguientes:
Usa la consola de Google Cloud para graficar los datos de las series temporales. En el panel Resultados de la consulta, haz clic en la pestaña Gráfico:
En el gráfico, se muestran los valores previstos para la cantidad total diaria de viajes en Citi Bike en los que start_station_id=79
son números negativos, lo que no es útil. En cambio, el uso de un modelo con límites mejora los datos previstos.
Crea un modelo de serie temporal con límites
A continuación, crea un modelo de serie temporal con límites mediante los datos de viajes de Citi Bike en NYC.
La siguiente consulta de GoogleSQL crea un modelo que predice el total de viajes diarios en bicicleta. La cláusula CREATE MODEL
crea y entrena un modelo llamado bqml_tutorial.nyc_citibike_arima_model_with_limits
.
La diferencia clave entre este modelo y el modelo que creaste antes es la adición de la opción forecast_limit_lower_bound=0
. Esta opción hace que el modelo solo prediga valores mayores que 0, según los valores de la columna que especifica el argumento time_series_data_col
, en este caso num_trips
.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Ejecuta la consulta CREATE MODEL
para crear y entrenar el modelo:
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Haz clic en Ejecutar.
La consulta toma unos 100 segundos en completarse; luego, el modelo (
nyc_citibike_arima_model_with_limits
) aparece en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Prevé las series temporales mediante el modelo con límites
En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.
Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id ORDER BY forecast_timestamp,start_station_id
Haz clic en Ejecutar.
Usa la consola de Google Cloud para graficar los datos de las series temporales. En el panel Resultados de la consulta, haz clic en la pestaña Gráfico:
El modelo ARIMA PLUS detecta que la cantidad total diaria de viajes con Citi Bike en los que start_station_id=79
disminuye. Los valores de previsión a futuro seguirán esta tendencia y proporcionarán cifras de previsión relativamente pequeñas a medida que se acerque el futuro. En el gráfico, se muestran los valores previstos para la cantidad total diaria de viajes en Citi Bike en los que start_station_id=79
son números positivos, lo que es más útil. El modelo con límites detecta que la cantidad total diaria de viajes con Citi Bike en los que start_station_id=79
disminuye, pero aún proporciona valores de previsión significativos.
Como se muestra en este instructivo, las opciones forecast_limit_lower_bound
y forecast_limit_upper_bound
pueden ayudarte a obtener valores de previsión más significativos en situaciones similares a las que se muestran aquí, como cuando se prevén los precios de las acciones o las cifras de ventas futuras.
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:
Si es necesario, abre la página de BigQuery en la consola de Google Cloud.
En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.
Haz clic en Borrar conjunto de datos en el lado derecho de la ventana. Esta acción borra el conjunto de datos, la tabla y todos los datos.
En el cuadro de diálogo Borrar conjunto de datos, escribe el nombre del conjunto de datos (
bqml_tutorial
) para confirmar el comando de borrado y, luego, haz clic en Borrar.
Borra tu 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.
¿Qué sigue?
- Obtén información sobre cómo realizar varias previsiones de series temporales con una sola consulta a partir de los datos de viajes de Citi Bike en NYC.
- Obtén información sobre cómo acelerar ARIMA_PLUS para habilitar el pronóstico de 1 millón de series temporales en horas.
- 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.