Cómo predecir varias series temporales con un modelo univariable


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

En este instructivo, se realizan previsiones para varias series temporales. Los valores previstos se calculan para cada período y para cada valor en una o más columnas especificadas. Por ejemplo, si deseas pronosticar el clima y especificas una columna que contiene datos de la ciudad, los datos pronosticados contendrán pronósticos para todos los momentos de la ciudad A, luego los valores pronosticados para todos los momentos de la ciudad B, y así sucesivamente.

En este instructivo, se usan datos de la tabla pública bigquery-public-data.new_york.citibike_trips. Esta tabla contiene información sobre los viajes de Citi Bike en la ciudad de Nueva York.

Antes de leer este instructivo, te recomendamos que leas Cómo realizar la previsión de una sola serie temporal con un modelo univariante.

Objetivos

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

  • Crear un modelo de series temporales para pronosticar la cantidad de viajes en bicicleta con la declaración 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 la información pronosticada de los viajes en bicicleta del modelo con la función ML.FORECAST
  • Recuperar componentes de las series temporales, como la estacionalidad y la tendencia, 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, que incluyen 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 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:

  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.

    Crea un 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.

      Página Crear un conjunto de datos

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.

La sentencia SELECT de la siguiente consulta usa la función EXTRACT para extraer la información de la fecha de la columna starttime. La consulta usa la cláusula COUNT(*) para obtener la cantidad total diaria de viajes con Citi Bike.

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

  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
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data.new_york.citibike_trips`
    GROUP BY date;
  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 series temporales.

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

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

    Gráfico que muestra los datos de los viajes en bicicleta a lo largo del tiempo.

Crea el modelo de series temporales

Quieres pronosticar la cantidad de viajes en bicicleta para cada estación de Citi Bike, lo que requiere muchos modelos de series temporales, uno para cada estación de Citi Bike que se incluye en los datos de entrada. Puedes escribir varias consultas de CREATE MODEL para hacerlo, pero puede ser un proceso tedioso y lento, en especial cuando tienes una gran cantidad de series temporales. En su lugar, puedes usar una sola consulta para crear y ajustar un conjunto de modelos de series temporales para predecir varias series temporales a la vez.

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. Usas la opción time_series_id_col de la sentencia CREATE MODEL para especificar una o más columnas de los datos de entrada para los que deseas obtener pronósticos, en este caso, la estación de Citi Bike, como lo representa la columna start_station_name. Usas la cláusula WHERE para limitar las estaciones de inicio a aquellas con Central Park en el nombre. La opción auto_arima_max_order de la sentencia CREATE MODEL controla el espacio de búsqueda para el ajuste de hiperparámetros en el algoritmo auto.ARIMA. 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.nyc_citibike_arima_model_group`
    OPTIONS
    (model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_name',
      auto_arima_max_order = 5
    ) AS
    SELECT
      start_station_name,
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data.new_york.citibike_trips`
    WHERE start_station_name LIKE '%Central Park%'
    GROUP BY start_station_name, date;

    La consulta tarda aproximadamente 24 segundos en completarse, después de lo cual el modelo nyc_citibike_arima_model_group aparece en el panel Explorador. Como la consulta usa una sentencia CREATE MODEL, no ves los resultados de la consulta.

Esta consulta crea doce modelos de series temporales, uno para cada una de las doce estaciones de partida de Citi Bike en los datos de entrada. El costo del tiempo, alrededor de 24 segundos, es solo 1.4 veces mayor que el de crear un solo modelo de serie temporal debido al paralelismo. Sin embargo, si quitas la cláusula WHERE ... LIKE ..., habría más de 600 series temporales para prever y no se preverían por completo en paralelo debido a las limitaciones de capacidad de las ranuras. En ese caso, la consulta tardaría aproximadamente 15 minutos en completarse. Para reducir el tiempo de ejecución de la consulta con la vulneración de una posible disminución leve en la calidad del modelo, puedes disminuir el valor de la opción auto_arima_max_order a 3 o 4 del valor predeterminado de 5. Esto reduce el espacio de búsqueda del ajuste de hiperparámetros en el algoritmo auto.ARIMA. Para obtener más información, consulta Large-scale time series forecasting best practices.

Evalúa el modelo

Evalúa el modelo de series temporales con la función ML.ARIMA_EVALUATE. La función ML.ARIMA_EVALUATE muestra las métricas de evaluación que se generaron para el modelo 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.nyc_citibike_arima_model_group`);

    Los resultados deberían verse así:

    Métricas de evaluación para el modelo de series temporales.

    La columna start_station_name identifica la columna de datos de entrada para la que se crearon las series temporales. Esta es la columna que especificaste en la opción time_series_id_col de la sentencia CREATE MODEL.

    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 proceso de ajuste determina el mejor modelo ARIMA con el algoritmo auto.ARIMA, uno para cada serie temporal.

    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 ML.FORECAST, ML.EVALUATE y ML.ARIMA_COEFFICIENTS como se muestra en los siguientes pasos.

    La columna seasonal_periods contiene información sobre el patrón estacional identificado en los datos de las series temporales. Cada serie temporal puede tener diferentes patrones climáticos. Por ejemplo, en la figura, puedes ver que una serie temporal tiene un patrón anual, mientras que otras no.

    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.

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

Si bien auto.ARIMA evalúa decenas de modelos candidatos de ARIMA para cada serie temporal, ML.ARIMA_EVALUATE de forma predeterminada solo genera la información del mejor modelo para que la tabla de salida sea compacta. Para ver todos los modelos candidatos, puedes configurar el argumento show_all_candidate_model de la función ML.ARIMA_EVALUATE en TRUE.

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

    La consulta toma menos de un segundo en completarse. Los resultados debería ser similares al siguiente:

    Coeficientes del modelo de serie temporal.

    La columna start_station_name identifica la columna de datos de entrada para la que se crearon las series temporales. Esta es la columna que especificaste en la opción time_series_id_col de la sentencia CREATE 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. 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.

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(3 AS horizon, 0.9 AS confidence_level) indica que la consulta prevé 3 puntos temporales futuros y genera un intervalo de predicción con un nivel de confianza del 90%.

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.nyc_citibike_arima_model_group`,
       STRUCT(3 AS horizon, 0.9 AS confidence_level))
  3. Haz clic en Ejecutar.

    La consulta toma menos de un segundo en completarse. Los resultados deberían verse de la siguiente manera:

    Resultado de ML.FORECAST.

    start_station_name, la primera columna, anota la serie temporal en la que se ajusta cada modelo de serie temporal. Cada start_station_name tiene tres filas de resultados previstos, como especifica el valor horizon.

    Para cada start_station_name, 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 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. Si solo deseas mostrar datos de previsión, usa la función ML.FORECAST, como se muestra en Cómo usar el modelo para pronosticar datos.

La cláusula STRUCT(3 AS horizon, 0.9 AS confidence_level) que se usa en la función ML.EXPLAIN_FORECAST indica que la consulta prevé 3 puntos de tiempo futuros y genera un intervalo de predicción con una confianza del 90%.

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.nyc_citibike_arima_model_group`,
       STRUCT(3 AS horizon, 0.9 AS confidence_level));

    La consulta toma menos de un segundo en completarse. Los resultados deberían verse de la siguiente manera:

    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 primeras miles de filas que se muestran son todos los datos históricos. Debes desplazarte por los resultados para ver los datos de previsión.

    Las filas de salida se ordenan primero por start_station_name y, luego, de forma cronológica por el valor de la columna time_series_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 valor de la columna forecast_value.prediction_interval_lower_boundprediction_interval_upper_bound 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 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 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 para borrar 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?