Usa días feriados personalizados en un modelo de previsión de series temporales ARIMA_PLUS
En este instructivo, se muestra cómo realizar las siguientes tareas:
- Crea un modelo de previsión de series temporales
ARIMA_PLUS
que solo use días feriados integrados. - Crea un modelo de previsión de series temporales
ARIMA_PLUS
que use días feriados personalizados, además de los días feriados integrados. - Visualiza los resultados previstos de estos modelos.
- Inspecciona un modelo para ver qué días modela.
- Evalúa los efectos de los feriados personalizados en los resultados previstos.
- Compara el rendimiento del modelo que usa solo feriados integrados con el rendimiento del modelo que usa feriados personalizados además de los feriados integrados.
En este instructivo, se usan las tablas públicas bigquery-public-data.wikipedia.pageviews_*
.
Permisos necesarios
Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de IAM.Para crear el modelo, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
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.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- BigQuery: You incur costs for the data you process in BigQuery.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información, consulte los Precios de BigQuery.
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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. En la consola de Google Cloud , ve a la página 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).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos establecida enUS
y una descripción deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
En lugar de usar la marca
--dataset
, el comando usa el acceso directo-d
. Si omites-d
y--dataset
, el comando crea un conjunto de datos de manera predeterminada.Confirma que se haya creado el conjunto de datos:
bq ls
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
CREATE OR REPLACE TABLE `bqml_tutorial.googleio_page_views` AS SELECT DATETIME_TRUNC(datehour, DAY) AS date, SUM(views) AS views FROM `bigquery-public-data.wikipedia.pageviews_*` WHERE datehour >= '2017-01-01' AND datehour < '2023-01-01' AND title = 'Google_I/O' GROUP BY DATETIME_TRUNC(datehour, DAY)
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01';
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_without_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
En el panel Resultados de la consulta, haz clic en Explorar datos y, luego, en Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva.
En la pestaña Looker Studio, haz clic en Agregar un gráfico y, luego, en el gráfico de serie temporal:
Coloca el gráfico en el informe.
En la pestaña Configuración del panel Gráfico, haz clic en Agregar métrica y selecciona adjusted_views_without_custom_holiday:
El gráfico es similar al siguiente:
Puedes ver que el modelo de previsión captura bien la tendencia general. Sin embargo, no captura el aumento del tráfico relacionado con los eventos anteriores de Google I/O y no puede generar una previsión precisa.
- En las siguientes secciones, se muestra cómo lidiar con algunas de estas limitaciones.
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS ( training_data AS ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01' ), custom_holiday AS ( SELECT 'US' AS region, 'GoogleIO' AS holiday_name, primary_date, 1 AS preholiday_days, 2 AS postholiday_days FROM UNNEST( [ DATE('2017-05-17'), DATE('2018-05-08'), DATE('2019-05-07'), -- cancelled in 2020 due to pandemic DATE('2021-05-18'), DATE('2022-05-11')]) AS primary_date ) );
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_with_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
En el panel Resultados de la consulta, haz clic en Explorar datos y, luego, en Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva.
En la pestaña Looker Studio, haz clic en Agregar un gráfico, haz clic en el gráfico de serie temporal y coloca el gráfico en el informe.
En la pestaña Configuración del panel Gráfico, haz clic en Agregar métrica y selecciona adjusted_views_with_custom_holiday.
El gráfico es similar al siguiente:
Como puedes ver, los feriados personalizados aumentaron el rendimiento del modelo de previsión. Ahora, captura de manera eficaz el aumento de las vistas de página que generó Google I/O.
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
En los resultados, se muestran Google I/O y los feriados integrados en la lista de feriados:
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
SELECT time_series_timestamp, holiday_effect_GoogleIO, holiday_effect_US_Juneteenth, holiday_effect_Christmas, holiday_effect_NewYear FROM ML.EXPLAIN_FORECAST( model `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) WHERE holiday_effect != 0;
Los resultados muestran que Google I/O contribuye con una gran cantidad de efectos de feriados a los resultados previstos:
Ve a la página de BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:
SELECT "original" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation)) UNION ALL SELECT "with_custom_holiday" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation));
Los resultados muestran que el segundo modelo ofrece una mejora significativa del rendimiento:
- 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.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.
Console
bq
Para crear un conjunto de datos nuevo, usa el comando bq mk
con la marca --location
. Para obtener una lista completa de los parámetros posibles, consulta la
referencia del
comando bq mk --dataset
.
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Prepara los datos de series temporales
Agrega los datos de las vistas de página de Wikipedia de la página de Google I/O en una sola tabla, agrupados por día:
Crea un modelo de previsión de series temporales que use feriados integrados
Crea un modelo que pronostique las vistas de página diarias de Wikipedia de “Google I/O”, según los datos de vistas de página anteriores a 2022 y teniendo en cuenta los feriados integrados:
Visualiza los resultados previstos
Después de crear el modelo mediante días festivos integrados, une los datos originales de la tabla bqml_tutorial.googleio_page_views
con el valor previsto de la función ML.EXPLAIN_FORECAST
. Luego, visualízalo con el uso de Looker Studio:
Crea un modelo de previsión de series temporales que use feriados integrados y personalizados
Como puedes ver en Historial de Google I/O, el evento de Google I/O ocurrió en diferentes fechas entre 2017 y 2022. Para tener en cuenta esta variación, crea un modelo que pronostique las vistas de la página “Google_I/O” de Wikipedia hasta 2022, según los datos de las vistas de página anteriores a 2022 y que usen feriados personalizados para representar el evento de Google I/O cada año. En este modelo, también debes ajustar el período del efecto de los feriados a fin de que abarque tres días alrededor de la fecha del evento para capturar mejor algo de tráfico potencial de página antes y después del evento.
Visualiza los resultados previstos
Después de crear el modelo con feriados personalizados, une los datos originales de la tabla bqml_tutorial.googleio_page_views
con el valor previsto de la función ML.EXPLAIN_FORECAST
y, luego, para visualizarlo, usa Looker Studio:
Inspecciona la información sobre los feriados
Inspecciona la lista de feriados que se tomaron en cuenta durante el modelado mediante la función ML.HOLIDAY_INFO
:
Evalúa los efectos de los feriados personalizados
Evalúa los efectos de los feriados personalizados en los resultados previstos mediante la función ML.EXPLAIN_FORECAST
:
Cómo comparar el rendimiento del modelo
Usa la función ML.EVALUATE
para comparar el rendimiento del primer modelo creado sin feriados personalizados y el segundo modelo creado con feriados personalizados. Para ver el rendimiento del segundo modelo cuando se trata de pronosticar un feriado personalizado futuro, configura el intervalo de tiempo en la semana de Google I/O en 2022: