Utilizzare festività personalizzate in un modello di previsione delle serie temporali ARIMA_PLUS
Questo tutorial mostra come svolgere le seguenti attività:
- Crea un
ARIMA_PLUS
modello di previsione delle serie temporali che utilizza solo le festività integrate. - Crea un modello di previsione delle serie temporali
ARIMA_PLUS
che utilizza festività personalizzate oltre a quelle integrate. - Visualizza i risultati delle previsioni di questi modelli.
- Esamina un modello per vedere quali festività modella.
- Valuta gli effetti delle festività personalizzate sui risultati previsti.
- Confronta 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.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.models.getData
bigquery.jobs.create
Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Costi
In questo documento, utilizzi 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, consulta la pagina Prezzi di BigQuery.
Prima di iniziare
- 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.
Nella console Google Cloud , vai alla pagina BigQuery.
Nel riquadro Explorer, fai clic sul nome del progetto.
Fai clic su
Visualizza azioni > Crea set di dati.Nella pagina Crea set di dati:
In ID set di dati, inserisci
bqml_tutorial
.Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).
Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Crea un set di dati denominato
bqml_tutorial
con la località dei dati impostata suUS
e una descrizione diBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anziché utilizzare il flag
--dataset
, il comando utilizza la scorciatoia-d
. Se ometti-d
e--dataset
, il comando crea un set di dati per impostazione predefinita.Verifica che il set di dati sia stato creato:
bq ls
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)
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';
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 della query, fai clic su Esplora i dati, quindi fai clic su Esplora con Looker Studio. Looker Studio si apre in una nuova scheda.
Nella scheda Looker Studio, fai clic su Aggiungi un grafico e poi 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 piuttosto bene il trend 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 gestire alcune di queste limitazioni.
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 ) );
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 della query, fai clic su Esplora i dati, quindi fai clic su Esplora con Looker Studio. Looker Studio si apre in una nuova scheda.
Nella scheda Looker Studio, fai clic su Aggiungi un grafico, fai clic sul grafico delle serie temporali e posizionalo 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 vedere, 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.
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à:
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 in modo significativo all'effetto festività nei risultati previsti:
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:
- 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 set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML.
Console
bq
Per creare un nuovo set di dati, utilizza il comando bq mk
con il flag --location
. Per un elenco completo dei possibili parametri, consulta la
documentazione di riferimento del
comando bq mk --dataset
.
API
Chiama il metodo datasets.insert
con una risorsa dataset definita.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.
Preparare i dati delle serie temporali
Aggrega i dati sulle visualizzazioni di pagina di Wikipedia per la pagina Google I/O in un'unica tabella, raggruppati per giorno:
Crea un modello di previsione delle serie temporali che utilizza le festività integrate
Crea un modello che preveda le visualizzazioni di pagina giornaliere per la pagina "Google I/O" di Wikipedia, in base ai dati sulle visualizzazioni di pagina precedenti al 2022 e tenendo conto delle festività integrate:
Visualizzare i risultati previsti
Dopo aver creato il modello utilizzando le festività integrate, unisci i dati originali della tabella bqml_tutorial.googleio_page_views
con il valore previsto della funzione ML.EXPLAIN_FORECAST
, poi visualizzali utilizzando Looker Studio:
Crea un modello di previsione delle serie temporali che utilizza festività integrate e 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 preveda le visualizzazioni di pagina per la pagina "Google_I/O" di Wikipedia fino al 2022, in base ai dati sulle visualizzazioni di pagina precedenti al 2022 e utilizzando festività personalizzate per rappresentare l'evento Google I/O ogni anno. In questo modello, devi anche regolare la finestra dell'effetto festività in modo che copra tre giorni intorno alla data dell'evento, per acquisire meglio il potenziale traffico della pagina prima e dopo l'evento.
Visualizzare 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
e poi visualizzali utilizzando Looker Studio:
Controllare le informazioni sulle festività
Esamina l'elenco delle festività prese in considerazione durante la modellazione
utilizzando la
funzione ML.HOLIDAY_INFO
:
Valutare gli effetti delle festività personalizzate
Valuta gli effetti delle festività personalizzate sui risultati previsti utilizzando la
funzione
ML.EXPLAIN_FORECAST
:
Confrontare il rendimento dei modelli
Utilizza la
funzione ML.EVALUATE
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 in termini di previsione di una festività personalizzata futura, imposta l'intervallo di tempo sulla settimana del Google I/O nel 2022: