Utilizzare festività personalizzate in un modello di previsione per serie temporali
Questo tutorial mostra come svolgere le seguenti attività:
- Crea un modello di previsione delle serie temporali
ARIMA_PLUS
che utilizza solo festività integrate. - Crea un modello di previsione delle serie temporali
ARIMA_PLUS
che utilizza festività personalizzate oltre alle festività integrate. - Visualizza i risultati previsti da questi modelli.
- Esamina un modello per vedere quali festività modella.
- Valuta gli effetti delle festività personalizzate sui risultati della previsione.
- Confronta le prestazioni del modello che utilizza solo le festività integrate con quelle del modello che utilizza le festività personalizzate oltre alle festività 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 la risorsa di connessione, devi disporre delle seguenti autorizzazioni:
bigquery.connections.create
bigquery.connections.get
Per creare il modello, devi disporre delle seguenti autorizzazioni:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.models.getData
bigquery.jobs.create
Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- BigQuery: ti vengono addebitati dei costi per i dati elaborati in BigQuery.
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Per ulteriori informazioni, consulta la pagina relativa ai prezzi di BigQuery.
Prima di iniziare
- Accedi al tuo account Google Cloud. 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API BigQuery.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API BigQuery.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML:
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).
I set di dati pubblici sono archiviati in
US
più regioni. Per semplicità, memorizza il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Prepara i dati delle serie temporali
Aggrega i dati delle visualizzazioni di pagina di Wikipedia relativi alla pagina Google I/O in un'unica tabella, raggruppati 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)
Creare 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:
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';
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
e visualizzali utilizzando Looker 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 Esplora i dati e poi 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:
Come puoi notare, il modello di previsione cattura la tendenza generale molto bene. Tuttavia, non acquisisce il maggiore traffico relativo ai precedenti eventi I/O di Google e non è in grado di generare una previsione accurata
- Le sezioni successive mostrano come gestire alcune di queste limitazioni.
Creare un modello di previsione per serie temporali che utilizzi festività integrate e personalizzate
Come puoi vedere nella cronologia di Google I/O, l'evento di Google I/O si è verificato in date diverse, tra il 2017 e il 2022. Per tenere conto di questa variante, 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 di ogni anno. In questo modello, modifichi anche la finestra dell'effetto delle festività in modo da coprire tre giorni intorno alla data dell'evento, in modo da acquisire meglio il potenziale traffico sulle 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 ) );
Visualizzare i risultati previsti
Dopo aver creato il modello utilizzando festività personalizzate, unisci i dati originali della tabella bqml_tutorial.googleio_page_views
con il valore previsto della funzione ML.EXPLAIN_FORECAST
e visualizzali utilizzando Looker 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 i dati e poi su Esplora con Looker Studio. Looker Studio si apre in una nuova scheda.
Nella scheda Looker Studio, fai clic su Aggiungi un grafico, poi 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.
Controllare le informazioni sulle festività
Esamina l'elenco delle festività prese in considerazione durante la definizione del modello utilizzando la funzione ML.HOLIDAY_INFO
:
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à:
Valutare 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;
Dai risultati è emerso che la conferenza Google I/O contribuisce in misura significativa ai risultati delle previsioni in occasione delle festività:
Confronta le prestazioni del modello
Utilizza la funzione ML.EVALUATE
per confrontare le prestazioni del primo modello creato senza festività personalizzate e del secondo modello creato con festività personalizzate. Per conoscere il rendimento del secondo modello per la previsione di una festività personalizzata futura, imposta l'intervallo di tempo sulla settimana della conferenza 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 delle prestazioni:
Esegui la pulizia
- Nella console Google Cloud, 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 del progetto e fai clic su Chiudi per eliminare il progetto.