Cómo predecir una sola serie temporal con un modelo univariante


En este instructivo, aprenderás a usar un modelo de serie temporal univariante para pronosticar el valor futuro de una columna determinada en función de los valores históricos de esa columna.

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 de la tabla de muestra bigquery-public-data.google_analytics_sample.ga_sessions pública. Esta tabla contiene datos ofuscados de comercio electrónico de Google Merchandise Store.

Objetivos

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

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

  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

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 de 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).

    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.

    La página Crear conjunto de datos con los valores propagados

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"
  }
}

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 mediante Looker Studio.

Sigue estos pasos para visualizar los datos de las series temporales:

SQL

En la siguiente consulta de GoogleSQL, la sentencia SELECT analiza la columna date de la tabla de entrada al tipo TIMESTAMP y le cambia el nombre a parsed_date, y usa la cláusula SUM(...) y la cláusula GROUP BY date para crear un valor totals.visits diario.

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

    Ir a BigQuery

  2. 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;
    1. 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.

    2. En Looker Studio, haz clic en Insertar > Gráfico de series temporales.

    3. En el panel Chart, elige la pestaña Setup.

    4. En la sección Métrica, agrega el campo total_visits y quita la métrica predeterminada Record Count. El gráfico resultante se verá similar al siguiente:

      Result_visualization

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

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 bigframes.pandas as bpd

# Start by loading the historical data from BigQuerythat you want to analyze and forecast.
# This clause indicates that you are querying the ga_sessions_* tables in the google_analytics_sample dataset.
# Read and visualize the time series you want to forecast.
df = bpd.read_gbq("bigquery-public-data.google_analytics_sample.ga_sessions_*")
parsed_date = bpd.to_datetime(df.date, format="%Y%m%d", utc=True)
parsed_date.name = "parsed_date"
visits = df["totals"].struct.field("visits")
visits.name = "total_visits"
total_visits = visits.groupby(parsed_date).sum()

# Expected output: total_visits.head()
# parsed_date
# 2016-08-01 00:00:00+00:00    1711
# 2016-08-02 00:00:00+00:00    2140
# 2016-08-03 00:00:00+00:00    2890
# 2016-08-04 00:00:00+00:00    3161
# 2016-08-05 00:00:00+00:00    2702
# Name: total_visits, dtype: Int64

total_visits.plot.line()

El resultado es similar al siguiente:Result_visualization

Crea el modelo de series temporales

Crea un modelo de serie temporal para pronosticar las visitas totales al sitio, como se representa en la columna totals.visits, y entrena el modelo 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 creas un modelo de serie temporal basado en ARIMA. 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. La opción decompose_time_series de la sentencia CREATE MODEL se establece de forma predeterminada en TRUE, de modo que se muestre información sobre los datos de series temporales cuando evalúes el modelo en el siguiente paso.

Sigue estos pasos para crear el modelo:

  1. En la consola de Google Cloud, ve a la página de 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.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 de lo cual el modelo ga_arima_model aparece en el panel Explorador. Debido a que en la consulta se usa una sentencia CREATE MODEL para crear un modelo, no se muestran los resultados.

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.

from bigframes.ml import forecasting
import bigframes.pandas as bpd

# Create a time series model to forecast total site visits:
# The auto_arima option defaults to True, so the auto.ARIMA algorithm automatically
# tunes the hyperparameters in the model.
# The data_frequency option defaults to 'auto_frequency so the training
# process automatically infers the data frequency of the input time series.
# The decompose_time_series option defaults to True, so that information about
# the time series data is returned when you evaluate the model in the next step.
model = forecasting.ARIMAPlus()
model.auto_arima = True
model.data_frequency = "auto_frequency"
model.decompose_time_series = True

# Use the data loaded in the previous step to fit the model
training_data = total_visits.to_frame().reset_index(drop=False)

X = training_data[["parsed_date"]]
y = training_data[["total_visits"]]

model.fit(X, y)

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 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 de 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.ga_arima_model`);

    Los resultados debería ser similar al siguiente:

    Resultado de ML.ARIMA_EVALUATE.

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.

# Evaluate the time series models by using the summary() function. The summary()
# function shows you the evaluation metrics of all the candidate models evaluated
# during the process of automatic hyperparameter tuning.
summary = model.summary(
    show_all_candidate_models=True,
)
print(summary.peek())

# Expected output:
# row   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
#  0	      0	              1	               3	      True	     -2464.255656	4938.511313	     42772.506055	        ['WEEKLY']	            False	        False	            True
#  1	      2	              1	               0	      False	     -2473.141651	4952.283303	     44942.416463	        ['WEEKLY']	            False	        False	            True
#  2	      1	              1	               0 	      False	     -2479.880885	4963.76177	     46642.953433	        ['WEEKLY']	            False	        False	            True
#  3	      0	              1	               1	      False	     -2470.632377	4945.264753	     44319.379307	        ['WEEKLY']	            False	        False	            True
#  4	      2	              1	               1	      True	     -2463.671247	4937.342493	     42633.299513	        ['WEEKLY']	            False	        False	            True

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 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 como ML.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 y has_step_changes solo se propagan cuando decompose_time_series=TRUE. Estas columnas también reflejan información sobre los datos de las 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.

La columna error_message muestra los errores que se generaron durante el proceso de ajuste auto.ARIMA. Una posible causa de errores es cuando 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

SQL

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 de 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.ga_arima_model`);

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 non_seasonal_p de 2 y un valor non_seasonal_q de 3. Por lo tanto, en el resultado ML.ARIMA_COEFFICIENTS, el valor ar_coefficients es un array de 2 elementos y el valor ma_coefficients es un array de 3 elementos. El valor intercept_or_drift es el término constante en el modelo ARIMA.

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

Permite trabajar con BigQuery DataFrames.

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

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.

coef = model.coef_
print(coef.peek())

# Expected output:
#       ar_coefficients   ma_coefficients   intercept_or_drift
#   0	 [0.40944762]	   [-0.81168198]	      0.0

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.

Usa el modelo para pronosticar datos

SQL

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:

  1. En la consola de Google Cloud, ve a la página de 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.ga_arima_model`,
              STRUCT(30 AS horizon, 0.8 AS confidence_level));

    Los resultados debería ser similar al siguiente:

    Resultado de ML.FORECAST.

Permite trabajar con BigQuery DataFrames.

Utiliza la función predict para predecir valores de series temporales futuras.

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.

prediction = model.predict(horizon=30, confidence_level=0.8)

print(prediction.peek())
# Expected output:
#           forecast_timestamp	   forecast_value	standard_error	confidence_level	prediction_interval_lower_bound	    prediction_interval_upper_bound	    confidence_interval_lower_bound	    confidence_interval_upper_bound
# 11	2017-08-13 00:00:00+00:00	1845.439732	      328.060405	      0.8	                 1424.772257	                      2266.107208	                     1424.772257	                     2266.107208
# 29	2017-08-31 00:00:00+00:00	2615.993932	      431.286628	      0.8	                 2062.960849	                      3169.027015	                     2062.960849	                     3169.027015
# 7	    2017-08-09 00:00:00+00:00	2639.285993	      300.301186	      0.8	                 2254.213792	                      3024.358193	                     2254.213792	                     3024.358193
# 25	2017-08-27 00:00:00+00:00	1853.735689	      410.596551	      0.8	                 1327.233216	                      2380.238162	                     1327.233216	                     2380.238162
# 1	    2017-08-03 00:00:00+00:00	2621.33159	      241.093355	      0.8	                 2312.180802	                      2930.482379	                     2312.180802	                     2930.482379

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 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 confianza. El intervalo de confianza 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.

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(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 de 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.ga_arima_model`,
       STRUCT(30 AS horizon, 0.8 AS confidence_level));

    Los resultados debería ser similar al siguiente:

    Las primeras nueve columnas de resultados de los datos previstos y las explicaciones de las previsiones. Las columnas de salida de la décima a la decimoséptima de los datos previstos y las explicaciones de los pronósticos. Las últimas seis columnas de salida de los datos previstos y las explicaciones de las previsiones.

    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.

    Si deseas visualizar los resultados, puedes usar Looker Studio como se describe en la sección Visualiza 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

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