Realiza la previsión de series temporales jerárquicas con un modelo univariable ARIMA_PLUS

En este instructivo, aprenderás a usar un ARIMA_PLUS modelo de series temporales univariable para realizar la previsión de series temporales jerárquicas. Este modelo prevé el valor futuro de una columna determinada, según los valores históricos de esa columna, y también calcula los valores acumulados de esa columna para una o más dimensiones de interés.

Los valores previstos se calculan para cada punto temporal, para cada valor en una o más columnas que especifican las dimensiones de interés. Por ejemplo, si deseas prever incidentes de tráfico diarios y especificas una columna de dimensión que contiene datos de estado, los datos previstos contendrán valores para cada día del Estado A, luego valores para cada día del Estado B, y así sucesivamente. Si deseas prever incidentes de tráfico diarios y especificas columnas de dimensión que contienen datos de estado y ciudad, los datos previstos contendrán valores para cada día del Estado A y la Ciudad A, luego valores para cada día del Estado A y la Ciudad B, y así sucesivamente. En los modelos de series temporales jerárquicas, se usa la conciliación jerárquica para acumular y conciliar cada serie temporal secundaria con su principal. Por ejemplo, la suma de los valores previstos para todas las ciudades del Estado A debe ser igual al valor previsto para el Estado A.

En este instructivo, crearás dos modelos de series temporales con los mismos datos, uno de los cuales usa la previsión jerárquica y el otro no. Esto te permite comparar los resultados que muestran los modelos.

En este instructivo, se usan datos de la tabla pública bigquery-public-data.iowa_liquor.sales.sales. Esta tabla contiene información de más de 1 millón de productos de bebidas alcohólicas en diferentes tiendas con datos públicos de ventas de bebidas alcohólicas de Iowa.

Antes de leer este instructivo, te recomendamos que leas Realiza la previsión de varias series temporales con un modelo univariable.

Permisos necesarios

  • Para crear el conjunto de datos, necesitas el permiso de IAM bigquery.datasets.create.

  • Para crear el modelo, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 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:

  • Crear un modelo de varias series temporales y un modelo de varias series temporales jerárquicas para prever los valores de ventas de botellas con la CREATE MODEL instrucción.
  • Recuperar los valores previstos de ventas de botellas de los modelos con la ML.FORECAST función

Costos

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

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

  1. Accede a tu Google Cloud cuenta. 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.

    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

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

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

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

  6. BigQuery se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, ve a

    Habilita la API de BigQuery.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol Propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol Administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles.

    Habilitar la API

Crea un conjunto de datos

Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:

Console

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

    Ir a BigQuery

  2. En el panel izquierdo, haz clic en Explorador:

    Botón destacado del panel Explorador.

    Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.

  3. En Explorador, expande tu proyecto y, luego, haz clic en Conjuntos de datos.

  4. En la página Conjuntos de datos, haz clic en Crear conjunto de datos.

  5. En el panel Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, ingresa bqml_tutorial.

    • En Ubicación de los datos, selecciona EE.UU.

    Deja la configuración predeterminada restante como está.

  6. Haz clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos nuevo, usa el bq mk --dataset comando.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos establecida en US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirma que se creó el conjunto de datos:

    bq ls

API

Llama al datasets.insert método con un recurso de conjunto de datos definido:

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

Crea un modelo de series temporales

Crea un modelo de series temporales con los datos de ventas de bebidas alcohólicas de Iowa.

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

En la siguiente consulta, la OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) cláusula indica que creas un ARIMAbasado en ARIMA. Usas la TIME_SERIES_ID opción de la CREATE MODEL instrucción para especificar una o más columnas en los datos de entrada para las que deseas obtener previsiones. La opción auto_arima_max_order de la instrucción CREATE MODEL controla el espacio de búsqueda para el ajuste de hiperparámetros en el algoritmo auto.ARIMA. La opción decompose_time_series de la instrucción CREATE MODEL tiene el valor predeterminado TRUE, de modo que se muestre información sobre los datos de series temporales cuando evalúes el modelo en el siguiente paso.

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

Sigue estos pasos para crear el modelo:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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 consulta tarda aproximadamente 37 segundos en completarse, después de lo cual puedes acceder al modelo liquor_forecast. Debido a que la consulta usa una instrucción CREATE MODEL para crear un modelo, no hay resultados de la consulta.

Usa el modelo para prever datos

Para prever valores de series temporales futuras, usa la función ML.FORECAST.

En la siguiente consulta, la cláusula STRUCT(20 AS horizon, 0.8 AS confidence_level) indica que la consulta prevé 20 puntos futuros y genera un intervalo de predicción con un nivel de confianza del 80%.

Sigue estos pasos para prever datos con el modelo:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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;

    Los resultados debería ser similar al siguiente:

    Varias series temporales con un modelo univariado

    El resultado comienza con los datos previstos para la primera serie temporal: store_number=2190, zip_code=50314, city=DES MOINES, county=POLK. A medida que te desplazas por los datos, ves las previsiones de cada serie temporal única posterior. Si deseas generar previsiones que agreguen totales para diferentes dimensiones, como las previsiones de un condado específico, debes generar una previsión jerárquica.

Crea un modelo de series temporales jerárquicas

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

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

En la siguiente consulta, la opción HIERARCHICAL_TIME_SERIES_COLS de la instrucción CREATE MODEL indica que estás creando una previsión jerárquica basada en un conjunto de columnas que especificas. Cada una de estas columnas se acumula y agrega. Por ejemplo, en la consulta anterior, esto significa que el valor de la columna store_number se acumula para mostrar las previsiones de cada valor county, city y zip_code. Por otro lado, los valores zip_code y store_number también se combinan para mostrar las previsiones de cada valor county y city. El orden de las columnas es importante porque define la estructura de la jerarquía.

Sigue estos pasos para crear el modelo:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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;

    La consulta tarda aproximadamente 45 segundos en completarse, después de lo cual se puede acceder al modelo bqml_tutorial.liquor_forecast_hierarchical en el panel Explorador. Debido a que la consulta usa una instrucción CREATE MODEL para crear un modelo, no hay resultados de la consulta.

Usa el modelo jerárquico para prever datos

Para recuperar datos de previsión jerárquica del modelo, usa la función ML.FORECAST.

Sigue estos pasos para prever datos con el modelo:

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

    Ir a BigQuery

  2. En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:

    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;

    Los resultados debería ser similar al siguiente:

    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. Cuando observas el resto de las filas, notas las previsiones de los otros subgrupos. Por ejemplo, la siguiente imagen muestra 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.

Limpia

Para evitar que se apliquen cargos a tu Google Cloud cuenta por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

  • Puedes borrar el proyecto que creaste.
  • De lo contrario, puedes mantener el proyecto y borrar el conjunto de datos.

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 Google Cloud consola.

    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 Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, selecciona el proyecto que tú deseas borrar y, luego, haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Apagar para borrar el proyecto.

¿Qué sigue?