Usa feriados personalizados en un modelo de previsión de series temporales

En este instructivo, se muestra cómo realizar las siguientes tareas:

  • Crea un modelo de previsión de series temporales ARIMA_PLUS que solo use días feriados integrados.
  • Crea un modelo de previsión de series temporales ARIMA_PLUS que use días feriados personalizados, además de los días feriados integrados.
  • Visualiza los resultados previstos de estos modelos.
  • Inspecciona un modelo para ver qué días modela.
  • Evalúa los efectos de los feriados personalizados en los resultados previstos.
  • Compara el rendimiento del modelo que usa solo feriados integrados con el rendimiento del modelo que usa feriados personalizados además de los feriados integrados.

En este instructivo, se usan las tablas públicas bigquery-public-data.wikipedia.pageviews_*.

Permisos necesarios

  • Para crear el conjunto de datos, necesitas el permiso bigquery.datasets.create de IAM.
  • Para crear el recurso de conexión, necesitas los siguientes permisos:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para crear el modelo, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Para ejecutar inferencias, necesitas los siguientes permisos:

    • bigquery.models.getData
    • bigquery.jobs.create

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

  • BigQuery: You incur costs for the data you process in BigQuery.

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Para obtener más información, consulte los Precios de BigQuery.

Antes de comenzar

  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

Crea un conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haz clic en Ver acciones > Crear conjunto de datos.

    Crea un conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, ingresa bqml_tutorial.

    • En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).

      Los conjuntos de datos públicos se almacenan en la multirregión US. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.

    • Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.

      Página Crear un conjunto de datos

Prepara los datos de series temporales

Agrega los datos de las vistas de página de Wikipedia de la página de Google I/O en una sola tabla, agrupados por día:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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 modelo de previsión de series temporales que use feriados integrados

Crea un modelo que pronostique las vistas de página diarias de Wikipedia de “Google I/O”, según los datos de vistas de página anteriores a 2022 y teniendo en cuenta los feriados integrados:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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';
    

Visualiza los resultados previstos

Después de crear el modelo mediante días festivos integrados, une los datos originales de la tabla bqml_tutorial.googleio_page_views con el valor previsto de la función ML.EXPLAIN_FORECAST. Luego, visualízalo con el uso de Looker Studio:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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. En el panel Resultados de la consulta, haz clic en Explorar datos y, luego, en Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva.

  4. En la pestaña Looker Studio, haz clic en Agregar un gráfico y, luego, en el gráfico de serie temporal:

    Agrega un gráfico de serie temporal

    Coloca el gráfico en el informe.

  5. En la pestaña Configuración del panel Gráfico, haz clic en Agregar métrica y selecciona adjusted_views_without_custom_holiday:

    Agrega una métrica adicional.

    El gráfico es similar al siguiente:

    Gráfico de serie temporal de resultados de previsión con feriados integrados

    Puedes ver que el modelo de previsión captura bien la tendencia general. Sin embargo, no captura el aumento del tráfico relacionado con los eventos anteriores de Google I/O y no puede generar una previsión precisa.

    1. En las siguientes secciones, se muestra cómo lidiar con algunas de estas limitaciones.

Crea un modelo de previsión de series temporales que use feriados integrados y personalizados

Como puedes ver en Historial de Google I/O, el evento de Google I/O ocurrió en diferentes fechas entre 2017 y 2022. Para tener en cuenta esta variación, crea un modelo que pronostique las vistas de la página “Google_I/O” de Wikipedia hasta 2022, según los datos de las vistas de página anteriores a 2022 y que usen feriados personalizados para representar el evento de Google I/O cada año. En este modelo, también debes ajustar el período del efecto de los feriados a fin de que abarque tres días alrededor de la fecha del evento para capturar mejor algo de tráfico potencial de página antes y después del evento.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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
        )
    );
    

Visualiza los resultados previstos

Después de crear el modelo con feriados personalizados, une los datos originales de la tabla bqml_tutorial.googleio_page_views con el valor previsto de la función ML.EXPLAIN_FORECAST y, luego, para visualizarlo, usa Looker Studio:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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. En el panel Resultados de la consulta, haz clic en Explorar datos y, luego, en Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva.

  4. En la pestaña Looker Studio, haz clic en Agregar un gráfico, haz clic en el gráfico de serie temporal y coloca el gráfico en el informe.

  5. En la pestaña Configuración del panel Gráfico, haz clic en Agregar métrica y selecciona adjusted_views_with_custom_holiday.

    El gráfico es similar al siguiente:

    Gráfico de serie temporal de resultados de previsión con feriados personalizados

    Como puedes ver, los feriados personalizados aumentaron el rendimiento del modelo de previsión. Ahora, captura de manera eficaz el aumento de las vistas de página que generó Google I/O.

Inspecciona la información sobre los feriados

Inspecciona la lista de feriados que se tomaron en cuenta durante el modelado mediante la función ML.HOLIDAY_INFO:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:

    SELECT *
    FROM
      ML.HOLIDAY_INFO(
        MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
    

    En los resultados, se muestran Google I/O y los feriados integrados en la lista de feriados:

    Resultados de la función ML.HOLIDAY_INFO.

Evalúa los efectos de los feriados personalizados

Evalúa los efectos de los feriados personalizados en los resultados previstos mediante la función ML.EXPLAIN_FORECAST:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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;
    

    Los resultados muestran que Google I/O contribuye con una gran cantidad de efectos de feriados a los resultados previstos:

    Resultados de la función ML.EXPLAIN_FORECAST.

Cómo comparar el rendimiento del modelo

Usa la función ML.EVALUATE para comparar el rendimiento del primer modelo creado sin feriados personalizados y el segundo modelo creado con feriados personalizados. Para ver el rendimiento del segundo modelo cuando se trata de pronosticar un feriado personalizado futuro, configura el intervalo de tiempo en la semana de Google I/O en 2022:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de 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));
    

    Los resultados muestran que el segundo modelo ofrece una mejora significativa del rendimiento:

    Resultados de la función ML.EXPLAIN_FORECAST.

Limpia

  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.