Previsión de series temporales múltiples a partir de los datos sobre la calidad del aire en Seattle

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En este instructivo, aprenderás a crear un modelo de serie temporal multivariable (ARIMA_PLUS_XREG) para realizar previsiones de series temporales mediante las siguientes tablas de muestra del conjunto de datos epa_historical_air_quality:

El conjunto de datos epa_historical_air_quality contiene la información diaria sobre la temperatura del viento y la 2.5 p.m. recopilada de varias ciudades de EE.UU.

Objetivos

En este instructivo usarás lo siguiente:

  • La declaración CREATE MODEL, para crear un modelo de serie temporal
  • La función ML.ARIMA_EVALUATE para inspeccionar la información de evaluación relacionada con ARIMA en el modelo
  • La función ML.ARIMA_COEFFICIENTS, para inspeccionar los coeficientes del modelo
  • La función ML.FORECAST: Para prever el día a día, 2.5 p.m.
  • La función ML.EVALUATE: para evaluar el modelo con datos reales

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 la página de 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. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

  4. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

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

    Habilita la API de BigQuery.

    Habilita la API

Paso uno: Crea el conjunto de datos

El primer paso es crear un conjunto de datos de BigQuery donde se almacenará tu modelo de AA. Para crear el conjunto de datos, haga lo siguiente:

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

    Ir a la página de BigQuery

  2. En la sección Recursos, haz clic en el nombre del proyecto.

  3. En el panel de detalles, haz clic en Crear conjunto de datos.

    Crea un conjunto de datos.

  4. En la página Crear conjunto de datos, sigue estos pasos:

    • En ID del conjunto de datos, ingresa bqml_tutorial.
    • En Ubicación de los datos, elige Estados Unidos (EE.UU.). En la actualidad, los conjuntos de datos públicos se almacenan en la ubicación multirregión US. Para que sea más simple, debes colocar el conjunto de datos en la misma ubicación.

      Página Crear un conjunto de datos.

  5. Usa los valores predeterminados para el resto de la configuración y haz clic en Crear conjunto de datos.

Paso dos: Crea series temporales con atributos adicionales

Los datos de PM2.5, temperatura y velocidad del viento se encuentran en tablas diferentes. Para simplificar las siguientes consultas, puedes crear una tabla nueva bqml_tutorial.seattle_air_quality_daily si las unes, con las siguientes columnas:

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

La tabla nueva tiene datos diarios del 11 de agosto de 2009 al 31 de enero de 2022.

En la siguiente consulta de SQL estándar, 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.

#standardSQL
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)

Para ejecutar la consulta, sigue estos pasos:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la consulta de SQL estándar que se muestra arriba en el área de texto del Editor de consultas.

  3. Haga clic en Ejecutar.

Paso tres: Visualiza la serie temporal que deseas prever (opcional)

Antes de crear el modelo, es útil ver cómo se ve la serie temporal de entrada. Puedes hacer esto con Looker Studio.

En la siguiente consulta de SQL estándar, la cláusula FROM bqml_tutorial.seattle_air_quality_daily indica que estás consultando la tabla seattle_air_quality_daily en el conjunto de datos bqml_tutorial que acabas de crear.

#standardSQL
SELECT
  *
FROM
  `bqml_tutorial.seattle_air_quality_daily`

Para ejecutar la consulta, sigue estos pasos:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingrese la siguiente consulta en SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     `bqml_tutorial.seattle_air_quality_daily`
    
  3. Haga clic en Ejecutar.

    Después de que se ejecuta esta consulta, el resultado es similar a la siguiente captura de pantalla. En la captura de pantalla, puedes ver que esta serie temporal tiene 3,960 datos. Haz clic en el botón Explorar datos y, luego, en Explorar con Looker Studio. Looker Studio se abrirá en una pestaña nueva. Completa los siguientes pasos en la pestaña nueva.

    Resultado de la consulta

    En el panel Gráfico (Chart), elige Gráfico de serie temporal (Time series chart):

    Time_series_chart

    En el panel CONFIGURACIÓN, debajo del panel Gráfico, ve a la sección Métrica. Agrega los campos pm25, temperature y wind_speed, y luego quita la métrica predeterminada Record Count (Recuento de registros). También puede establecer un período personalizado, p.ej., Desde el 1 de enero hasta el 31 de diciembre de 2021 para acortar las series temporales. Esto se muestra en la siguiente figura.

    Time_series_data_fields

    Después de completar estos pasos, aparecerá el siguiente gráfico. El gráfico muestra que la serie temporal de entrada tiene un patrón estacional semanal.

    Result_visualization

Paso cuatro: Crea tu modelo de serie temporal

A continuación, crea un modelo de serie temporal con los datos de calidad del aire anteriores. En la siguiente consulta de SQL estándar, se crea un modelo que se usa para prever pm25.

La cláusula CREATE MODEL crea y entrena un modelo llamado bqml_tutorial.seattle_pm25_xreg_model.

#standardSQL
CREATE OR REPLACE
  MODEL
    `bqml_tutorial.seattle_pm25_xreg_model`
  OPTIONS (
    MODEL_TYPE = 'ARIMA_PLUS_XREG',
    time_series_timestamp_col = 'date',
    time_series_data_col = 'pm25')
AS
SELECT
  date,
  pm25,
  temperature,
  wind_speed
FROM
  `bqml_tutorial.seattle_air_quality_daily`
WHERE
  date
  BETWEEN DATE('2012-01-01')
  AND DATE('2020-12-31')

La cláusula OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...) indica que estás creando un ARIMA con modelo de regresores externos. 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_XREG. El algoritmo se ajusta a decenas de modelos candidatos y elige el mejor con el criterio de información Akaike (AIC) más bajo. Además, debido a que el valor predeterminado es data_frequency='AUTO_FREQUENCY', el proceso de entrenamiento infiere de forma automática la frecuencia de datos de la serie temporal de entrada.

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

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingresa la consulta de SQL estándar que se muestra arriba en el área de texto del Editor de consultas.

  3. Haga clic en Ejecutar.

    La consulta toma unos 20 segundos en completarse; luego, el modelo (seattle_pm25_xreg_model) aparece en el panel de navegación. Debido a que en la consulta se usa una declaración CREATE MODEL para crear un modelo, no se muestran los resultados.

Paso cinco: Inspecciona las métricas de evaluación de todos los modelos evaluados

Después de crear el modelo, puedes usar la función ML.ARIMA_EVALUATE para ver las métricas de evaluación de todos los modelos candidatos que se evaluaron durante el proceso de ajuste automático de hiperparámetros.

En la siguiente consulta de SQL estándar, la cláusula FROM usa la función ML.ARIMA_EVALUATE en el modelo, bqml_tutorial.seattle_pm25_xreg_model. De forma predeterminada, esta consulta muestra las métricas de evaluación de todos los modelos candidatos.

Para ejecutar la ML.ARIMA_EVALUATE, sigue estos pasos:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingrese la siguiente consulta en SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL bqml_tutorial.seattle_pm25_xreg_model)
    
  3. Haga clic en Ejecutar.

  4. Cuando la consulta finalice, haga clic en la pestaña Resultados (Results) debajo del área de texto de la consulta. Los resultados deberían ser similares a los de la siguiente captura de pantalla:

    Resultado de ML.ARIMA_EVALUATE.

    Los resultados incluyen las siguientes columnas:

    • non_seasonal_p
    • non_seasonal_d
    • non_seasonal_q
    • has_drift
    • log_likelihood
    • AIC
    • variance
    • seasonal_periods
    • has_holiday_effect
    • has_spikes_and_dips
    • has_step_changes
    • error_message

    Las siguientes cuatro columnas (non_seasonal_{p,d,q} y has_drift) definen un modelo ARIMA en la canalización de entrenamiento. Las tres métricas posteriores (log_likelihood, AIC y variance) son relevantes para el proceso de ajuste del modelo ARIMA.

    El algoritmo auto.ARIMA primero usa la prueba de KPSS para decidir que el mejor valor de non_seasonal_d es 1. Cuando non_seasonal_d es 1, auto.ARIMA entrena 42 candidatos diferentes de modelos ARIMA en paralelo. Ten en cuenta que, cuando non_seasonal_d no es 1, auto.ARIMA entrena 21 modelos candidatos diferentes. En este ejemplo, los 42 modelos candidatos son válidos. Por lo tanto, el resultado contiene 42 filas y cada una está asociada con un candidato de modelo ARIMA. Ten en cuenta que, para algunas series temporales, algunos modelos candidatos no son válidos, ya que no son invertibles o no son fijos. Estos modelos no válidos se excluyen del resultado, lo que hará que tenga menos de 42 filas. Estos modelos candidatos se ordenan por AIC en orden ascendente. 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 ML.FORECAST, ML.EVALUATE, y ML.ARIMA_COEFFICIENTS como se muestra en los siguientes pasos.

    La columna seasonal_periods es el patrón estacional dentro de la serie temporal de entrada. No tiene nada que ver con el modelo ARIMA, por lo tanto, tiene el mismo valor en todas las filas de salida. Informa un patrón semanal, que está dentro de nuestras expectativas, como se describe en el paso dos.

    Las columnas has_holiday_effect, has_spikes_and_dips y has_step_changes solo se propagan cuando decompose_time_series=TRUE. Se relacionan con el efecto, los aumentos y las disminuciones de las festividades, y los cambios de pasos dentro de la serie temporal de entrada, que no están relacionados con el modelo ARIMA. Por lo tanto, todas son iguales en todas las filas de salida, excepto en los modelos con fallas.

    La columna error_message muestra el posible error generado durante el proceso de ajuste auto.ARIMA. Un motivo posible 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 posible de todos los modelos candidatos, configura show_all_candidate_models=true.

Paso seis: Inspecciona los coeficientes del modelo

La función ML.ARIMA_COEFFICIENTS recupera los coeficientes del modelo ARIMA, bqml_tutorial.seattle_pm25_xreg_model. ML.ARIMA_COEFFICIENTS toma el modelo como la única entrada.

Ejecuta la consulta ML.ARIMA_COEFFICIENTS:

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingrese la siguiente consulta en SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL bqml_tutorial.seattle_pm25_xreg_model)
    
  3. Haga clic en Ejecutar.

    Los resultados deberían verse así:

    Resultado de ML.ARIMA_COEFFICIENTS.

    Los resultados incluyen las siguientes columnas:

    • ar_coefficients
    • ma_coefficients
    • intercept_or_drift
    • processed_input
    • weight
    • category_weights.category
    • category_weights.weight

    ar_coefficients muestra los coeficientes del modelo de la parte autorregresiva (AR) del modelo ARIMA. De manera similar, ma_coefficients muestra los coeficientes del modelo de la parte de promedio móvil (MA). Ambos son arreglos, cuyas longitudes son iguales a non_seasonal_p y non_seasonal_q, respectivamente. A partir del resultado de ML.ARIMA_EVALUATE, el mejor modelo como en la fila superior tiene un non_seasonal_p de 0 y un non_seasonal_q de 5. Por lo tanto, ar_coefficients es un arreglo vacío y ma_coefficients es un arreglo de longitud 5. El intercept_or_drift es el término constante en el modelo ARIMA.

    processed_input y las columnas weight y category_weights correspondientes muestran las ponderaciones para cada atributo y la intersección en el modelo de regresión lineal. Si el atributo es numérico, el peso está en la columna weight. Si el atributo es un atributo categórico, el category_weights es un ARRAY de STRUCT, en el que STRUCT contiene los nombres y los pesos de las categorías.

Paso siete: Usa tu modelo para prever la serie temporal

La función ML.FORECAST prevé valores de series temporales futuras con un intervalo de predicción mediante tu modelo bqml_tutorial.seattle_pm25_xreg_model y valores de atributos futuros.

En la siguiente consulta de SQL estándar, 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%. ML.FORECAST toma el modelo y los valores de atributos futuros, así como algunos argumentos opcionales.

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

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingrese la siguiente consulta en SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    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')
    ))
    
  3. Haga clic en Ejecutar.

    Los resultados deberían verse así:

    Resultado de ML.FORECAST.

    Los resultados incluyen las siguientes columnas:

    • forecast_timestamp
    • forecast_value
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_upper_bound

    Las filas de salida se ordenan en orden cronológico de forecast_timestamp. En la previsión de series temporales, el intervalo de confianza, que capturan los límites inferior y superior, es tan importante como el forecast_value. El forecast_value es el punto medio del intervalo de confianza. El intervalo de confianza depende del standard_error y el confidence_level.

Paso ocho: Evalúa la precisión de la previsión con datos reales

Para evaluar la precisión de la previsión con los datos reales, puedes usar la función ML.EVALUATE con tu modelo, bqml_tutorial.seattle_pm25_xreg_model, y la tabla de datos reales.

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

  1. En la consola de Google Cloud, haz clic en el botón Redactar consulta nueva.

  2. Ingrese la siguiente consulta en SQL estándar en el área de texto del Editor de consultas.

    #standardSQL
    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))
    

    El segundo parámetro corresponde a los datos reales con las características futuras, que se usan para prever los valores futuros a fin de compararlos con los datos reales. El tercer parámetro es una estructura de parámetros para esta función.

  3. Haga clic en Ejecutar.

    Los resultados deberían verse así:

    Resultado de ML.EVALUATE.

Realiza una limpieza

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, puede mantener el proyecto y borrar el conjunto de datos.

Borre el 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, ingresa el nombre del conjunto de datos (bqml_tutorial) y, luego, haz clic en Borrar para confirmar el comando de borrado.

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?