Utilizza le festività personalizzate in un modello di previsione delle serie temporali ARIMA_PLUS

Questo tutorial mostra come eseguire le seguenti attività:

  • Crea un modello di previsione di serie temporali ARIMA_PLUS che utilizzi 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 previsti da questi modelli.
  • Esamina un modello per vedere quali festività modella.
  • Valuta gli effetti delle festività personalizzate sui risultati previsti.
  • Confronta le prestazioni del modello che utilizza solo le festività integrate con quelle 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 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.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Per saperne di più, consulta la pagina relativa ai prezzi di BigQuery.

Prima di iniziare

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

Crea un set di dati

Per creare un set di dati BigQuery, seleziona una delle seguenti opzioni:

Console

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

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Explorer:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.

  3. In Explorer, espandi il progetto, quindi fai clic su Set di dati.

  4. Nella pagina Set di dati, fai clic su Crea set di dati.

  5. Nel riquadro Crea set di dati, segui questi passaggi:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Località dei dati, seleziona USA.

    Lascia invariate le altre impostazioni predefinite.

  6. Fai clic su Crea set di dati.

bq

Per creare un nuovo set di dati, utilizza il comando bq mk --dataset.

  1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Verifica che il set di dati sia stato creato:

    bq ls

API

Chiama il metodo datasets.insert 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 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)

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 Wikipedia "Google I/O", in base ai dati sulle visualizzazioni di pagina prima del 2022 e tenendo conto delle festività integrate:

  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à integrate, 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:

  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 Apri in > Data Studio. Data Studio si apre in una nuova scheda.

  4. Nella scheda Data Studio, fai clic su Aggiungi un grafico, quindi fai clic 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'altra metrica.

    Il grafico è simile al seguente:

    Grafico delle serie temporali dei risultati di previsione utilizzando le festività integrate

    Puoi vedere 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

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

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 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 modificare la finestra dell'effetto delle 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.

  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 dalla funzione ML.EXPLAIN_FORECAST, quindi visualizzali utilizzando Data 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, quindi su Esplora con Data Studio. Data Studio si apre in una nuova scheda.

  4. Nella scheda Data Studio, fai clic su Aggiungi un grafico, fai clic 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 è simile al seguente:

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

    Come puoi vedere, le festività personalizzate hanno migliorato le prestazioni del modello di previsione. Ora acquisisce in modo efficace l'aumento delle visualizzazioni di pagina causato da Google I/O.

Controlla le informazioni sulle festività

Esamina l'elenco delle festività prese in considerazione durante la modellazione 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.

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

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 vedere le prestazioni 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:

  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 delle prestazioni:

    Risultati della funzione ML.EXPLAIN_FORECAST.

Esegui la pulizia

  1. Nella console Google Cloud , vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.