Limita los valores previstos para un modelo de serie temporal ARIMA_PLUS

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

En este instructivo, usarás los datos de new_york.citibike_trips para entrenar los modelos. 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 únicas. 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 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.

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 los siguientes componentes facturables de Google Cloud:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

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

      • Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.

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

    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 google.cloud.bigquery
    
    bqclient = google.cloud.bigquery.Client()
    bqclient.create_dataset("bqml_tutorial", exists_ok=True)

    Visualiza las series temporales que deseas prever

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

    SQL

    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. Los resultados de la búsqueda son similares a los siguientes.

      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 Visualización. En el panel Configuración de la visualización, elige Barra para el Tipo de visualización:

      Result_visualization.

    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.

    En el siguiente ejemplo, bigquery-public-data.new_york.citibike_trips indica que consultas la tabla citibike_trips en el conjunto de datos new_york.

    import bigframes.pandas as bpd
    
    df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips")
    
    features = bpd.DataFrame(
        {
            "num_trips": df.starttime,
            "date": df["starttime"].dt.date,
        }
    )
    num_trips = features.groupby(["date"]).count()
    
    num_trips.plot.line()

    El resultado es similar al siguiente:Result_visualization

    Crea un modelo de series temporales

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

    En la siguiente consulta de GoogleSQL, se 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',
        time_series_id_col = 'start_station_id')
    AS
    SELECT
      EXTRACT(DATE FROM starttime) AS date,
      COUNT(*) AS num_trips,
      start_station_id
    FROM
      `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;

    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. La instrucción CREATE MODEL usa decompose_time_series=TRUE de forma predeterminada, por lo que tanto el historial como las partes de previsión de la serie temporal se guardan en el modelo. Si se configura el parámetro time_series_id_col = 'start_station_id', el modelo ajustará y prevendrá varias series temporales con una sola consulta basada en start_station_id. 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',
        time_series_id_col = 'start_station_id')
      AS
      SELECT
      EXTRACT(DATE FROM starttime) AS date,
      COUNT(*) AS num_trips,
      start_station_id
      FROM
      `bigquery-public-data`.new_york.citibike_trips
      WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
      GROUP BY date, start_station_id;
    3. Haz clic en Ejecutar.

      La consulta tarda aproximadamente 80 segundos en completarse, después de lo cual puedes acceder al modelo (nyc_citibike_arima_model). Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

    Realiza una previsión de 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, 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
      forecast_timestamp AS forecast_timestamp,
      start_station_id AS start_station_id,
      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,
           start_station_id AS start_station_id,
           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,
           start_station_id AS start_station_id,
           FROM
           (
              SELECT
                 EXTRACT(DATE FROM starttime) AS date_name,
                 COUNT(*) AS num_trips,
                 start_station_id AS start_station_id
              FROM
                 `bigquery-public-data`.new_york.citibike_trips
              WHERE
                 starttime > '2014-07-11'
                 AND starttime < '2015-02-11'
              GROUP BY
                 date_name, start_station_id
           )
        )
      )
      WHERE start_station_id = 79
      ORDER BY
      forecast_timestamp, start_station_id
    3. Haz clic en Ejecutar. Los resultados de la búsqueda son similares a los siguientes:

      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 Visualización:

      Result_visualization.

    El gráfico muestra que los valores previstos para la cantidad total diaria de viajes con Citi Bike en los que start_station_id=79 son números negativos, lo que no es útil. Usar un modelo con límites mejora los datos previstos.

    Crea un modelo de series temporales con límites

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

    En la siguiente consulta de GoogleSQL, se 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 diferencia clave entre este modelo y el modelo que creaste anteriormente es la incorporación de la opción forecast_limit_lower_bound=0. Esta opción hace que el modelo solo prevea valores mayores que 0, según los valores de la columna especificada por el argumento time_series_data_col, en este caso num_trips.

    #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',
          time_series_id_col = 'start_station_id',
          forecast_limit_lower_bound = 0)
       AS
       SELECT
       EXTRACT(DATE FROM starttime) AS date,
       COUNT(*) AS num_trips,
       start_station_id
       FROM
       `bigquery-public-data`.new_york.citibike_trips
       WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
       GROUP BY date, start_station_id;

    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',
        time_series_id_col = 'start_station_id',
        forecast_limit_lower_bound = 0)
      AS
      SELECT
      EXTRACT(DATE FROM starttime) AS date,
      COUNT(*) AS num_trips,
      start_station_id
      FROM
      `bigquery-public-data`.new_york.citibike_trips
      WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
      GROUP BY date, start_station_id;
    3. Haz clic en Ejecutar.

      La consulta tarda aproximadamente 100 segundos en completarse, después de lo cual puedes acceder al modelo (nyc_citibike_arima_model_with_limits). Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

    Prevé la serie temporal con el modelo con 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,
      start_station_id AS start_station_id,
      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,
           start_station_id AS start_station_id,
           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,
           start_station_id AS start_station_id,
           FROM
           (
              SELECT
                 EXTRACT(DATE FROM starttime) AS date_name,
                 COUNT(*) AS num_trips,
                 start_station_id AS start_station_id
              FROM
                 `bigquery-public-data`.new_york.citibike_trips
              WHERE
                 starttime > '2014-07-11'
                 AND starttime < '2015-02-11'
              GROUP BY
                 date_name, start_station_id
           )
        )
      )
      WHERE start_station_id = 79
      ORDER BY forecast_timestamp, start_station_id
    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 Visualización:

      Result_visualization.

    El modelo ARIMA PLUS detecta que la cantidad total diaria de viajes con Citi Bike en la que start_station_id=79 está disminuyendo. Los valores de previsión futuros seguirán esta tendencia y proporcionarán cifras de previsión relativamente más pequeñas cuanto más lejos en el futuro se avance. El gráfico muestra que los valores previstos para la cantidad total diaria de viajes de Citi Bike, donde start_station_id=79 son números positivos, lo que resulta más útil. El modelo con límites detecta que la cantidad total diaria de viajes con Citi Bike en la que start_station_id=79 disminuye, pero sigue proporcionando 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í, por ejemplo, cuando se prevén los precios de las acciones o las cifras 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 deGoogle 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. 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?