Utilizzare festività personalizzate in un modello di previsione di serie temporali ARIMA_PLUS
Questo tutorial mostra come eseguire le seguenti attività:
- Creare un
ARIMA_PLUSmodello di previsione di serie temporali che utilizza solo le festività integrate. - Creare un modello di previsione di serie temporali
ARIMA_PLUSche utilizza le festività personalizzate oltre a quelle integrate. - Visualizzare i risultati previsti di questi modelli.
- Esaminare un modello per vedere quali festività modella.
- Valutare gli effetti delle festività personalizzate sui risultati previsti.
- Confrontare il rendimento del modello che utilizza solo le festività integrate con il rendimento del modello che utilizza le festività personalizzate oltre a quelle integrate.
Questo tutorial utilizza le tabelle pubbliche bigquery-public-data.wikipedia.pageviews_*.
Autorizzazioni obbligatorie
Per creare il set di dati, devi disporre dell'autorizzazione IAM
bigquery.datasets.create.Per creare il modello, devi disporre delle seguenti autorizzazioni:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.models.getDatabigquery.jobs.create
Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta la pagina Introduzione a IAM.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- BigQuery: You incur costs for the data you process in BigQuery.
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Per ulteriori informazioni, vedi Prezzi di BigQuery.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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.
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.enablepermission. 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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.enablepermission. Learn how to grant roles.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML.
Console
Nella Google Cloud console, vai alla pagina BigQuery.
Nel riquadro Spazio di esplorazione, fai clic sul nome del progetto.
Fai clic su Visualizza azioni > Crea set di dati
Nella pagina Crea set di dati, segui questi passaggi:
In ID set di dati, inserisci
bqml_tutorial.In Tipo di località, seleziona Multi-regione, quindi seleziona Stati Uniti.
Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
bq
Per creare un nuovo set di dati, utilizza il
bq mk --dataset comando.
Crea un set di dati denominato
bqml_tutorialcon la località dei dati impostata suUS.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Verifica che il set di dati sia stato creato:
bq ls
API
Chiama il datasets.insert
metodo con una risorsa del set di dati definita.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Prepara i dati delle serie temporali
Aggrega i dati delle visualizzazioni di pagina di Wikipedia per la pagina Google I/O in una singola tabella, raggruppata per giorno:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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 modello di previsione di serie temporali che utilizza le festività integrate
Crea un modello che prevede le visualizzazioni di pagina giornaliere per la pagina Wikipedia "Google I/O", in base ai dati delle visualizzazioni di pagina precedenti al 2022 e tenendo conto delle festività integrate:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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';
Visualizza i risultati previsti
Dopo aver creato il modello utilizzando le festività integrate, unisci i dati originali da
la tabella bqml_tutorial.googleio_page_views con il valore previsto dalla
ML.EXPLAIN_FORECAST funzione,
quindi visualizzali
utilizzando Data Studio:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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;
Nel riquadro Risultati delle query, fai clic su Apri in > Data Studio. Data Studio si apre in una nuova scheda.
Nella scheda Data Studio, fai clic su Aggiungi un grafico, quindi sul grafico delle serie temporali:
Posiziona il grafico nel report.
Nella scheda Configurazione del riquadro Grafico, fai clic su Aggiungi metrica e seleziona adjusted_views_without_custom_holiday:
Il grafico è simile al seguente:
Puoi notare che il modello di previsione acquisisce abbastanza bene la tendenza generale. Tuttavia, non acquisisce l'aumento del traffico correlato agli eventi Google I/O precedenti e non è in grado di generare una previsione accurata per
- Le sezioni successive mostrano come affrontare alcune di queste limitazioni.
Crea un modello di previsione di serie temporali che utilizza le festività integrate e le festività personalizzate
Come puoi vedere nella cronologia di Google I/O, l'evento Google I/O si è svolto in date diverse tra il 2017 e il 2022. Per tenere conto di questa variazione, crea un modello che prevede le visualizzazioni di pagina per la pagina Wikipedia "Google_I/O" fino al 2022, in base ai dati delle visualizzazioni di pagina precedenti al 2022 e utilizzando le festività personalizzate per rappresentare l'evento Google I/O ogni anno. In questo modello, puoi anche regolare la finestra dell'effetto festività in modo che copra tre giorni intorno alla data dell'evento, per acquisire meglio il potenziale traffico di pagine prima e dopo l'evento.
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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 ) );
Visualizza i risultati previsti
Dopo aver creato il modello utilizzando le festività personalizzate, unisci i dati originali della tabella
bqml_tutorial.googleio_page_views con il valore previsto della funzione
ML.EXPLAIN_FORECAST,
quindi visualizzali
utilizzando Data Studio:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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;
Nel riquadro Risultati delle query, fai clic su Esplora dati, quindi su Esplora con Data Studio. Data Studio si apre in una nuova scheda.
Nella scheda Data Studio, fai clic su Aggiungi un grafico, quindi sul grafico delle serie temporali e posiziona il grafico nel report.
Nella scheda Configurazione del riquadro Grafico, fai clic su Aggiungi metrica e seleziona adjusted_views_with_custom_holiday.
Il grafico è simile al seguente:
Come puoi notare, le festività personalizzate hanno migliorato il rendimento del modello di previsione. Ora acquisisce in modo efficace l'aumento delle visualizzazioni di pagina causato da Google I/O.
Esamina le informazioni sulle festività
Esamina l'elenco delle festività prese in considerazione durante la modellazione
utilizzando la
ML.HOLIDAY_INFO funzione:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione SQL:
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
I risultati mostrano sia Google I/O sia le festività integrate nell'elenco delle festività:
Valuta gli effetti delle festività personalizzate
Valuta gli effetti delle festività personalizzate sui risultati previsti utilizzando la
funzione
ML.EXPLAIN_FORECAST:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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;
I risultati mostrano che Google I/O contribuisce a una grande quantità di effetto festività sui risultati previsti:
Confronta il rendimento del modello
Utilizza la
ML.EVALUATE funzione
per confrontare il rendimento del primo modello creato senza festività personalizzate
e del secondo modello creato con festività personalizzate. Per vedere il rendimento del secondo modello quando si tratta di prevedere una festività personalizzata futura, imposta l'intervallo di tempo sulla settimana di Google I/O nel 2022:
Vai alla pagina BigQuery.
Nel riquadro dell'editor SQL, esegui la seguente istruzione 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));
I risultati mostrano che il secondo modello offre un miglioramento significativo del rendimento:
Libera spazio
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.