Utilizzare le 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à predefinite.
  • Crea un ARIMA_PLUS modello di previsione delle serie temporali che utilizza le festività personalizzate oltre a quelle predefinite.
  • Visualizza i risultati previsti da questi modelli.
  • Controlla un modello per vedere quali festività vengono modellate.
  • Valuta gli effetti delle festività personalizzate sui risultati previsti.
  • Confronta il rendimento del modello che utilizza solo le festività predefinite con il rendimento del modello che utilizza le festività predefinite e quelle personalizzate.

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. I nuovi Google Cloud utenti potrebbero avere diritto a una prova gratuita.

Per ulteriori informazioni, vedi Prezzi di BigQuery.

Prima di iniziare

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery API.

    Enable the API

  8. Crea un set di dati

    Crea un set di dati BigQuery per archiviare il tuo modello ML.

    Console

    1. Nella console Google Cloud , vai alla pagina BigQuery.

      Vai alla pagina BigQuery

    2. Nel riquadro Explorer, fai clic sul nome del progetto.

    3. Fai clic su Visualizza azioni > Crea set di dati.

      L'opzione di menu Crea set di dati.

    4. 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.

    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.

    1. Crea un set di dati denominato bqml_tutorial con la posizione dei dati impostata su US e una descrizione di BigQuery 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 per impostazione predefinita un set di dati.

    2. Verifica che il set di dati sia stato creato:

      bq ls

    API

    Chiama il metodo datasets.insert con una risorsa set di dati definita.

    {
      "datasetReference": {
         "datasetId": "bqml_tutorial"
      }
    }

    BigQuery DataFrames

    Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

    Per effettuare l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare ADC per un ambiente di sviluppo locale.

    import google.cloud.bigquery
    
    bqclient = google.cloud.bigquery.Client()
    bqclient.create_dataset("bqml_tutorial", exists_ok=True)

    Prepara i dati delle serie temporali

    Aggregare i dati sulle visualizzazioni di pagine di Wikipedia per la pagina Google I/O in un'unica tabella, raggruppati per giorno:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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à predefinite

    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à predefinite:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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à predefinite, 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:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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;
    3. Nel riquadro Risultati delle query, fai clic su Esplora i dati, poi su Esplora con Looker Studio. Looker Studio si apre in una nuova scheda.

    4. Nella scheda Looker Studio, fai clic su Aggiungi un grafico e poi sul grafico delle serie temporali:

      Aggiungi un grafico delle serie temporali.

      Posiziona il grafico nel report.

    5. Nella scheda Configurazione del riquadro Grafico, fai clic su Aggiungi metrica e seleziona adjusted_views_without_custom_holiday:

      Aggiungi un&#39;altra metrica.

      Il grafico sarà simile al seguente:

      Grafico delle serie temporali dei risultati di previsione che utilizza le festività predefinite

      Puoi vedere che il modello di previsione coglie abbastanza bene la tendenza generale. Tuttavia, non tiene conto dell'aumento del traffico correlato ai precedenti eventi Google I/O e non è in grado di generare una previsione accurata per

      1. Le sezioni seguenti mostrano come gestire alcune di queste limitazioni.

    Crea un modello di previsione delle serie temporali che utilizza le festività integrate e quelle personalizzate

    Come puoi vedere nella storia 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 le festività personalizzate per rappresentare l'evento Google I/O ogni anno. In questo modello, puoi anche modificare la finestra dell'effetto delle festività in modo che comprenda tre giorni prima e dopo la data dell'evento, per acquisire meglio il potenziale traffico sulle pagine prima e dopo l'evento.

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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 e poi visualizzali utilizzando Looker Studio:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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;
    3. Nel riquadro Risultati delle query, fai clic su Esplora i dati, poi su Esplora con Looker Studio. Looker Studio si apre in una nuova scheda.

    4. Nella scheda Looker Studio, fai clic su Aggiungi un grafico, poi sul grafico delle serie temporali e posizionalo nel report.

    5. Nella scheda Configurazione del riquadro Grafico, fai clic su Aggiungi metrica e seleziona adjusted_views_with_custom_holiday.

      Il grafico sarà simile al seguente:

      Grafico delle serie temporali dei risultati di previsione che utilizza le festività personalizzate

      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.

    Controllare le informazioni sulle festività

    Controlla l'elenco delle festività prese in considerazione durante la definizione del modello utilizzando la funzione ML.HOLIDAY_INFO:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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à:

      Risultati della 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:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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 delle festività sui risultati previsti:

      Risultati della funzione ML.EXPLAIN_FORECAST.

    Confrontare il rendimento del modello

    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 scoprire il rendimento del secondo modello in termini di previsione di una festività personalizzata futura, imposta l'intervallo di tempo sulla settimana di Google I/O 2022:

    1. Vai alla pagina BigQuery.

      Vai a BigQuery

    2. 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:

      Risultati della funzione ML.EXPLAIN_FORECAST.

    Esegui la pulizia

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.