Cómo realizar la previsión de una sola serie temporal con un modelo multivariable


En este instructivo, aprenderás a usar un modelo de serie temporal multivariable para predecir el valor futuro de una columna determinada, según el valor histórico de varios atributos de entrada.

En este instructivo, se prevé una sola serie temporal. Los valores previstos se calculan una vez para cada punto temporal en los datos de entrada.

En este instructivo, se usan datos del conjunto de datos públicos bigquery-public-data.epa_historical_air_quality. Este conjunto de datos contiene información diaria sobre partículas (PM2.5), temperatura y velocidad del viento recopilada de varias ciudades de EE.UU.

Objetivos

En este instructivo, se te guiará para que completes 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. 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. 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.

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 una tabla de datos de entrada

Crea una tabla de datos que puedas usar para entrenar y evaluar el modelo. Esta tabla combina columnas de varias tablas del conjunto de datos bigquery-public-data.epa_historical_air_quality para proporcionar datos meteorológicos diarios. También crearás las siguientes columnas para usarlas como variables de entrada del modelo:

  • date: la fecha de la observación
  • pm25 el valor promedio de PM2.5 de cada día
  • wind_speed: la velocidad del viento promedio de cada día
  • temperature: la temperatura más alta de cada día

En la siguiente consulta de GoogleSQL, la cláusula FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary indica que consultas las tablas *_daily_summary en el conjunto de datos epa_historical_air_quality. Estas tablas son tablas particionadas.

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

  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 TABLE `bqml_tutorial.seattle_air_quality_daily`
    AS
    WITH
      pm25_daily AS (
        SELECT
          avg(arithmetic_mean) AS pm25, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary`
        WHERE
          city_name = 'Seattle'
          AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass'
        GROUP BY date_local
      ),
      wind_speed_daily AS (
        SELECT
          avg(arithmetic_mean) AS wind_speed, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.wind_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant'
        GROUP BY date_local
      ),
      temperature_daily AS (
        SELECT
          avg(first_max_value) AS temperature, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature'
        GROUP BY date_local
      )
    SELECT
      pm25_daily.date AS date, pm25, wind_speed, temperature
    FROM pm25_daily
    JOIN wind_speed_daily USING (date)
    JOIN temperature_daily USING (date);

Visualiza los datos de entrada

Antes de crear el modelo, puedes visualizar de forma opcional tus datos de series temporales de entrada para tener una idea de la distribución. Puedes hacerlo con Looker Studio.

Sigue estos pasos para visualizar los datos de series temporales:

  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
      `bqml_tutorial.seattle_air_quality_daily`;
  3. Cuando se complete la consulta, haz clic en Explorar datos > Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva. Completa los siguientes pasos en la pestaña nueva.

  4. En Looker Studio, haz clic en Insertar > Gráfico de serie temporal.

  5. En el panel Gráfico, elige la pestaña Configuración.

  6. En la sección Métrica, agrega los campos pm25, temperatura y wind_speed, y quita la métrica predeterminada Conteo de registros. El gráfico resultante es similar al siguiente:

    Gráfico que muestra el clima a lo largo del tiempo.

    Si observas el gráfico, puedes ver que la serie temporal de entrada tiene un patrón estacional semanal.

Crea el modelo de serie temporal

Crea un modelo de series temporales para predecir los valores de partículas, representados por la columna pm25, con los valores de las columnas pm25, wind_speed y temperature como variables de entrada. Entrena el modelo con los datos de calidad del aire de la tabla bqml_tutorial.seattle_air_quality_daily, seleccionando los datos recopilados entre el 1 de enero de 2012 y el 31 de diciembre de 2020.

En la siguiente consulta, la cláusula OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...) indica que creas un modelo ARIMA con regresores externos. La opción auto_arima de la sentencia CREATE MODEL se establece de forma predeterminada en TRUE, por lo que el algoritmo auto.ARIMA ajusta automáticamente los hiperparámetros en el modelo. 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. La opción data_frequency de las sentencias CREATE MODEL se establece de forma predeterminada en AUTO_FREQUENCY, por lo que el proceso de entrenamiento infiere automáticamente la frecuencia de datos de la serie temporal de entrada.

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.seattle_pm25_xreg_model`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS_XREG',
        time_series_timestamp_col = 'date',  # Identifies the column that contains time points
        time_series_data_col = 'pm25')       # Identifies the column to forecast
    AS
    SELECT
      date,                                  # The column that contains time points
      pm25,                                  # The column to forecast
      temperature,                           # Temperature input to use in forecasting
      wind_speed                             # Wind speed input to use in forecasting
    FROM
      `bqml_tutorial.seattle_air_quality_daily`
    WHERE
      date
      BETWEEN DATE('2012-01-01')
      AND DATE('2020-12-31');

    La consulta tarda unos 20 segundos en completarse, después de eso, el modelo seattle_pm25_xreg_model aparece en el panel Explorador. Debido a que en la consulta se usa una declaración CREATE MODEL para crear un modelo, no se muestran los resultados.

Evalúa los modelos candidatos

Evalúa los modelos de series temporales con la función ML.ARIMA_EVALUATE. La función ML.ARIMA_EVALUATE te muestra las métricas de evaluación de todos los modelos candidatos que se evaluaron durante el proceso de ajuste automático de hiperparámetros.

Sigue estos pasos para evaluar 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.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    Los resultados debería ser similar al siguiente:

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

    Las columnas de salida non_seasonal_p, non_seasonal_d, non_seasonal_q y has_drift definen un modelo ARIMA en la canalización de entrenamiento. Las columnas de salida log_likelihood, AIC y variance son relevantes para el proceso de ajuste del modelo ARIMA.

    El algoritmo auto.ARIMA usa la prueba de KPSS para determinar el mejor valor de non_seasonal_d, que en este caso es 1. Cuando non_seasonal_d es 1, el algoritmo auto.ARIMA entrena 42 modelos ARIMA candidatos diferentes en paralelo. En este ejemplo, los 42 modelos candidatos son válidos, por lo que el resultado contiene 42 filas, una para cada modelo ARIMA candidato. En los casos en que algunos de los modelos no son válidos, se excluyen del resultado. Estos modelos candidatos se devuelven en orden ascendente según el AIC. El modelo de la primera fila tiene el AIC más bajo y se considera el mejor modelo. El mejor modelo se guarda como el modelo final y se usa cuando llamas a funciones como ML.FORECAST en el modelo.

    La columna seasonal_periods contiene información sobre el patrón estacional identificado en los datos de series temporales. No tiene nada que ver con el modelado ARIMA, por lo tanto, tiene el mismo valor en todas las filas de salida. Informa un patrón semanal, que coincide con los resultados que viste si elegiste visualizar los datos de entrada.

    Las columnas has_holiday_effect, has_spikes_and_dips y has_step_changes proporcionan información sobre los datos de series temporales de entrada y no están relacionadas con el modelado ARIMA. Estas columnas se devuelven porque el valor de la opción decompose_time_series en la instrucción CREATE MODEL es TRUE. Estas columnas también tienen los mismos valores en todas las filas de salida.

    La columna error_message muestra los errores que se produjeron durante el proceso de ajuste auto.ARIMA. Un motivo posible de los errores es que las columnas non_seasonal_p, non_seasonal_d, non_seasonal_q y has_drift seleccionadas no pueden estabilizar la serie temporal. Para recuperar el mensaje de error de todos los modelos candidatos, configura la opción show_all_candidate_models en TRUE cuando crees el modelo.

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

Inspecciona los coeficientes del modelo

Inspecciona los coeficientes del modelo de series temporales con la función ML.ARIMA_COEFFICIENTS.

Sigue estos pasos para recuperar los coeficientes del 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.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    Los resultados debería ser similar al siguiente:

    Son los coeficientes del modelo de serie temporal.

    La columna de salida ar_coefficients muestra los coeficientes del modelo de la parte autorregresiva (AR) del modelo ARIMA. De manera similar, la columna de salida ma_coefficients muestra los coeficientes del modelo de la parte de promedio móvil (MA) del modelo ARIMA. Ambas columnas contienen valores de array, cuyas longitudes son iguales a non_seasonal_p y non_seasonal_q, respectivamente. En el resultado de la función ML.ARIMA_EVALUATE, viste que el mejor modelo tiene un valor de non_seasonal_p de 0 y un valor de non_seasonal_q de 5. Por lo tanto, en el resultado ML.ARIMA_COEFFICIENTS, el valor ar_coefficients es un array vacío y el valor ma_coefficients es un array de 5 elementos. El valor intercept_or_drift es el término constante en el modelo ARIMA.

    Las columnas de salida processed_input, weight y category_weights muestran los pesos de cada atributo y la intercepción en el modelo de regresión lineal. Si el atributo es numérico, el peso se encuentra en la columna weight. Si el atributo es categórico, el valor de category_weights es un array de valores de struct, en el que cada valor de struct contiene el nombre y el peso de una categoría determinada.

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

Usa el modelo para predecir datos

Prevé valores de series temporales futuras con la función ML.FORECAST.

En la siguiente consulta de GoogleSQL, la cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level) indica que la consulta prevé 30 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.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    Los resultados debería ser similar al siguiente:

    Son los resultados previstos del modelo de serie temporal.

    Las filas de salida se ordenan cronológicamente según 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 de 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 la función ML.FORECAST.

Evalúa la precisión de las previsiones

Evalúa la exactitud de la previsión del modelo con la función ML.EVALUATE.

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

Sigue estos pasos para evaluar la precisión del 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.EVALUATE(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        (
          SELECT
            date,
            pm25,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ),
        STRUCT(
          TRUE AS perform_aggregation,
          30 AS horizon));

    Los resultados deberían ser similares a los siguientes:

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

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

Explica los resultados de la previsión

Puedes obtener métricas de interpretabilidad además de los 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(30 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%.

Sigue estos pasos para explicar los resultados del 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.EXPLAIN_FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    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 según el valor de la columna time_series_timestamp.

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

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 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?