Limita los valores previstos para un modelo de serie temporal

En este instructivo aprenderás a usar los límites para limitar los resultados previstos que muestra un modelo de serie temporal. En este instructivo, crearás dos modelos de serie temporal sobre los mismos datos: uno que usa límites y otro que no los usa. Esto te permite comparar los resultados que muestran los modelos y comprender la diferencia que hace la especificación de los límites.

Usa los datos de new_york.citibike_trips para entrenar los modelos en este instructivo. Este conjunto de datos contiene información sobre los viajes de Citi Bike en la ciudad de Nueva York.

Antes de seguir este instructivo, debes estar familiarizado con la previsión de series temporales individuales. Completa el instructivo Previsión de series temporales individuales a partir de datos de Google Analytics para obtener una introducción a este tema.

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.

Objetivos

En este instructivo usarás lo siguiente:

  • La declaración CREATE MODEL, para crear un modelo de serie temporal
  • La función ML.FORECAST, para prever el total de visitas diarias

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. 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 la consola de Google Cloud, 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 Google Cloud.

  4. Habilita la API de BigQuery.

    Habilita la API

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

    Ir al selector de proyectos

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita la API de BigQuery.

    Habilita la API

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 las series temporales que deseas prever

Antes de crear el modelo, es útil ver cómo se ve la serie temporal de entrada.

En la siguiente consulta, la cláusula FROM bigquery-public-data.new_york.citibike_trips indica que consultas la tabla citibike_trips en el conjunto de datos new_york.

En la declaración SELECT, la 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.

#standardSQL
SELECT
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data`.new_york.citibike_trips
GROUP BY 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 siguiente consulta de GoogleSQL en el Editor de consultas.

    #standardSQL
    SELECT
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
    FROM
      `bigquery-public-data`.new_york.citibike_trips
    GROUP BY date
    
  3. Haz clic en Ejecutar. El resultado de la consulta es similar al siguiente.

    Resultado de la consulta.

  4. Usa la consola de Google Cloud para graficar los datos de las series temporales. En el panel Resultados de la consulta, haz clic en la pestaña Gráfico. En el panel Configuración del gráfico, elige Barra para Tipo de gráfico:

    Result_visualization.

Crea un modelo de serie temporal

A continuación, crea un modelo de serie temporal mediante los datos de viajes de Citi Bike en NYC.

La siguiente consulta de Google SQL crea un modelo que prevé el total de viajes diarios en bicicleta. La cláusula CREATE MODEL crea y entrena un modelo llamado bqml_tutorial.nyc_citibike_arima_model.

#standardSQL
CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
OPTIONS
  (model_type = 'ARIMA_PLUS',
   time_series_timestamp_col = 'date',
   time_series_data_col = 'num_trips'
  ) AS
SELECT
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data`.new_york.citibike_trips
WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
GROUP BY date

La cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica que creas un modelo de serie temporal basado en ARIMA. 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. El algoritmo se adapta a decenas de modelos de 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. Por último, la instrucción CREATE MODEL usa decompose_time_series=TRUE de forma predeterminada, por lo que las partes del historial y de previsión de las series temporales se guardan en el modelo. Puedes usar esta información para comprender mejor cómo se prevén las series temporales si recuperas los componentes de las series temporales, como los períodos de temporada.

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 siguiente consulta de GoogleSQL en el Editor de consultas.

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model`
    OPTIONS
      (model_type = 'ARIMA_PLUS',
       time_series_timestamp_col = 'date',
       time_series_data_col = 'num_trips'
      ) AS
    SELECT
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
    FROM
      `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date
    
  3. Haz clic en Ejecutar.

    La consulta toma alrededor de 17 segundos en completarse; luego, el modelo (nyc_citibike_arima_model) aparece en el panel Explorador. Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

Prevé las series temporales y visualiza los resultados

Para explicar cómo se prevén las series temporales, visualiza todos los componentes de las series temporales, como la estacionalidad y la tendencia, mediante la función ML.FORECAST.

Para ello, siga estos pasos:

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

  2. Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.

    #standardSQL
      SELECT
      forecast_timestamp AS forecast_timestamp,
      history_value AS history_value,
      forecast_value AS forecast_value
      FROM ( (
         SELECT
            DATE(forecast_timestamp) AS forecast_timestamp,
            NULL AS history_value,
            forecast_value AS forecast_value
         FROM
            ML.FORECAST(MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(365 AS horizon,
               0.9 AS confidence_level)) )
      UNION ALL (
         SELECT
            DATE(date_name) AS forecast_timestamp,
            num_trips AS history_value,
            NULL AS forecast_value
         FROM (
            SELECT
            EXTRACT(DATE
            FROM
               starttime) AS date_name,
            COUNT(*) AS num_trips
            FROM
            `bigquery-public-data`.new_york.citibike_trips
            WHERE
            starttime > '2014-07-11'
            AND starttime < '2015-02-11'
            GROUP BY
            date_name ) ))
      ORDER BY
      forecast_timestamp
    
  3. Haz clic en Ejecutar. El resultado de la consulta es similar al siguiente:

    BQUI_chart

  4. Usa la consola de Google Cloud para graficar los datos de las series temporales. En el panel Resultados de la consulta, haz clic en la pestaña Gráfico:

    Result_visualization.

El gráfico muestra que los valores previstos para el número total diario de viajes con Citi Bike son números negativos, lo que no es útil. En cambio, un modelo con límites mejora los datos previstos.

Crea un modelo de serie temporal con límites

Crea un modelo de serie temporal con límites mediante los datos de viajes de Citi Bike en NYC.

La siguiente consulta de Google SQL crea un modelo que prevé el total de viajes diarios en bicicleta. La cláusula CREATE MODEL crea y entrena un modelo llamado bqml_tutorial.nyc_citibike_arima_model_with_limits. La única diferencia entre este modelo y el modelo que creaste antes es la adición de la opción forecast_limit_lower_bound=0. Esta opción hace que el modelo prediga solo valores mayores que 0.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_with_limits`
OPTIONS
  (model_type = 'ARIMA_PLUS',
   time_series_timestamp_col = 'date',
   time_series_data_col = 'num_trips',
   forecast_limit_lower_bound = 0
  ) AS
SELECT
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data`.new_york.citibike_trips
WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
GROUP BY date

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 siguiente consulta de GoogleSQL en el Editor de consultas.

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_with_limits`
    OPTIONS
      (model_type = 'ARIMA_PLUS',
       time_series_timestamp_col = 'date',
       time_series_data_col = 'num_trips',
       forecast_limit_lower_bound = 0
      ) AS
    SELECT
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
    FROM
      `bigquery-public-data`.new_york.citibike_trips
     WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date
    
  3. Haz clic en Ejecutar.

    La consulta toma alrededor de 17 segundos en completarse; luego, el modelo (nyc_citibike_arima_model_with_limits) aparece en el panel Explorador. Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

Prevé las series temporales con el modelo mediante límites

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

  2. Ingresa la siguiente consulta de GoogleSQL en el Editor de consultas.

    #standardSQL
      SELECT
      forecast_timestamp AS forecast_timestamp,
      history_value AS history_value,
      forecast_value AS forecast_value
      FROM ( (
         SELECT
            DATE(forecast_timestamp) AS forecast_timestamp,
            NULL AS history_value,
            forecast_value AS forecast_value
         FROM
            ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_with_limits`,
            STRUCT(365 AS horizon,
               0.9 AS confidence_level)) )
      UNION ALL (
         SELECT
            DATE(date_name) AS forecast_timestamp,
            num_trips AS history_value,
            NULL AS forecast_value
         FROM (
            SELECT
            EXTRACT(DATE
            FROM
               starttime) AS date_name,
            COUNT(*) AS num_trips
            FROM
            `bigquery-public-data`.new_york.citibike_trips
            WHERE
            starttime > '2014-07-11'
            AND starttime < '2015-02-11'
            GROUP BY
            date_name ) ))
      ORDER BY
      forecast_timestamp
    
  3. Haz clic en Ejecutar.

    BQUI_chart

  4. Usa la consola de Google Cloud para graficar los datos de las series temporales. En el panel Resultados de la consulta, haz clic en la pestaña Gráfico:

    Result_visualization.

El modelo ARIMA PLUS detecta que la cantidad total diaria de viajes con Citi Bike está disminuyendo. Los valores de previsión futuros seguirán esta tendencia y darán números de previsión relativamente más pequeños en el futuro. El gráfico muestra que los valores previstos para la cantidad total diaria de viajes con Citi Bike son números positivos, lo que es más útil. El modelo con límites detecta que la cantidad total diaria de viajes con Citi Bike está disminuyendo, pero aún proporciona valores de previsión significativos.

Como se muestra en este instructivo, las opciones forecast_limit_lower_bound y forecast_limit_upper_bound pueden ayudarte a obtener valores de previsión más significativos en situaciones similares a la que se muestra aquí, como cuando se prevén los precios de las acciones o los números de ventas futuras.

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