Usa feriados personalizados en un modelo de previsión de series temporales
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 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.
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.
-
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.
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:
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)
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:
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';
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:
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.
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.
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 ) );
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:
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.
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
:
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:
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
:
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:
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:
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:
Limpia
- 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.