En este instructivo, se explica cómo realizar previsiones multivariadas en una sola serie temporal con la función AI.FORECAST y el modelo TimesFM 3.0 integrados en BigQuery ML. La previsión multivariada te ayuda a mejorar la precisión de las previsiones, ya que incorpora otras variables que influyen en el objetivo.
En este instructivo, se muestra cómo predecir las ventas de vodka y whisky incorporando valores históricos de transacciones (una covariable pasada) y si la fecha es un fin de semana (una covariable futura).
Objetivos
- Prepara un solo conjunto de datos unificado para la previsión multivariada.
- Usa la función
AI.FORECASTcon el modeloTimesFM 3.0para generar predicciones.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
- BigQuery
- BigQuery ML
Para obtener más información, consulta los precios de BigQuery y los precios de BigQuery ML.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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.
-
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.
-
Habilita la API de BigQuery si aún no está habilitada.
Roles necesarios para habilitar las APIs
Para habilitar 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 obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.Para los proyectos nuevos, la API de BigQuery se habilita de forma automática.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar las tareas de este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Crea el conjunto de datos:
Editor de datos de BigQuery (
roles/bigquery.dataEditor) -
Crea el modelo:
- Editor de datos de BigQuery (
roles/bigquery.dataEditor) - Usuario de trabajo de BigQuery (
roles/bigquery.jobUser)
- Editor de datos de BigQuery (
-
Ejecuta la inferencia:
- Editor de datos de BigQuery (
roles/bigquery.dataEditor) - Usuario de trabajo de BigQuery (
roles/bigquery.jobUser)
- Editor de datos de BigQuery (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para completar las tareas de este instructivo. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para completar las tareas de este instructivo:
-
Crea el conjunto de datos:
bigquery.datasets.create -
Crea el modelo:
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData
-
-
Ejecuta la inferencia:
-
bigquery.models.getData -
bigquery.jobs.create
-
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.Prepara los datos de entrada
A diferencia de otros modelos multivariados que podrían requerir tablas separadas para las covariables históricas y futuras, la función AI.FORECAST con TimesFM 3.0 espera una sola tabla o consulta de entrada.
Antes de ejecutar una previsión, asegúrate de que tus datos cumplan con los siguientes requisitos:
- Filas históricas: Contienen valores no nulos para las marcas de tiempo, los objetivos y las covariables pasadas.
- Filas futuras: Contienen valores no nulos solo para las marcas de tiempo y las covariables futuras.
Las columnas de destino y las columnas de covariables anteriores deben establecerse en
NULLpara estas filas futuras.
Tu tabla de entrada debe contener columnas con los siguientes datos:
- Fecha de las ventas
- Cantidad de botellas de vodka vendidas en esa fecha. Esta es una columna objetivo.
- Cantidad de botellas de whisky vendidas en esa fecha. Esta es una columna objetivo.
- Es el valor promedio de las transacciones en esa fecha. Es una covariable pasada que se usó en la previsión.
- Indica si la fecha es un fin de semana. Es una covariable futura que se usa en la previsión.
Prevé la única serie temporal multivariable
La siguiente consulta prevé la cantidad de botellas de vodka y whisky vendidas durante las dos primeras semanas de julio de 2023 en la tienda número 2633. Utiliza el valor promedio de la transacción como una covariable pasada y si la fecha es un fin de semana como una covariable futura.
Sigue estos pasos para predecir datos con el modelo TimesFM 3.0:
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:
WITH historical_sales AS ( SELECT date AS sales_date, store_number, SUM(CASE WHEN category_name LIKE '%VODKA%' THEN bottles_sold ELSE 0 END) AS vodka_bottles, SUM(CASE WHEN category_name LIKE '%WHISKEY%' THEN bottles_sold ELSE 0 END) AS whiskey_bottles, AVG(sale_dollars) AS avg_transaction_value, -- Past covariate IF(EXTRACT(DAYOFWEEK FROM date) IN (1, 7), 1.0, 0.0) AS is_weekend -- Future covariate FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN '2023-01-01' AND '2023-06-30' AND store_number = '2633' GROUP BY sales_date, store_number ), future_horizon AS ( SELECT future_date AS sales_date, store_number, CAST(NULL AS INT64) AS vodka_bottles, CAST(NULL AS INT64) AS whiskey_bottles, CAST(NULL AS FLOAT64) AS avg_transaction_value, IF(EXTRACT(DAYOFWEEK FROM future_date) IN (1, 7), 1.0, 0.0) AS is_weekend FROM UNNEST(GENERATE_DATE_ARRAY('2023-07-01', '2023-07-14')) AS future_date CROSS JOIN (SELECT DISTINCT store_number FROM historical_sales) ), combined_sales AS ( SELECT * FROM historical_sales UNION ALL SELECT * FROM future_horizon ) SELECT FORMAT_DATE('%Y-%m-%d', sales_date) AS sales_date, vodka_bottles.value AS vodka_value, vodka_bottles.prediction_interval_lower_bound AS vodka_lower, vodka_bottles.prediction_interval_upper_bound AS vodka_upper, whiskey_bottles.value AS whiskey_value, whiskey_bottles.prediction_interval_lower_bound AS whiskey_lower, whiskey_bottles.prediction_interval_upper_bound AS whiskey_upper FROM AI.FORECAST( TABLE combined_sales, model => 'TimesFM 3.0', timestamp_col => 'sales_date', target_cols => ['vodka_bottles', 'whiskey_bottles'], past_covariate_cols => ['avg_transaction_value'], future_covariate_cols => ['is_weekend'], id_cols => ['store_number'], horizon => 14, confidence_level => 0.90 );
El resultado es similar al siguiente, con valores redondeados para mayor claridad:
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| sales_date | vodka_value | vodka_lower | vodka_upper | whiskey_value | whiskey_lower | whiskey_upper |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 2023-07-01 | 408 | -334 | 1977 | 21 | -34 | 113 |
| 2023-07-02 | 806 | -281 | 2992 | 29 | -23 | 149 |
| ... | ... | ... | ... | ... | ... | ... |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
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.
Borra tu proyecto
- 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?
- Para obtener una descripción general de BigQuery ML, consulta Introducción a la IA y el AA en BigQuery.
- Obtén información para prever series temporales únicas o múltiples con un modelo univariado de TimesFM.
- Obtén más información para prever varias series temporales con un modelo multivariable de TimesFM.