Prevé series temporales jerárquicas con un modelo univariable ARIMA_PLUS

En este instructivo, aprenderás a usar un modelo de serie temporal univariado ARIMA_PLUS para prever series temporales jerárquicas. Pronostica el valor futuro de una columna determinada en función de 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 y para cada valor en una o más columnas que especifican las dimensiones de interés. Por ejemplo, si deseas predecir los incidentes de tráfico diarios y especificaste una columna de dimensión que contiene datos estatales, 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 predecir los incidentes de tráfico diarios y especificaste columnas de dimensiones 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 reconciliación jerárquica para agregar y reconciliar cada serie temporal secundaria con su elemento superior. 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 que 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 licores en diferentes tiendas con datos públicos de ventas de licores de Iowa.

Antes de leer este instructivo, te recomendamos que leas Cómo predecir varias series temporales con un modelo univariado.

Permisos necesarios

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

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

  • Crea un modelo de series temporales múltiples y un modelo de series temporales jerárquicas múltiples para predecir los valores de ventas de botellas con la declaración CREATE MODEL.
  • Recupera los valores de ventas de botellas previstos de los modelos con la función ML.FORECAST.

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

    Go to project selector

  5. Make sure 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

    Enable the BigQuery API.

    Enable the API

  7. Crea un conjunto de datos

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

    Console

    1. En la consola de Google Cloud , ve a la página 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.

      La opción de menú Crear 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).

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

    bq

    Para crear un conjunto de datos nuevo, usa el comando bq mk con la marca --location. Para obtener una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset.

    1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos establecida en US y una descripción de BigQuery ML tutorial dataset:

      bq --location=US mk -d \
       --description "BigQuery ML tutorial dataset." \
       bqml_tutorial

      En lugar de usar la marca --dataset, el comando usa el acceso directo -d. Si omites -d y --dataset, el comando crea un conjunto de datos de manera predeterminada.

    2. Confirma que se haya creado el conjunto de datos:

      bq ls

    API

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

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

    Permite trabajar con BigQuery DataFrames.

    Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.

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

    Crea un modelo de series temporales

    Crea un modelo de serie temporal 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 cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica que creas un modelo de serie temporal basado en ARIMA. Utilizas la opción TIME_SERIES_ID de la instrucción CREATE MODEL 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 se establece de forma predeterminada en TRUE, de modo que se muestre información sobre los datos de series temporales cuando evalúes el modelo en el siguiente paso.

    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 candidatos y elige el mejor, que es el que tiene el criterio de información Akaike (AIC) más bajo. Configurar la opción holiday_region en US permite un modelado más preciso de esos puntos temporales de las festividades de Estados Unidos si es que existen patrones de festividades de Estados Unidos en la serie temporal.

    Sigue estos pasos para crear el modelo:

    1. En la consola de Google Cloud , 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 eso, 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.

    Usa el modelo para predecir datos

    Prevé valores de series temporales futuras con 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 predecir datos con el modelo:

    1. En la consola de Google Cloud , 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 para cada serie temporal única subsiguiente. 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árquico

    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 en 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 agrupa y agrega. Por ejemplo, en la consulta anterior, esto significa que el valor de la columna store_number se une para mostrar las previsiones de cada valor de county, city y zip_code. Por otro lado, los valores de zip_code y store_number también se combinan para mostrar las previsiones de cada valor de 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 consola de Google Cloud , 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 eso, 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.

    Usa el modelo jerárquico para predecir datos

    Recupera los datos de previsión jerárquica del modelo con la función ML.FORECAST.

    Sigue estos pasos para predecir datos con el modelo:

    1. En la consola de Google Cloud , 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. Si observas el resto de las filas, notarás las previsiones de los otros subgrupos. Por ejemplo, la siguiente imagen muestra los pronósticos agregados 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 consola deGoogle 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. 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.

    ¿Qué sigue?