En este tutorial se explica cómo usar un ARIMA_PLUS
modelo de serie temporal univariante para predecir el valor futuro de una columna determinada en función de los valores históricos de esa columna.
En este tutorial se prevé una sola serie temporal. Los valores previstos se calculan una vez por cada punto temporal de los datos de entrada.
En este tutorial se usan datos de la bigquery-public-data.google_analytics_sample.ga_sessions
tabla de ejemplo pública. Esta tabla contiene datos de comercio electrónico ofuscados de Google Merchandise Store.
Crear conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.
Consola
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haga 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, introduce
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).
Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos, usa el comando
bq mk
con la marca --location
. Para ver una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos definida comoUS
y la descripciónBigQuery 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 omite-d
y--dataset
, el comando creará un conjunto de datos de forma predeterminada.Confirma que se ha 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" } }
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Visualizar los datos de entrada
Antes de crear el modelo, puedes visualizar los datos de la serie temporal de entrada para hacerte una idea de la distribución. Para ello, puedes usar Looker Studio.
Sigue estos pasos para visualizar los datos de la serie temporal:
SQL
En la siguiente consulta de GoogleSQL, la instrucción SELECT
analiza la columna date
de la tabla de entrada y la convierte al tipo TIMESTAMP
, le cambia el nombre a parsed_date
y usa las cláusulas SUM(...)
y GROUP BY date
para crear un valor totals.visits
diario.
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date;
Cuando se complete la consulta, haz clic en Explorar datos > Explorar con Looker Studio. Looker Studio se abre en una pestaña nueva. Sigue estos pasos en la nueva pestaña.
En Looker Studio, haz clic en Insertar > Gráfico de serie temporal.
En el panel Gráfico, selecciona la pestaña Configuración.
En la sección Métrica, añade el campo total_visits y quita la métrica predeterminada Número de registros. El gráfico resultante será similar al siguiente:
Si observas el gráfico, verás que la serie temporal de entrada tiene un patrón estacional semanal.
.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
El resultado es similar al siguiente:
Crear el modelo de serie temporal
Crea un modelo de serie temporal para predecir el total de visitas al sitio representado por la columna totals.visits
y entrénalo con los datos de Google Analytics 360.
SQL
En la siguiente consulta, la cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica que estás creando un modelo de serie temporal basado en ARIMA. La opción auto_arima
de la instrucción CREATE MODEL
tiene el valor predeterminado TRUE
, por lo que el algoritmo auto.ARIMA
ajusta automáticamente los hiperparámetros del modelo. El algoritmo ajusta decenas de modelos candidatos y elige el mejor, que es el que tiene el criterio de información de Akaike (AIC) más bajo.
La opción data_frequency
de las instrucciones CREATE MODEL
tiene el valor predeterminado AUTO_FREQUENCY
, por lo que el proceso de entrenamiento infiere automáticamente la frecuencia de los datos de la serie temporal de entrada. La opción decompose_time_series
de la instrucción CREATE MODEL
tiene el valor predeterminado TRUE
, por lo que se devuelve información sobre los datos de la serie temporal al evaluar el modelo en el paso siguiente.
Sigue estos pasos para crear el modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
CREATE OR REPLACE MODEL `bqml_tutorial.ga_arima_model` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'parsed_date', time_series_data_col = 'total_visits', auto_arima = TRUE, data_frequency = 'AUTO_FREQUENCY', decompose_time_series = TRUE ) AS SELECT PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date, SUM(totals.visits) AS total_visits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` GROUP BY date;
La consulta tarda unos 4 segundos en completarse. Después, puedes acceder al modelo
ga_arima_model
. Como la consulta usa una instrucciónCREATE MODEL
para crear un modelo, no se muestran resultados.
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Evalúa los modelos candidatos
SQL
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 evaluados durante el proceso de ajuste automático de hiperparámetros.
Sigue estos pasos para evaluar el modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.ga_arima_model`);
Los resultados deberían ser similares a los siguientes:
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Las columnas de salida non_seasonal_p
, non_seasonal_d
, non_seasonal_q
y has_drift
definen un modelo ARIMA en el flujo 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 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 por cada modelo ARIMA candidato. En los casos en los que algunos de los modelos no son válidos, se excluyen del resultado. Estos modelos candidatos se devuelven en orden ascendente según el criterio de información de la IA. El modelo de la primera fila tiene el AIC más bajo y se considera el mejor modelo. El mejor modelo se guarda como 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 serie temporal. No tiene nada que ver con el modelo ARIMA, por lo que tiene el mismo valor en todas las filas de salida. Informa de un patrón semanal, que coincide con los resultados que has visto si has elegido visualizar los datos de entrada.
Las columnas has_holiday_effect
, has_spikes_and_dips
y has_step_changes
solo se rellenan cuando decompose_time_series=TRUE
. Estas columnas también reflejan información sobre los datos de series temporales de entrada y no están relacionadas con el modelado ARIMA. Estas columnas también tienen los mismos valores en todas las filas de salida.
En la columna error_message
se muestran los errores que se han producido durante el proceso de auto.ARIMA
ajuste. Una de las posibles razones por las que se producen 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 obtener el mensaje de error de todos los modelos candidatos, defina la opción show_all_candidate_models
en TRUE
al crear el modelo.
Para obtener más información sobre las columnas de salida, consulta la función ML.ARIMA_EVALUATE
.
Inspeccionar los coeficientes del modelo
SQL
Inspecciona los coeficientes del modelo de serie temporal con la función ML.ARIMA_COEFFICIENTS
.
Sigue estos pasos para obtener los coeficientes del modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.ga_arima_model`);
La columna ar_coefficients
muestra los coeficientes del modelo de la parte autorregresiva (AR) del modelo ARIMA. Del mismo modo, la columna ma_coefficients
output muestra los coeficientes del modelo de la parte de media móvil (MA) del
modelo ARIMA. Ambas columnas contienen valores de matriz cuya longitud es igual a non_seasonal_p
y non_seasonal_q
, respectivamente. En el resultado de la función ML.ARIMA_EVALUATE
, has visto que el mejor modelo tiene un valor de non_seasonal_p
de 2
y un valor de non_seasonal_q
de 3
. Por lo tanto, en la salida ML.ARIMA_COEFFICIENTS
, el valor ar_coefficients
es una matriz de dos elementos y el valor ma_coefficients
es una matriz de tres elementos. El valor de intercept_or_drift
es el término constante del modelo ARIMA.
Para obtener más información sobre las columnas de salida, consulta la función ML.ARIMA_COEFFICIENTS
.
BigQuery DataFrames
Inspecciona los coeficientes del modelo de serie temporal con la función coef_
.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
La columna ar_coefficients
muestra los coeficientes del modelo de la parte autorregresiva (AR) del modelo ARIMA. Del mismo modo, la columna ma_coefficients
output muestra los coeficientes del modelo de la parte de media móvil (MA) del
modelo ARIMA. Ambas columnas contienen valores de matriz cuya longitud es igual a non_seasonal_p
y non_seasonal_q
, respectivamente.
Usar el modelo para predecir datos
SQL
Prevé valores futuros de series temporales 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 temporales futuros y genera un intervalo de predicción con un nivel de confianza del 80 %.
Sigue estos pasos para predecir datos con el modelo:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level));
Los resultados deberían ser similares a los siguientes:
BigQuery DataFrames
Prevé valores futuros de series temporales con la función predict
.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Las filas de salida están ordenadas cronológicamente 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 la función ML.FORECAST
.
Explicar los resultados de las previsiones
SQL
Puede obtener métricas de interpretabilidad además de datos de previsión mediante la función ML.EXPLAIN_FORECAST
. La función ML.EXPLAIN_FORECAST
predice los valores de series temporales futuras y también devuelve todos los componentes independientes de la serie temporal.
Al igual que la función ML.FORECAST
, la cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level)
utilizada en la función ML.EXPLAIN_FORECAST
indica que la consulta pronostica 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 Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.ga_arima_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level));
Los resultados deberían ser similares a los siguientes:
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 la función
ML.EXPLAIN_FORECAST
.
BigQuery DataFrames
Puede obtener métricas de interpretabilidad además de datos de previsión mediante la función predict_explain
. La función predict_explain
pronostica los valores de series temporales futuros y también devuelve todos los componentes independientes de la serie temporal.
Al igual que la función predict
, la cláusula horizon=30, confidence_level=0.8
utilizada en la función predict_explain
indica que la consulta pronostica 30 puntos temporales futuros y genera un intervalo de predicción con una confianza del 80 %.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Si quieres visualizar los resultados, puedes usar Looker Studio, tal como se describe en la sección Visualizar los datos de entrada, para crear un gráfico con las siguientes columnas como métricas:
time_series_data
prediction_interval_lower_bound
prediction_interval_upper_bound
trend
seasonal_period_weekly
step_changes