Usar festivos personalizados en un modelo de previsión de series temporales ARIMA_PLUS
En este tutorial se explica cómo hacer lo siguiente:
- Crea un
ARIMA_PLUS
modelo de previsión de series temporales que solo use festivos integrados. - Crea un
ARIMA_PLUS
modelo de previsión de series temporales que use festivos personalizados además de los festivos integrados. - Visualiza los resultados previstos de estos modelos.
- Inspecciona un modelo para ver qué festivos incluye.
- Evalúa los efectos de los festivos personalizados en los resultados previstos.
- Compara el rendimiento del modelo que solo usa festivos integrados con el del modelo que usa festivos personalizados además de los integrados.
En este tutorial se usan las bigquery-public-data.wikipedia.pageviews_*
tablas públicas.
Permisos obligatorios
Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de gestión de identidades y accesos.Para crear el modelo, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para ejecutar la inferencia, necesitas los siguientes permisos:
bigquery.models.getData
bigquery.jobs.create
Para obtener más información sobre los roles y permisos de gestión de identidades y accesos en BigQuery, consulta la introducción a la gestión de identidades y accesos.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- BigQuery: You incur costs for the data you process in BigQuery.
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Para obtener más información, consulta los precios de BigQuery.
Antes de empezar
- 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 Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haga 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, introduce
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).
Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos definida comoUS
y la descripciónBigQuery 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 omite-d
y--dataset
, el comando creará un conjunto de datos de forma predeterminada.Confirma que se ha creado el conjunto de datos:
bq ls
Ve a la página BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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 BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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 BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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, a continuación, en Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva.
En la pestaña Looker Studio, haz clic en Añadir un gráfico y, a continuación, selecciona el gráfico de serie temporal:
Coloca el gráfico en el informe.
En la pestaña Configuración del panel Gráfico, haga clic en Añadir métrica y seleccione adjusted_views_without_custom_holiday:
El gráfico tiene un aspecto similar al siguiente:
Como puedes ver, el modelo de previsión capta la tendencia general bastante bien. Sin embargo, no capta el aumento del tráfico relacionado con eventos anteriores de Google I/O y no puede generar una previsión precisa para
- En las siguientes secciones se explica cómo hacer frente a algunas de estas limitaciones.
Ve a la página BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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 BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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, a continuación, en Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva.
En la pestaña Looker Studio, haz clic en Añadir un gráfico, selecciona el gráfico de serie temporal y colócalo en el informe.
En la pestaña Configuración del panel Gráfico, haga clic en Añadir métrica y seleccione adjusted_views_with_custom_holiday.
El gráfico tiene un aspecto similar al siguiente:
Como puede ver, las festividades personalizadas han mejorado el rendimiento del modelo de previsión. Ahora registra de forma eficaz el aumento de las vistas de página provocado por Google I/O.
Ve a la página BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción SQL:
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
En los resultados se muestran tanto Google I/O como las festividades integradas en la lista de festividades:
Ve a la página BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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 en gran medida al efecto de las vacaciones en los resultados previstos:
Ve a la página BigQuery.
En el panel del editor de SQL, ejecuta la siguiente instrucción 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.
Crear conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.
Consola
bq
Para crear un conjunto de datos, usa el comando
bq mk
con la marca --location
. Para ver 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" } }
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Preparar los datos de serie temporal
Agrega los datos de vistas de la página de Wikipedia de Google I/O en una sola tabla, agrupados por día:
Crear un modelo de previsión de series temporales que use festivos
Crea un modelo que pronostique las visualizaciones diarias de la página "Google I/O" de Wikipedia, basándose en los datos de visualizaciones de la página anteriores al 2022 y teniendo en cuenta los festivos:
Visualizar los resultados previstos
Después de crear el modelo con las festividades integradas, combina los datos originales de la tabla bqml_tutorial.googleio_page_views
con el valor previsto de la ML.EXPLAIN_FORECAST
función y, a continuación, visualízalos con Looker Studio:
Crear un modelo de previsión de series temporales que use festivos predefinidos y personalizados
Como puedes ver en el historial de Google I/O, el evento de Google I/O se celebró en diferentes fechas entre el 2017 y el 2022. Para tener en cuenta esta variación, crea un modelo que pronostique las vistas de página de la página "Google_I/O" de Wikipedia hasta el 2022, basándose en los datos de vistas de página anteriores al 2022 y usando festivos personalizados para representar el evento Google I/O cada año. En este modelo, también ajustas el periodo de efecto de las festividades para que abarque tres días alrededor de la fecha del evento, de modo que se registre mejor el tráfico de la página antes y después del evento.
Visualizar los resultados previstos
Después de crear el modelo con las festividades personalizadas, combina los datos originales de la tabla bqml_tutorial.googleio_page_views
con el valor previsto de la función ML.EXPLAIN_FORECAST
y, a continuación, visualízalos con Looker Studio:
Consultar información sobre festivos
Para consultar la lista de festivos que se han tenido en cuenta durante la modelización, usa la función ML.HOLIDAY_INFO
:
Evaluar los efectos de los festivos personalizados
Evalúa los efectos de los festivos personalizados en los resultados previstos mediante la función ML.EXPLAIN_FORECAST
:
Comparar el rendimiento de los modelos
Usa la función
ML.EVALUATE
para comparar el rendimiento del primer modelo creado sin festivos personalizados
y el del segundo modelo creado con festivos personalizados. Para ver cómo se comporta el segundo modelo a la hora de predecir un festivo personalizado futuro, define el intervalo de tiempo en la semana de Google I/O del 2022: