Previsión de series temporales jerárquicas

En este instructivo, aprenderás a generar una serie temporal jerárquica. En este instructivo, crearás dos modelos de serie temporal sobre los mismos datos, uno de los cuales usa la previsión jerárquica y otro que no. Esto te permite comparar los resultados que muestran los modelos.

Usa los datos de iowa_liquor.sales.sales para entrenar los modelos de este instructivo. Este conjunto de datos contiene información sobre más de 1 millón de productos de bebidas alcohólicas en diferentes tiendas mediante datos públicos de ventas de bebidas alcohólicas de Iowa.

Antes de seguir este instructivo, debes estar familiarizado con la previsión de varias series temporales. Completa el instructivo Previsión de varias series temporales a partir de datos de Google Analytics para obtener una introducción a este tema.

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.

Objetivos

En este instructivo usarás lo siguiente:

  • La declaración CREATE MODEL, para crear un modelo de serie temporal y un modelo de serie temporal jerárquica
  • La función ML.FORECAST, para prever el total de ventas diarias

Costos

En este instructivo, se usan componentes facturables de Google Cloud, incluidos los siguientes:

  • BigQuery
  • BigQuery ML

Para obtener más información sobre los costos de BigQuery, consulta la página de precios de BigQuery.

Para obtener más información sobre los costos de BigQuery ML, consulta los precios de BigQuery ML.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  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. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  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

Conciliación jerárquica

Las previsiones de series temporales a menudo se pueden desglosar o agregar en función de diferentes dimensiones de interés. Estas se conocen como series temporales jerárquicas. Por ejemplo, los datos del censo que revelan la población total por estado pueden desglosarse por ciudad y código postal. En cambio, podemos agregar esos datos para cada país o continente.

Existen varias técnicas que puedes usar para generar y conciliar previsiones jerárquicas. Tomemos el siguiente ejemplo, que muestra una estructura jerárquica simplificada para las ventas de bebidas alcohólicas en el estado de Iowa:

Series temporales jerárquicas

El nivel más bajo muestra el nivel de la tienda, seguido del nivel del código postal, la ciudad, el condado y, por último, el estado. El objetivo de las previsiones jerárquicas es asegurarse de que se concilien todas las previsiones de cada nivel. Por ejemplo, dada la cifra anterior, esto significa que las previsiones de Clive y Des Moines deben sumarse a la previsión en Polk. Del mismo modo, las previsiones en Polk, Linn y Scott deberían sumarse a la previsión en Iowa.

Existen algunas técnicas comunes que puedes usar a fin de generar previsiones conciliadas para cada nivel. Una técnica se conoce como el enfoque ascendente. En este enfoque, las previsiones se generan en el nivel inferior de la jerarquía antes de sumar los otros niveles. Tomamos el ejemplo anterior, las previsiones de cada tienda se usan para crear los modelos de previsión para los otros niveles (primero por código postal, seguido de la ciudad, etcétera).

Crea un modelo de serie temporal

Primero, crea un modelo de serie temporal mediante los datos de las ventas de bebidas alcohólicas de Iowa.

Con la siguiente consulta de GoogleSQL, se crea un modelo que prevé la cantidad total diaria de botellas vendidas en 2015 en los condados de Polk, Linn y Scott. La cláusula CREATE MODEL crea y entrena un modelo llamado bqml_tutorial.liquor_forecast.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;

La cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica que creas un modelo de serie temporal basado en ARIMA. De forma predeterminada, auto_arima=TRUE, por lo que el algoritmo auto.ARIMA ajusta de forma automática los hiperparámetros en los modelos ARIMA_PLUS. El algoritmo se adapta a decenas de modelos de candidatos y elige el mejor con el criterio de información Akaike (AIC) más bajo. Establecer la opción holiday_region en US permite un modelado más preciso de esos puntos temporales de las festividades de Estados Unidos si hay patrones de festividades de ese país en la serie temporal.

Ejecuta la consulta CREATE MODEL para crear y entrenar el modelo:

  1. En la consola de Google Cloud, haz clic en el botón Ejecutar una consulta en BigQuery.

  2. Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;
  1. Haz clic en Ejecutar.

    La consulta toma alrededor de 37 segundos en completarse; luego, el modelo (liquor_forecast) aparece en el panel Explorador. Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

Inspecciona los resultados del modelo de serie temporal

Después de crear el modelo, puedes usar la función ML.FORECAST para ver los resultados de la previsión.

Para ejecutar la función ML.FORECAST en el modelo liquor_forecast, especifícalo en la cláusula FROM.

Según la configuración predeterminada, esta consulta muestra las previsiones de todas las series temporales únicas en los datos, que se identifican mediante las columnas store_number, zip_code, city y county.

Para ejecutar la consulta ML.FORECAST, sigue estos pasos:

  1. En la consola de Google Cloud, haz clic en el botón Ejecutar una consulta en BigQuery.

  2. Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.

#standardSQL
SELECT *
FROM
  ML.FORECAST(
    MODEL `bqml_tutorial.liquor_forecast`,
    STRUCT(20 AS horizon, 0.8 AS confidence_level))
ORDER BY store_number, county, city, zip_code, forecast_timestamp
  1. Haz clic en Ejecutar.

    La consulta debería tomar unos 5 segundos en ejecutarse. Después de que se ejecuta la consulta, el resultado muestra los siguientes resultados.

    Ejemplo de serie temporal

    Observa cómo se muestra la previsión de la primera serie temporal (store_number=2190, zip_code=50314, city=DES MOINES, county=POLK). Si observas el resto de las filas, notas las previsiones de los otros grupos.

    En general, las previsiones se generan para cada serie temporal única. Si deseas generar previsiones para niveles agregados, como las previsiones de un condado específico, debes generar una previsión jerárquica.

Crea un modelo de serie temporal con previsiones jerárquicas

Crea una previsión de series temporales jerárquicas mediante los datos de ventas de bebidas alcohólicas de Iowa.

Con la siguiente consulta de GoogleSQL, se crea un modelo que genera previsiones jerárquicas para la cantidad total diaria de botellas vendidas en 2015 en los condados de Polk, Linn y Scott. La cláusula CREATE MODEL crea y entrena un modelo llamado bqml_tutorial.liquor_forecast_hierarchical.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;

El parámetro HIERARCHICAL_TIME_SERIES_COLS indica que estás creando una previsión jerárquica basada en un conjunto de columnas. Cada una de estas columnas se acumula y agrega. Por ejemplo, en la consulta anterior, esto significa que store_number se acumula para mostrar previsiones de county, city y zip_code. Por separado, zip_code y store_number también se acumulan para mostrar previsiones de county y city. El orden de las columnas es importante porque define la estructura de la jerarquía.

Ejecuta la consulta CREATE MODEL para crear y entrenar el modelo:

  1. En la consola de Google Cloud, haz clic en el botón Ejecutar una consulta en BigQuery.

  2. Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS',
    TIME_SERIES_TIMESTAMP_COL = 'date',
    TIME_SERIES_DATA_COL = 'total_bottles_sold',
    TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'],
    HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'],
    HOLIDAY_REGION = 'US')
AS
SELECT
  store_number,
  zip_code,
  city,
  county,
  date,
  SUM(bottles_sold) AS total_bottles_sold
FROM
  `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
  date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31')
  AND county IN ('POLK', 'LINN', 'SCOTT')
GROUP BY store_number, date, city, zip_code, county;
  1. Haz clic en Ejecutar.

    La consulta tarda unos 45 segundos en completarse; luego, el modelo (bqml_tutorial.liquor_forecast_hierarchical) aparece en el panel Explorador. Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

Inspecciona los resultados del modelo de serie temporal jerárquica

  1. En la consola de Google Cloud, haz clic en el botón Ejecutar una consulta en BigQuery.

  2. Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.

    #standardSQL
    SELECT
    *
    FROM
    ML.FORECAST(
      MODEL `bqml_tutorial.liquor_forecast_hierarchical`,
      STRUCT(30 AS horizon, 0.8 AS confidence_level))
    WHERE city = 'LECLAIRE'
    ORDER BY county, city, zip_code, store_number, forecast_timestamp
    
  3. Haz clic en Ejecutar.

    La consulta debería tomar unos 5 segundos en ejecutarse. Después de que se ejecuta la consulta, el resultado muestra los siguientes resultados.

    Ejemplo de series temporales jerárquicas

    Observa cómo se muestra la previsión agregada para la ciudad de LeClaire (store_number=NULL, zip_code=NULL, city=LECLAIRE, county=SCOTT). Si observas más en el resto de las filas, verás las previsiones de los otros subgrupos. Por ejemplo, en la siguiente imagen se muestran las previsiones agregadas para el código postal 52753 (store_number=NULL, zip_code=52753, city=LECLAIRE, county=SCOTT):

    Ejemplo de series temporales jerárquicas

Borra tu conjunto de datos

Borrar tu proyecto quita todos sus conjuntos de datos y tablas. Si prefieres volver a usar el proyecto, puedes borrar el conjunto de datos que creaste en este instructivo:

  1. Si es necesario, abre la página de BigQuery en la consola de Google Cloud.

    Ir a la página de BigQuery

  2. En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.

  3. Haz clic en Borrar conjunto de datos en el lado derecho de la ventana. Esta acción borra el conjunto de datos, la tabla y todos los datos.

  4. En el cuadro de diálogo Borrar conjunto de datos, escribe el nombre del conjunto de datos (bqml_tutorial) para confirmar el comando de borrado y, luego, haz clic en Borrar.

Borra tu proyecto

Para borrar el proyecto, haz lo siguiente:

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

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?