Prevé varias series temporales con un modelo multivariable

En este instructivo, se explica cómo usar un modelo de series temporales multivariable para prever el valor futuro de una columna determinada, según el valor histórico de varios atributos de entrada.

En este instructivo, se realizan previsiones para varias series temporales. Los valores previstos se calculan para cada punto temporal, para cada valor en una o más columnas especificadas. Por ejemplo, si deseas prever el clima y especificas una columna que contiene datos de estado, los datos previstos contendrán previsiones para todos los puntos temporales del Estado A, luego valores previstos para todos los puntos temporales del Estado B, y así sucesivamente. Si deseas prever el clima y especificas columnas que contienen datos de estado y ciudad, los datos previstos contendrán previsiones para todos los puntos temporales del Estado A y la Ciudad A, luego valores previstos para todos los puntos temporales del Estado A y la Ciudad B, y así sucesivamente.

En este instructivo, se usan datos de las tablas públicas bigquery-public-data.iowa_liquor_sales.sales y bigquery-public-data.covid19_weathersource_com.postal_code_day_history. La tabla bigquery-public-data.iowa_liquor_sales.sales contiene datos de ventas de bebidas alcohólicas recopilados de varias ciudades del estado de Iowa. La tabla bigquery-public-data.covid19_weathersource_com.postal_code_day_history contiene datos históricos del clima, como la temperatura y la humedad, de todo el mundo.

Antes de leer este instructivo, te recomendamos que leas Realiza la previsión para una única serie temporal con un modelo multivariable.

Objetivos

En este instructivo, se te guiará por las siguientes tareas:

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.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. 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, dirígete 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 de la izquierda, 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 Explorer, 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 el resto de la configuración predeterminada 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 haya creado 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 una tabla de datos de entrada

Crea una tabla de datos que puedas usar para entrenar y evaluar el modelo. En esta tabla, se combinan columnas de las tablas bigquery-public-data.iowa_liquor_sales.sales y bigquery-public-data.covid19_weathersource_com.postal_code_day_history para analizar cómo el clima afecta el tipo y la cantidad de artículos que piden las tiendas de bebidas alcohólicas. También creas las siguientes columnas adicionales que puedes usar como variables de entrada para el modelo:

  • date: la fecha del pedido
  • store_number: el número único de la tienda que realizó el pedido
  • item_number: el número único del artículo que se pidió
  • bottles_sold: la cantidad de botellas pedidas del artículo asociado
  • temperature: la temperatura promedio en la ubicación de la tienda en la fecha del pedido
  • humidity: la humedad promedio en la ubicación de la tienda en la fecha del pedido

Sigue estos pasos para crear la tabla de datos de entrada:

  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 TABLE
      `bqml_tutorial.iowa_liquor_sales_with_weather` AS
    WITH
      sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          bottles_sold,
          SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code
        FROM
          `bigquery-public-data.iowa_liquor_sales.sales` AS sales
        WHERE
          SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL
      ),
      aggregated_sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          ANY_VALUE(zip_code) AS zip_code,
          SUM(bottles_sold) AS bottles_sold,
        FROM
          sales
        GROUP BY
          DATE,
          store_number,
          item_number
      ),
      weather AS (
        SELECT
          DATE,
          SAFE_CAST(postal_code AS INT64) AS zip_code,
          avg_temperature_air_2m_f AS temperature,
          avg_humidity_specific_2m_gpkg AS humidity,
        FROM
          `bigquery-public-data.covid19_weathersource_com.postal_code_day_history`
        WHERE
          country = 'US' AND
          SAFE_CAST(postal_code AS INT64) IS NOT NULL
      )
    SELECT
      aggregated_sales.date,
      aggregated_sales.store_number,
      aggregated_sales.item_number,
      aggregated_sales.bottles_sold,
      weather.temperature AS temperature,
      weather.humidity AS humidity
    FROM
      aggregated_sales
      LEFT JOIN weather ON aggregated_sales.zip_code=weather.zip_code
      AND aggregated_sales.DATE=weather.DATE;

Crea el modelo de series temporales

Crea un modelo de series temporales para prever las botellas vendidas para cada combinación de ID de tienda y ID de artículo, para cada fecha en la tabla bqml_tutorial.iowa_liquor_sales_with_weather anterior al 1 de septiembre de 2022. Usa la temperatura y la humedad promedio de la ubicación de la tienda en cada fecha como atributos para evaluar durante la previsión. Hay aproximadamente 1 millón de combinaciones distintas de número de artículo y número de tienda en la tabla bqml_tutorial.iowa_liquor_sales_with_weather, lo que significa que hay 1 millón de series temporales diferentes para prever.

Para crear un modelo, sigue estos pasos:

  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.multi_time_series_arimax_model`
    OPTIONS(
      model_type = 'ARIMA_PLUS_XREG',
      time_series_id_col = ['store_number', 'item_number'],
      time_series_data_col = 'bottles_sold',
      time_series_timestamp_col = 'date'
    )
    AS SELECT
      *
    FROM
      `bqml_tutorial.iowa_liquor_sales_with_weather`
    WHERE
      DATE < DATE('2022-09-01');

    La consulta tarda aproximadamente 38 minutos en completarse, después de lo cual puedes acceder al modelo multi_time_series_arimax_model. Debido a que en la consulta se usa una instrucción CREATE MODEL para crear un modelo, no se muestran los resultados.

Usa el modelo para prever datos

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

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

La firma de datos de los datos de entrada para la función ML.FORECAST es la misma que la firma de datos para los datos de entrenamiento que usaste para crear el modelo. La columna bottles_sold no se incluye en la entrada, ya que son los datos que el modelo intenta prever.

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.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE>=DATE('2022-09-01')
        )
      );

    Los resultados debería ser similar al siguiente:

    Son los datos previstos para la cantidad de botellas vendidas.

    Las filas de salida se ordenan por el valor store_number, luego por el valor item_ID y, luego, en orden cronológico por el valor de la columna forecast_timestamp. En la previsión de series temporales, el intervalo de predicción, representado por los valores de las columnas prediction_interval_lower_bound y prediction_interval_upper_bound, es tan importante como el valor de la columna forecast_value. El valor forecast_value es el punto medio del intervalo de predicción. El intervalo de predicción depende de los valores de las columnas standard_error y confidence_level.

    Para obtener más información sobre las columnas de salida, consulta ML.FORECAST.

Explica los resultados de la previsión

Puedes obtener métricas de explicabilidad, además de datos de previsión, con la función ML.EXPLAIN_FORECAST. La función ML.EXPLAIN_FORECAST prevé valores de series temporales futuras y también muestra todos los componentes separados de la serie temporal.

Al igual que la función ML.FORECAST, la cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level) que se usa en la función ML.EXPLAIN_FORECAST indica que la consulta prevé 30 puntos temporales futuros y genera un intervalo de predicción con una confianza del 80%.

La función ML.EXPLAIN_FORECAST proporciona datos históricos y datos de previsión. Para ver solo los datos de previsión, agrega la opción time_series_type a la consulta y especifica forecast como el valor de la opción.

Sigue estos pasos para explicar los resultados del 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.EXPLAIN_FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Los resultados debería ser similar al siguiente:

    Las primeras nueve columnas de salida de los datos previstos y las explicaciones de la previsión. Columnas de la décima a la decimoséptima que muestran los datos previstos y las explicaciones de la previsión. Las últimas seis columnas de salida de los datos previstos y las explicaciones de la previsión.

    Las filas de salida se ordenan cronológicamente por el valor de la columna time_series_timestamp.

    Para obtener más información sobre las columnas de salida, consulta ML.EXPLAIN_FORECAST.

Evalúa la exactitud de la previsión

Para evaluar la exactitud de la previsión del modelo, ejecútalo en datos con los que no se entrenó. Para ello, puedes usar la función ML.EVALUATE. La función ML.EVALUATE evalúa cada serie temporal de forma independiente.

En la siguiente consulta de GoogleSQL, la segunda instrucción SELECT proporciona los datos con los atributos futuros, que se usan para prever los valores futuros y compararlos con los datos reales.

Sigue estos pasos para evaluar la exactitud del 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.EVALUATE (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        (
          SELECT
            *
          FROM
           `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Los resultados debería ser similar al siguiente:

    Son las métricas de evaluación del modelo.

    Para obtener más información sobre las columnas de salida, consulta ML.EVALUATE.

Usa el modelo para detectar anomalías

Para detectar anomalías en los datos de entrenamiento, usa la función ML.DETECT_ANOMALIES.

En la siguiente consulta, la cláusula STRUCT(0.95 AS anomaly_prob_threshold) hace que la función ML.DETECT_ANOMALIES identifique datos anómalos con un nivel de confianza del 95%.

Sigue estos pasos para detectar anomalías en los datos de entrenamiento:

  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.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold)
      );

    Los resultados debería ser similar al siguiente:

    Es la información de detección de anomalías para los datos de entrenamiento.

    La columna anomaly_probability en los resultados identifica la probabilidad de que un valor de columna bottles_sold determinado sea anómalo.

    Para obtener más información sobre las columnas de salida, consulta ML.DETECT_ANOMALIES.

Detecta anomalías en los datos nuevos

Para detectar anomalías en los datos nuevos, proporciona datos de entrada a la función ML.DETECT_ANOMALIES. Los datos nuevos deben tener la misma firma de datos que los datos de entrenamiento.

Sigue estos pasos para detectar anomalías en los datos nuevos:

  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.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold),
        (
          SELECT
            *
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Los resultados debería ser similar al siguiente:

    Es la información de detección de anomalías para los datos nuevos.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud 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, elige el proyecto que deseas borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.

¿Qué sigue?