En este instructivo, aprenderás a usar un modelo de serie temporal multivariable para prever el valor futuro de una columna determinada, según el valor histórico de varios atributos de entrada.
En este instructivo, se realizan previsiones para varias series temporales. Los valores previstos se calculan para cada punto temporal, para cada valor en una o más columnas especificadas. Por ejemplo, si quisieras prever el clima y especificaras una columna que contenga datos de estado, los datos previstos contendrían previsiones para todos los puntos temporales del estado A, luego los valores previstos para todos los puntos temporales del estado B, y así sucesivamente. Si quisieras prever el clima y especificaras columnas que contengan datos de estado y ciudad, los datos previstos contendrían previsiones para todos los puntos temporales del estado A y la ciudad A, luego los valores previstos para todos los puntos temporales del estado A y la ciudad B, y así sucesivamente.
En este instructivo, se usan datos de las tablas públicas
bigquery-public-data.iowa_liquor_sales.sales
y
bigquery-public-data.covid19_weathersource_com.postal_code_day_history. La tabla bigquery-public-data.iowa_liquor_sales.sales contiene
datos de ventas de licores recopilados de varias ciudades del estado de Iowa. La tabla bigquery-public-data.covid19_weathersource_com.postal_code_day_history contiene datos históricos del clima, como la temperatura y la humedad, de todo el mundo.
Antes de leer este instructivo, te recomendamos que leas Prevé una sola serie temporal con un modelo multivariado.
Objetivos
En este instructivo, se te guiará para completar las siguientes tareas:
- Crear un modelo de series temporales para prever los pedidos de las tiendas de licores con la
declaración
CREATE MODEL - Recuperar los valores de pedido previstos del modelo con la
función
ML.FORECAST. - Recuperar componentes de las series temporales, como la estacionalidad, la tendencia y
las atribuciones de atributos, con la
función
ML.EXPLAIN_FORECAST. Puedes inspeccionar estos componentes de series temporales para explicar los valores previstos. - Evalúa la exactitud del modelo con la
función
ML.EVALUATE. - Detecta anomalías con el modelo y la
función
ML.DETECT_ANOMALIES.
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
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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
Habilita la API de BigQuery si aún no está habilitada.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.
Crea un conjunto de datos
Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:
Console
En la consola de Google Cloud , ve a la página BigQuery.
En el panel de la izquierda, haz clic en Explorar:

Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.
En Explorador, expande tu proyecto y, luego, haz clic en Conjuntos de datos.
En la página Conjuntos de datos, haz clic en Crear conjunto de datos.
En el panel Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial.En Ubicación de los datos, selecciona EE.UU..
Deja el resto de la configuración predeterminada como está.
Haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el
comando bq mk --dataset.
Crea un conjunto de datos llamado
bqml_tutorialcon la ubicación de los datos establecida enUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Confirma que se haya creado el conjunto de datos:
bq ls
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Crea una tabla de datos de entrada
Crea una tabla de datos que puedas usar para entrenar y evaluar el modelo. Esta
tabla combina columnas de las tablas
bigquery-public-data.iowa_liquor_sales.sales y
bigquery-public-data.covid19_weathersource_com.postal_code_day_history
para analizar cómo el clima afecta el tipo y la cantidad de artículos que piden las tiendas de
bebidas alcohólicas. También creas las siguientes columnas adicionales que puedes usar como
variables de entrada para el modelo:
date: Es la fecha del pedido.store_number: Es el número único de la tienda que realizó el pedido.item_number: Es el número único del artículo que se pidió.bottles_sold: la cantidad de botellas pedidas del artículo asociadotemperature: la temperatura promedio en la ubicación de la tienda en la fecha del pedidohumidity: Es la humedad promedio en la ubicación de la tienda en la fecha del pedido.
Sigue estos pasos para crear la tabla de datos de entrada:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
CREATE OR REPLACE TABLE `bqml_tutorial.iowa_liquor_sales_with_weather` AS WITH sales AS ( SELECT DATE, store_number, item_number, bottles_sold, SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code FROM `bigquery-public-data.iowa_liquor_sales.sales` AS sales WHERE SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL ), aggregated_sales AS ( SELECT DATE, store_number, item_number, ANY_VALUE(zip_code) AS zip_code, SUM(bottles_sold) AS bottles_sold, FROM sales GROUP BY DATE, store_number, item_number ), weather AS ( SELECT DATE, SAFE_CAST(postal_code AS INT64) AS zip_code, avg_temperature_air_2m_f AS temperature, avg_humidity_specific_2m_gpkg AS humidity, FROM `bigquery-public-data.covid19_weathersource_com.postal_code_day_history` WHERE country = 'US' AND SAFE_CAST(postal_code AS INT64) IS NOT NULL ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, weather.temperature AS temperature, weather.humidity AS humidity FROM aggregated_sales LEFT JOIN weather ON aggregated_sales.zip_code=weather.zip_code AND aggregated_sales.DATE=weather.DATE;
Crea el modelo de series temporales
Crea un modelo de serie temporal para prever las botellas vendidas para cada combinación
de ID de tienda y de artículo, para cada fecha de la
tabla bqml_tutorial.iowa_liquor_sales_with_weather antes del
1 de septiembre de 2022. Usa la temperatura y la humedad promedio de la ubicación de la tienda
en cada fecha como atributos para evaluar durante la previsión. Hay alrededor de 1 millón de combinaciones distintas de número de artículo y número de tienda en la tabla bqml_tutorial.iowa_liquor_sales_with_weather, lo que significa que hay 1 millón de series temporales diferentes para prever.
Sigue estos pasos para crear el modelo:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
CREATE OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model` OPTIONS( model_type = 'ARIMA_PLUS_XREG', time_series_id_col = ['store_number', 'item_number'], time_series_data_col = 'bottles_sold', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE < DATE('2022-09-01');
La consulta tarda alrededor de 38 minutos en completarse, después de lo cual puedes acceder al modelo
multi_time_series_arimax_model. Debido a que en la consulta se usa una sentenciaCREATE MODELpara crear un modelo, no se muestran los resultados de la consulta.
Usa el modelo para realizar previsiones de datos
Prevé valores de series temporales futuras con la función ML.FORECAST.
En la siguiente consulta de GoogleSQL, la
cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level) indica que la
consulta prevé 5 puntos futuros y genera un intervalo de predicción
con un nivel de confianza del 80%.
La firma de datos de los datos de entrada para la función ML.FORECAST es
la misma que la firma de datos de los datos de entrenamiento que usaste para crear
el modelo. La columna bottles_sold no se incluye en la entrada, ya que esos son los datos que el modelo intenta prever.
Sigue estos pasos para realizar una previsión de datos con el modelo:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE>=DATE('2022-09-01') ) );
Los resultados debería ser similar al siguiente:
Las filas de salida se ordenan por el valor de
store_number, luego por el valor deitem_IDy, luego, en orden cronológico por el valor de la columnaforecast_timestamp. En la previsión de series temporales, el intervalo de predicción, representado por los valores de las columnasprediction_interval_lower_boundyprediction_interval_upper_bound, es tan importante como el valor de la columnaforecast_value. El valorforecast_valuees el punto medio del intervalo de predicción. El intervalo de predicción depende de los valores de las columnasstandard_erroryconfidence_level.Para obtener más información sobre las columnas de salida, consulta
ML.FORECAST.
Explica los resultados de la previsión
Puedes obtener métricas de explicabilidad además de los datos de previsión con la
función ML.EXPLAIN_FORECAST. La función ML.EXPLAIN_FORECAST prevé
valores de series temporales futuras y también devuelve todos los componentes separados de la
serie temporal.
Al igual que la función ML.FORECAST, la cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level) que se usa en la función ML.EXPLAIN_FORECAST indica que la consulta prevé 30 puntos temporales futuros y genera un intervalo de predicción con una confianza del 80%.
La función ML.EXPLAIN_FORECAST proporciona datos históricos y de previsión. Para ver solo los datos de previsión, agrega la opción time_series_type
a la consulta y especifica forecast como el valor de la opción.
Sigue estos pasos para explicar los resultados del modelo:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.EXPLAIN_FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Los resultados debería ser similar al siguiente:
Las filas de salida se ordenan de forma cronológica según el valor de la columna
time_series_timestamp.Para obtener más información sobre las columnas de salida, consulta
ML.EXPLAIN_FORECAST.
Evalúa la exactitud de la previsión
Evalúa la exactitud de la previsión del modelo ejecutándolo con datos con los que no se entrenó. Para ello, puedes usar la función ML.EVALUATE. La función ML.EVALUATE evalúa cada serie temporal de forma independiente.
En la siguiente consulta de GoogleSQL, la segunda sentencia SELECT
proporciona los datos con los atributos futuros, que se usan
para pronosticar los valores futuros y compararlos con los datos reales.
Sigue estos pasos para evaluar la exactitud del modelo:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.EVALUATE ( model `bqml_tutorial.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Los resultados debería ser similar al siguiente:
Para obtener más información sobre las columnas de salida, consulta
ML.EVALUATE.
Usa el modelo para detectar anomalías
Detecta anomalías en los datos de entrenamiento con la función ML.DETECT_ANOMALIES.
En la siguiente consulta, la cláusula STRUCT(0.95 AS anomaly_prob_threshold)
hace que la función ML.DETECT_ANOMALIES identifique los datos anómalos
con un nivel de confianza del 95%.
Sigue estos pasos para detectar anomalías en los datos de entrenamiento:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
Los resultados debería ser similar al siguiente:
La columna
anomaly_probabilityde los resultados identifica la probabilidad de que un valor de columnabottles_solddeterminado sea anómalo.Para obtener más información sobre las columnas de salida, consulta
ML.DETECT_ANOMALIES.
Detecta anomalías en datos nuevos
Detecta anomalías en los datos nuevos proporcionando datos de entrada a la
función ML.DETECT_ANOMALIES. Los datos nuevos deben tener la misma firma de datos
que los datos de entrenamiento.
Sigue estos pasos para detectar anomalías en los datos nuevos:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold), ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Los resultados debería ser similar al siguiente:
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
- Puedes borrar el proyecto que creaste.
- De lo contrario, puedes mantener el proyecto y borrar el conjunto de datos.
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 deGoogle 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:
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Aprende a prever una sola serie temporal con un modelo univariable.
- Aprende a prever varias series temporales con un modelo univariado.
- Obtén información para escalar un modelo univariado cuando se prevén varias series temporales en muchas filas.
- Aprende a prever de forma jerárquica varias series temporales con un modelo univariado.
- Para obtener una descripción general de BigQuery ML, consulta Introducción a la IA y el AA en BigQuery.