En este instructivo, aprenderás a usar un modelo de series temporales 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 pronosticados se calculan una vez para cada punto en el tiempo de 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 sobre las partículas diarias (PM2.5), la temperatura y la velocidad del viento recopilada de varias ciudades de EE.UU.
Objetivos
En este instructivo, se te guiará para completar las siguientes tareas:
- Crear un modelo de series temporales para pronosticar los valores de PM2.5 con la sentencia
CREATE MODEL
- Evaluar la información del promedio móvil integrado autorregresivo (ARIMA) en el modelo con la función
ML.ARIMA_EVALUATE
- Inspeccionar los coeficientes del modelo con la función
ML.ARIMA_COEFFICIENTS
- Recuperar los valores previstos de PM2.5 del modelo con la función
ML.FORECAST
- Evaluar la precisión del modelo con la función
ML.EVALUATE
- Recuperar componentes de las series temporales, como la estacionalidad, la tendencia y las atribuciones de atributos, con la función
ML.EXPLAIN_FORECAST
Puedes inspeccionar estos componentes de las series temporales para explicar los valores pronosticados.
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 los precios de BigQuery ML.
Antes de comenzar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery se habilita automáticamente en proyectos nuevos.
Para activar BigQuery en un proyecto existente, ve a
Enable the BigQuery API.
Permisos necesarios
- Para crear el conjunto de datos, necesitas el permiso
bigquery.datasets.create
de IAM. Para crear el recurso de conexión, necesitas los siguientes permisos:
bigquery.connections.create
bigquery.connections.get
Para crear el modelo, necesitas los siguientes permisos:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
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:
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.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).
Los conjuntos de datos públicos se almacenan en la multirregión
US
. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
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 creas las siguientes columnas para usarlas como variables de entrada del modelo:
date
: la fecha de la observaciónpm25
el valor promedio de PM2.5 de cada díawind_speed
: la velocidad del viento promedio de cada díatemperature
: 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:
En la consola de Google Cloud, ve a la página de BigQuery.
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 manera opcional los datos de las 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 las series temporales:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`;
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.
En Looker Studio, haz clic en Insertar > Gráfico de series temporales.
En el panel Chart, elige la pestaña Setup.
En la sección Métrica, agrega los campos pm25, temperatura y wind_speed, y quita la métrica predeterminada Record Count. El gráfico resultante se verá similar al siguiente:
Si observas el gráfico, puedes ver que la serie temporal de entrada tiene un patrón estacional semanal.
Crea el modelo de series temporales
Crea un modelo de series temporales para pronosticar los valores de material particulado, como lo representa 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
y selecciona 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 un modelo de 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 de 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:
En la consola de Google Cloud, ve a la página de BigQuery.
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 lo cual, el modelo
seattle_pm25_xreg_model
aparece en el panel Explorador. Debido a que en la consulta se usa una sentenciaCREATE 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
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:
En la consola de Google Cloud, ve a la página de BigQuery.
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:
Las columnas de salida
non_seasonal_p
,non_seasonal_d
,non_seasonal_q
yhas_drift
definen un modelo ARIMA en la canalización de entrenamiento. Las columnas de salidalog_likelihood
,AIC
yvariance
son relevantes para el proceso de ajuste del modelo ARIMA.El algoritmo
auto.ARIMA
usa la prueba de KPSS para determinar el mejor valor denon_seasonal_d
, que en este caso es1
. Cuandonon_seasonal_d
es1
, el algoritmoauto.ARIMA
entrena 42 candidatos diferentes de modelos ARIMA 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 muestran en orden ascendente por 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 comoML.FORECAST
en el modelo.La columna
seasonal_periods
contiene información sobre el patrón estacional identificado en los datos de las series temporales. 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 coincide con los resultados que viste si elegiste visualizar los datos de entrada.Las columnas
has_holiday_effect
,has_spikes_and_dips
yhas_step_changes
proporcionan información sobre los datos de series temporales de entrada y no se relacionan con el modelado de ARIMA. Estas columnas se muestran porque el valor de la opcióndecompose_time_series
en la sentenciaCREATE MODEL
esTRUE
. Estas columnas también tienen los mismos valores en todas las filas de salida.La columna
error_message
muestra los errores que se generaron durante el proceso de ajusteauto.ARIMA
. Una posible causa de errores es cuando las columnasnon_seasonal_p
,non_seasonal_d
,non_seasonal_q
yhas_drift
seleccionadas no pueden estabilizar la serie temporal. Para recuperar el mensaje de error de todos los modelos candidatos, configura la opciónshow_all_candidate_models
enTRUE
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:
En la consola de Google Cloud, ve a la página de BigQuery.
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:
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 salidama_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 anon_seasonal_p
ynon_seasonal_q
, respectivamente. En el resultado de la funciónML.ARIMA_EVALUATE
, viste que el mejor modelo tiene un valornon_seasonal_p
de0
y un valornon_seasonal_q
de5
. Por lo tanto, en el resultadoML.ARIMA_COEFFICIENTS
, el valorar_coefficients
es un array vacío y el valorma_coefficients
es un array de 5 elementos. El valorintercept_or_drift
es el término constante en el modelo ARIMA.Las columnas de salida
processed_input
,weight
ycategory_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 columnaweight
. Si el atributo es categórico, el valorcategory_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 pronosticar 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 pronosticar datos con el modelo:
En la consola de Google Cloud, ve a la página de BigQuery.
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:
Las filas de salida están en orden cronológico según el valor de la columna
forecast_timestamp
. En la previsión de series temporales, el intervalo de confianza, como lo representan los valores de las columnasprediction_interval_lower_bound
yprediction_interval_upper_bound
, es tan importante como el valor de la columnaforecast_value
. El valor deforecast_value
es el punto medio del intervalo de confianza. El intervalo de confianza depende de los valores de las columnasstandard_error
yconfidence_level
.Para obtener más información sobre las columnas de salida, consulta la función
ML.FORECAST
.
Evalúa la exactitud 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 sentencia 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 exactitud del modelo:
En la consola de Google Cloud, ve a la página de BigQuery.
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:
Para obtener más información sobre las columnas de salida, consulta la función
ML.EVALUATE
.
Explica los resultados de las previsiones
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(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:
En la consola de Google Cloud, ve a la página de BigQuery.
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 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:
Si es necesario, abre la página de BigQuery en la consola de Google Cloud.
En el panel de navegación, haz clic en el conjunto de datos bqml_tutorial que creaste.
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.
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- Aprende a prever una sola serie temporal con un modelo univariable
- Obtén información para prever varias series temporales con un modelo univariable
- Obtén información para aplicar escalamiento a un modelo univariado cuando se prevén varias series temporales en muchas filas.
- Aprende a predecir jerárquicamente varias series temporales con un modelo univariable
- Para obtener una descripción general de BigQuery ML, consulta Introducción a la IA y el AA en BigQuery.