Predecir varias series temporales con un modelo univariante ARIMA_PLUS

En este tutorial se explica cómo usar un ARIMA_PLUSmodelo 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 hacen previsiones de varias series temporales. Los valores previstos se calculan para cada punto temporal y para cada valor de una o varias columnas especificadas. Por ejemplo, si quieres predecir el tiempo y especificas una columna que contenga datos de ciudades, los datos previstos incluirán las predicciones de todos los puntos temporales de la ciudad A, los valores previstos de todos los puntos temporales de la ciudad B, etc.

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

Antes de leer este tutorial, te recomendamos que leas el artículo Predecir una sola serie temporal con un modelo univariante.

Crear conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.

Consola

  1. En la Google Cloud consola, 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. Haga 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, 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.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos definida como US y la descripción 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 omite -d y --dataset, el comando creará un conjunto de datos de forma predeterminada.

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

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

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.

SQL

La instrucción 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 el número total diario de viajes de Citi Bike.

Sigue estos pasos para visualizar los datos de la serie temporal:

  1. En la Google Cloud consola, ve a la página 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. Sigue estos pasos en la nueva pestaña.

  4. En Looker Studio, haz clic en Insertar > Gráfico de serie temporal.

  5. En el panel Gráfico, selecciona la pestaña Configuración.

  6. En la sección Métrica, añade el campo num_trips y quita la métrica predeterminada Número de registros. El gráfico resultante será similar al siguiente:

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

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.


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,
    }
)
date = df["starttime"].dt.date
df.groupby([date])
num_trips = features.groupby(["date"]).count()

# Results from running "print(num_trips)"

#                num_trips
# date
# 2013-07-01      16650
# 2013-07-02      22745
# 2013-07-03      21864
# 2013-07-04      22326
# 2013-07-05      21842
# 2013-07-06      20467
# 2013-07-07      20477
# 2013-07-08      21615
# 2013-07-09      26641
# 2013-07-10      25732
# 2013-07-11      24417
# 2013-07-12      19006
# 2013-07-13      26119
# 2013-07-14      29287
# 2013-07-15      28069
# 2013-07-16      29842
# 2013-07-17      30550
# 2013-07-18      28869
# 2013-07-19      26591
# 2013-07-20      25278
# 2013-07-21      30297
# 2013-07-22      25979
# 2013-07-23      32376
# 2013-07-24      35271
# 2013-07-25      31084

num_trips.plot.line(
    # Rotate the x labels so they are more visible.
    rot=45,
)

Crear el modelo de serie temporal

Quieres predecir el número de trayectos en bicicleta de cada estación de Citi Bike, lo que requiere muchos modelos de series temporales, uno por cada estación de Citi Bike incluida en los datos de entrada. Puedes crear varios modelos para hacerlo, pero puede ser un proceso tedioso y largo, sobre todo si tienes un gran número de series temporales. En su lugar, puede usar una sola consulta para crear y ajustar un conjunto de modelos de series temporales con el fin de predecir varias series temporales a la vez.

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. Usa la opción time_series_id_col de la instrucción CREATE MODEL para especificar una o varias columnas de los datos de entrada de los que quieras obtener previsiones. En este caso, se trata de la estación de Citi Bike, representada por la columna start_station_name. Usas la cláusula WHERE para limitar las estaciones de inicio a las que tienen Central Park en sus nombres. La opción auto_arima_max_order de la instrucción 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 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:

  1. En la Google Cloud consola, ve a la página 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 unos 24 segundos en completarse. Después, puedes acceder al modelo nyc_citibike_arima_model_group. Como la consulta usa una instrucción CREATE MODEL, no verás los resultados de la consulta.

Esta consulta crea doce modelos de serie temporal, uno para cada una de las doce estaciones de inicio de Citi Bike de los datos de entrada. El coste temporal, que es de aproximadamente 24 segundos, es solo 1,4 veces mayor que el de crear un modelo de serie temporal único debido al paralelismo. Sin embargo, si quitas la cláusula WHERE ... LIKE ..., habría más de 600 series temporales que predecir y no se predecirían completamente en paralelo debido a las limitaciones de capacidad de las ranuras. En ese caso, la consulta tardaría unos 15 minutos en completarse. Para reducir el tiempo de ejecución de la consulta, aunque esto suponga una ligera disminución de la calidad del modelo, puedes reducir el valor de auto_arima_max_order. De esta forma, se 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.

BigQuery DataFrames

En el siguiente fragmento, se crea un modelo de serie temporal basado en ARIMA.

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.

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

model = forecasting.ARIMAPlus(
    # To reduce the query runtime with the compromise of a potential slight
    # drop in model quality, you could decrease the value of the
    # auto_arima_max_order. This shrinks the search space of hyperparameter
    # tuning in the auto.ARIMA algorithm.
    auto_arima_max_order=5,
)

df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips")

# This query creates twelve time series models, one for each of the twelve
# Citi Bike start stations in the input data. If you remove this row
# filter, there would be 600+ time series to forecast.
df = df[df["start_station_name"].str.contains("Central Park")]

features = bpd.DataFrame(
    {
        "start_station_name": df["start_station_name"],
        "num_trips": df["starttime"],
        "date": df["starttime"].dt.date,
    }
)
num_trips = features.groupby(
    ["start_station_name", "date"],
    as_index=False,
).count()

X = num_trips["date"].to_frame()
y = num_trips["num_trips"].to_frame()

model.fit(
    X,
    y,
    # The input data that you want to get forecasts for,
    # in this case the Citi Bike station, as represented by the
    # start_station_name column.
    id_col=num_trips["start_station_name"].to_frame(),
)

# The model.fit() call above created a temporary model.
# Use the to_gbq() method to write to a permanent location.
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.nyc_citibike_arima_model",
    replace=True,
)

De esta forma, se crean doce modelos de series temporales, uno para cada una de las doce estaciones de inicio de Citi Bike de los datos de entrada. El coste temporal, de aproximadamente 24 segundos, es solo 1,4 veces mayor que el de crear un solo modelo de serie temporal debido al paralelismo.

Evaluar el modelo

SQL

Evalúa el modelo de serie temporal con la función ML.ARIMA_EVALUATE. La función ML.ARIMA_EVALUATE muestra las métricas de evaluación que se han generado para el modelo durante el proceso de ajuste automático de hiperparámetros.

Sigue estos pasos para evaluar el modelo:

  1. En la Google Cloud consola, ve a la página 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 tener este aspecto:

    Métricas de evaluación del modelo de serie temporal.

    Mientras que auto.ARIMA evalúa decenas de modelos ARIMA candidatos para cada serie temporal, ML.ARIMA_EVALUATE solo muestra de forma predeterminada la información del mejor modelo para que la tabla de resultados sea compacta. Para ver todos los modelos candidatos, puede asignar el valor TRUE al argumento show_all_candidate_model de la función ML.ARIMA_EVALUATE.

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.

# 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()
print(summary.peek())

# Expected output:
#    start_station_name                  non_seasonal_p  non_seasonal_d   non_seasonal_q  has_drift  log_likelihood           AIC     variance ...
# 1         Central Park West & W 72 St               0               1                5      False    -1966.449243   3944.898487  1215.689281 ...
# 8            Central Park W & W 96 St               0               0                5      False     -274.459923    562.919847   655.776577 ...
# 9        Central Park West & W 102 St               0               0                0      False     -226.639918    457.279835    258.83582 ...
# 11        Central Park West & W 76 St               1               1                2      False    -1700.456924   3408.913848   383.254161 ...
# 4   Grand Army Plaza & Central Park S               0               1                5      False    -5507.553498  11027.106996   624.138741 ...

La columna start_station_name identifica la columna de datos de entrada para la que se han creado series temporales. Esta es la columna que especificaste con la opción time_series_id_col al crear el modelo.

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

El algoritmo auto.ARIMA usa la prueba KPSS para determinar el mejor valor de non_seasonal_d, que en este caso es 1. Si non_seasonal_d es 1, el algoritmo auto.ARIMA entrena 42 modelos ARIMA posibles 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 por AIC. El modelo de la primera fila tiene el AIC más bajo y se considera el mejor modelo. Este modelo óptimo se guarda como modelo final y se usa cuando pronosticas datos, evalúas el modelo e inspeccionas los coeficientes del modelo, tal como se muestra en los pasos siguientes.

La columna seasonal_periods contiene información sobre el patrón estacional identificado en los datos de serie temporal. Cada serie temporal puede tener patrones estacionales diferentes. Por ejemplo, en la figura se puede 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 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.

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:

  1. En la Google Cloud consola, ve a la página 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 tarda menos de un segundo en completarse. Los resultados deberían ser similares a los siguientes:

    Coeficientes del modelo de serie temporal.

    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.

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

# Expected output:
#    start_station_name                                              ar_coefficients                                   ma_coefficients intercept_or_drift
# 5    Central Park West & W 68 St                                                [] [-0.41014089  0.21979212 -0.59854213 -0.251438...                0.0
# 6         Central Park S & 6 Ave                                                [] [-0.71488957 -0.36835772  0.61008532  0.183290...                0.0
# 0    Central Park West & W 85 St                                                [] [-0.39270166 -0.74494638  0.76432596  0.489146...                0.0
# 3    W 82 St & Central Park West                         [-0.50219511 -0.64820817]             [-0.20665325  0.67683137 -0.68108631]                0.0
# 11  W 106 St & Central Park West [-0.70442887 -0.66885553 -0.25030325 -0.34160669]                                                []                0.0

La columna start_station_name identifica la columna de datos de entrada para la que se han creado series temporales. Esta es la columna que especificaste en la opción time_series_id_col al crear el modelo.

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. El valor de intercept_or_drift es el término constante del modelo ARIMA.

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(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 predecir datos con el modelo:

  1. En la Google Cloud consola, ve a la página 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 tarda menos de un segundo en completarse. Los resultados deberían ser similares a los siguientes:

    Salida de ML.FORECAST.

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

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.

prediction = model.predict(horizon=3, confidence_level=0.9)

print(prediction.peek())
# Expected output:
#            forecast_timestamp                             start_station_name  forecast_value  standard_error  confidence_level ...
# 4   2016-10-01 00:00:00+00:00                         Central Park S & 6 Ave      302.377201       32.572948               0.9 ...
# 14  2016-10-02 00:00:00+00:00  Central Park North & Adam Clayton Powell Blvd      263.917567       45.284082               0.9 ...
# 1   2016-09-25 00:00:00+00:00                    Central Park West & W 85 St      189.574706       39.874856               0.9 ...
# 20  2016-10-02 00:00:00+00:00                    Central Park West & W 72 St      175.474862       40.940794               0.9 ...
# 12  2016-10-01 00:00:00+00:00                   W 106 St & Central Park West        63.88163       18.088868               0.9 ...

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

En cada start_station_name, las filas de salida se ordenan 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.

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. Si solo quieres devolver datos de previsión, usa la función ML.FORECAST en su lugar, tal como se muestra en Usar el modelo para predecir datos.

La cláusula STRUCT(3 AS horizon, 0.9 AS confidence_level) utilizada en la función ML.EXPLAIN_FORECAST indica que la consulta pronostica 3 puntos temporales 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 Google Cloud consola, ve a la página 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 tarda menos de un segundo en completarse. Los resultados deberían ser similares a los siguientes:

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

    Las primeras miles de filas devueltas son datos del historial. Debes desplazarte por los resultados para ver los datos de previsión.

    Las filas de salida se ordenan primero por start_station_name y, después, cronológicamente por el valor de la columna time_series_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 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 predice los valores de series temporales futuras y también devuelve todos los componentes independientes de la serie temporal. Si solo quieres devolver datos de previsión, usa la función predict en su lugar, tal como se muestra en Usar el modelo para predecir datos.

La cláusula horizon=3, confidence_level=0.9 utilizada en la función predict_explain indica que la consulta pronostica 3 puntos temporales futuros y genera un intervalo de predicción con una confianza del 90 %.

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.

explain = model.predict_explain(horizon=3, confidence_level=0.9)

print(explain.peek(5))
# Expected output:
#   time_series_timestamp	        start_station_name	            time_series_type	    time_series_data	    time_series_adjusted_data	    standard_error	    confidence_level	    prediction_interval_lower_bound	    prediction_interval_upper_bound	    trend	    seasonal_period_yearly	    seasonal_period_quarterly	    seasonal_period_monthly	    seasonal_period_weekly	    seasonal_period_daily	    holiday_effect	    spikes_and_dips	    step_changes	    residual
# 0	2013-07-01 00:00:00+00:00	Central Park S & 6 Ave	                history	                  69.0	                   154.168527	              32.572948	             <NA>	                        <NA>	                            <NA>	                 0.0	          35.477484	                       <NA>	                        <NA>	                  -28.402102	                 <NA>	                <NA>	               0.0	         -85.168527	        147.093145
# 1	2013-07-01 00:00:00+00:00	Grand Army Plaza & Central Park S	    history	                  79.0	                      79.0	                  24.982769	             <NA>	                        <NA>	                            <NA>	                 0.0	          43.46428	                       <NA>	                        <NA>	                  -30.01599	                     <NA>	                <NA>	               0.0	            0.0	             65.55171
# 2	2013-07-02 00:00:00+00:00	Central Park S & 6 Ave	                history	                  180.0	                   204.045651	              32.572948	             <NA>	                        <NA>	                            <NA>	              147.093045	      72.498327	                       <NA>	                        <NA>	                  -15.545721	                 <NA>	                <NA>	               0.0	         -85.168527	         61.122876
# 3	2013-07-02 00:00:00+00:00	Grand Army Plaza & Central Park S	    history	                  129.0	                    99.556269	              24.982769	             <NA>	                        <NA>	                            <NA>	               65.551665	      45.836432	                       <NA>	                        <NA>	                  -11.831828	                 <NA>	                <NA>	               0.0	            0.0	             29.443731
# 4	2013-07-03 00:00:00+00:00	Central Park S & 6 Ave	                history	                  115.0	                   205.968236	              32.572948	             <NA>	                        <NA>	                            <NA>	               191.32754	      59.220766	                       <NA>	                        <NA>	                  -44.580071	                 <NA>	                <NA>	               0.0	         -85.168527	        -5.799709

Las filas de salida se ordenan primero por time_series_timestamp y, después, cronológicamente por el valor de la columna start_station_name. 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.