Estrategías de predicción

Antes de profundizar en diferentes modelos de pronóstico en los próximos capítulos, se introducirán los elementos principales del flujo de trabajo de pronóstico. Esto incluye enfoques para el entrenamiento de un modelo de pronóstico, métodos de evaluación de rendimiento y métodos de referencia. Esto proporcionará al lector un conjunto de herramientas para diseñar y construir un modelo de pronóstico de acuerdo con el objetivo del análisis. Este capítulo aborda los siguientes temas: enfoques de entrenamiento y prueba para un modelo de pronóstico, métodos de evaluación de rendimiento y matrices de medición de errores, métodos de referencia y la cuantificación de la incertidumbre en los pronósticos mediante intervalos de confianza y simulación.

El workflow del forecasting

La predicción de series temporales sigue un proceso similar a la regresión o clasificación e involucra estos pasos:

  1. Preparación de datos: Preparación de datos, incluyendo división en conjuntos de entrenamiento y prueba, creación de nuevas características y transformaciones si es necesario.

  2. Entrenar el modelo: Utilización del conjunto de entrenamiento para entrenar el modelo y ajustar sus coeficientes para minimizar el error.

  3. Probar el modelo: Utilización del modelo entrenado para predecir datos en el conjunto de prueba y evaluar su rendimiento en nuevos datos.

  4. Evaluación del modelo: Evaluación del rendimiento del modelo en ambos conjuntos de entrenamiento y prueba.

Si el modelo cumple con ciertos criterios, se utiliza para generar pronósticos finales. Si no, se ajustan parámetros de entrenamiento o se elige un modelo diferente y se repite el proceso. El sobreajuste, que ocurre cuando el modelo se adapta demasiado al conjunto de entrenamiento, se evita evaluando el rendimiento en conjuntos de entrenamiento y prueba. El alto error en el entrenamiento en comparación con un bajo error en la prueba indica sobreajuste, generalmente causado por ajustes incorrectos de parámetros o modelos demasiado complejos.

Por otro lado, este proceso tiene características únicas que lo distinguen de otros campos predictivos:

  • Las particiones de entrenamiento y prueba deben estar ordenadas en orden cronológico en lugar de ser muestras aleatorias.
  • Por lo general, una vez que hemos entrenado y probado el modelo con las particiones de entrenamiento y prueba, volveremos a entrenar el modelo con todos los datos (o al menos con la observación más reciente en orden cronológico). A primera vista, esto puede resultar sorprendente y preocupante para las personas con experiencia en modelado de aprendizaje automático tradicional, ya que suele llevar al sobreajuste y otros problemas. Discutiremos la razón detrás de esto y cómo evitar el sobreajuste más adelante.

El diagrama siguiente muestra el flujo de trabajo de pronóstico.

Figura 1. Diagrama de flujo para trabajos de Forecasting
Figura 1. Diagrama de flujo para trabajos de Forecasting

Enfoques de entrenamiento

El entrenamiento del modelo es un elemento central en el flujo de trabajo de pronóstico. La calidad del entrenamiento del modelo afecta directamente la precisión del pronóstico. Los objetivos principales incluyen formalizar la relación de la serie con patrones estacionales, tendencias, correlación con valores pasados y variables externas de manera predictiva, ajustar los parámetros del modelo cuando sea necesario y garantizar que el modelo sea escalable para nuevos datos sin sobreajuste. Antes del entrenamiento, la serie se divide en particiones de entrenamiento y prueba, que deben estar en orden cronológico debido a la relación matemática que la mayoría de los modelos de series temporales establecen entre la serie y sus valores pasados.

Particiones únicas de entrenamiento y prueba

Un enfoque común para el entrenamiento es utilizar particiones únicas de entrenamiento y prueba. Esto implica dividir la serie en particiones de entrenamiento y prueba, entrenar el modelo en la partición de entrenamiento y evaluar su rendimiento en la partición de prueba.

En el enfoque de particiones únicas de entrenamiento y prueba, es importante notar que las particiones se organizan en orden cronológico. La longitud de la partición de prueba se determina generalmente siguiendo dos pautas:

  1. La longitud de la partición de prueba debe ser de hasta el 30% de la longitud total de la serie para tener suficientes datos de observación para el proceso de entrenamiento.

  2. La longitud del horizonte de pronóstico, siempre y cuando no viole la regla anterior. Esto se relaciona con el aumento de la incertidumbre a medida que el horizonte de pronóstico se amplía.

Por ejemplo, si tenemos una serie mensual con 72 observaciones (6 años) y queremos pronosticar el próximo año (12 meses), tendría sentido utilizar las primeras 60 observaciones para el entrenamiento y evaluar el rendimiento utilizando las últimas 12 observaciones como prueba. La creación de particiones en R se puede hacer manualmente con la función “window” del paquete “stats”.

  • Se cargan los datos de la serie de TSstudio
#install.packages("TSstudio")
library(TSstudio)
data(USgas)
  • Se visualizan las principales características de la serie
ts_info(USgas)
##  The USgas series is a ts object with 1 variable and 238 observations
##  Frequency: 12 
##  Start time: 2000 1 
##  End time: 2019 10
  • Se usa la función “window” para dividir la serie en particiones de entrenamiento y prueba:
train <- window(USgas,
 start = time(USgas)[1],end = time(USgas)[length(USgas) - 12])
 
test <- window(USgas,
 start = time(USgas)[length(USgas) - 12 + 1],
 end = time(USgas)[length(USgas)])
  • El resumen se puede ver a continuación:
ts_info(USgas)
##  The USgas series is a ts object with 1 variable and 238 observations
##  Frequency: 12 
##  Start time: 2000 1 
##  End time: 2019 10
  • Ahora se toma una parte del test de partición
ts_info(test)
##  The test series is a ts object with 1 variable and 12 observations
##  Frequency: 12 
##  Start time: 2018 11 
##  End time: 2019 10
  • En cambio, la función “ts_split” del paquete “TSstudio” proporciona una manera personalizada de crear particiones de entrenamiento y prueba para datos de series temporales.
# The sample.out argument set the size of the testing partition (and therefore the training partition)

 USgas_partitions <- ts_split(USgas, sample.out = 12)
 train <- USgas_partitions$train
 test <- USgas_partitions$test
  • Se puede observar en la salida siguiente que obtuvimos los mismos resultados que los que obtuvimos previamente.
 ts_info(train)
##  The train series is a ts object with 1 variable and 226 observations
##  Frequency: 12 
##  Start time: 2000 1 
##  End time: 2018 10
  • A continuación, se puede ver la partición del test
ts_info(test)
##  The test series is a ts object with 1 variable and 12 observations
##  Frequency: 12 
##  Start time: 2018 11 
##  End time: 2019 10

La principal ventaja de este método es su simplicidad, ya que es bastante rápido entrenar y probar un modelo utilizando recursos informáticos relativamente económicos. Sin embargo, no es posible llegar a una conclusión sobre la estabilidad y escalabilidad del rendimiento del modelo basándose en una única unidad de prueba. Es factible que un modelo, por pura casualidad, tenga un rendimiento relativamente bueno en el conjunto de pruebas pero lo haga mal en el pronóstico real debido a su falta de estabilidad a lo largo del tiempo. Una forma de mitigar este riesgo es mediante el enfoque de backtesting, que se basa en entrenar un modelo con múltiples particiones de entrenamiento y prueba.

Previsión con backtesting

El enfoque de backtesting para entrenar un modelo de pronóstico es una versión avanzada del enfoque de una sola prueba fuera de la muestra que vimos anteriormente. Se basa en el uso de una ventana móvil para dividir la serie en múltiples pares de particiones de entrenamiento y prueba. El proceso básico de entrenamiento de backtesting incluye los siguientes pasos:

  1. Preparación de datos: Crear múltiples pares de particiones de entrenamiento y prueba.
  2. Entrenar un modelo: Esto se realiza en cada una de las particiones de entrenamiento.
  3. Probar el modelo: Evaluar su rendimiento en las particiones de prueba correspondientes.
  4. Evaluar el modelo: Evaluar la precisión, escalabilidad y estabilidad del modelo en función de la puntuación de prueba. Basándose en la evaluación, se puede realizar una de las siguientes acciones:
    1. Generar el pronóstico final para comprobar si la puntuación del modelo cumple con un umbral o criterio específico.
    2. Aplicar ajustes y optimización adicionales para el modelo y repetir los pasos de entrenamiento y evaluación.

El uso de una metodología de puntuación nos permite evaluar la estabilidad del modelo examinando la tasa de error del modelo en los diferentes conjuntos de prueba. Consideramos un modelo como estable cuando la distribución de errores del modelo en los conjuntos de prueba es bastante estrecha. En este caso, la tasa de error del pronóstico real debería estar dentro del mismo rango que los conjuntos de prueba (si no hay eventos anormales que afecten la tasa de error del pronóstico).

Este método es conceptualmente similar al enfoque de validación cruzada para entrenar modelos de aprendizaje automático. La principal diferencia entre los dos enfoques se relaciona con cómo se establecen sus particiones. Mientras que las particiones de backtesting están ordenadas cronológicamente, las del enfoque de validación cruzada se basan en muestreo aleatorio.

Los principales parámetros de configuración de un modelo de entrenamiento de backtesting son los siguientes:

  1. Longitud de las particiones de entrenamiento: Establecida por la configuración de la ventana. Hay dos tipos comunes de ventanas móviles:

    1. Ventana en expansión: Usa las primeras N observaciones como la partición de entrenamiento inicial y agrega las siguientes n observaciones para crear la siguiente partición de entrenamiento. La longitud de la partición de entrenamiento crece a medida que la ventana se desplaza sobre la serie.
    2. Ventana deslizante: Establece las primeras N observaciones como la partición de entrenamiento inicial y desplaza la ventana en n observaciones para crear la siguiente partición de entrenamiento. La longitud de las particiones de entrenamiento permanece igual a medida que la ventana se desplaza sobre la serie.
  2. Longitud de las particiones de prueba: un valor constante, generalmente alineado con la longitud del horizonte de pronóstico (bajo la limitación del número mínimo de observaciones requeridas para entrenar el modelo).

  3. Espacio entre cada partición de entrenamiento: define el ritmo de la ventana móvil.

  4. Número de particiones de entrenamiento y prueba.

Figura 1. Diagrama de Previsión con backtesting
Figura 1. Diagrama de Previsión con backtesting

El método de backtesting implica dividir la serie en múltiples pares de particiones de entrenamiento y prueba utilizando una ventana móvil. Se entrenan modelos en las particiones de entrenamiento y se evalúa su rendimiento en las particiones de prueba. Este enfoque permite evaluar la estabilidad del modelo y ajustarlo si es necesario. Hay dos tipos de ventanas móviles: en expansión y deslizante. La ventana en expansión comienza en el mismo punto y es útil para series con patrones estacionales y tendencias estables, pero puede introducir sesgo. La ventana deslizante tiene particiones de la misma longitud y evita el sesgo. la ventana, como todas las particiones de entrenamiento, son de la misma longitud, como puedes ver en el siguiente diagrama

Figura 1. Diagrama de longitud de la ventana
Figura 1. Diagrama de longitud de la ventana

Tiene más sentido utilizar la ventana deslizante cuando la serie de entrada tiene cambios estructurales o alta volatilidad, o cuando la mayor parte del poder predictivo está vinculada a la historia más reciente (o alta correlación con los rezagos más recientes de la serie). Por ejemplo, como vimos en el capítulo anterior, los precios mensuales del petróleo crudo tienen una fuerte relación con los rezagos más recientes de la serie, y la historia lejana no contiene información predictiva relevante sobre la dirección futura de la serie.

Si bien el enfoque de backtesting nos proporciona información intuitiva sobre la estabilidad y escalabilidad del modelo, conlleva un mayor costo computacional en comparación con el enfoque de una sola partición de entrenamiento y prueba. Por lo tanto, se debe considerar este equilibrio entre los dos enfoques al seleccionar el método de entrenamiento.

Evaluación del modelo

El objetivo principal de la etapa de evaluación es evaluar la capacidad del modelo entrenado para pronosticar (o basarse en otros criterios) las observaciones futuras de la serie de manera precisa. Este proceso incluye los siguientes pasos:

  1. Análisis de residuos: Se centra en la calidad del modelo, con valores ajustados en la partición de entrenamiento.
  2. Puntuación del pronóstico: Se basa en la capacidad del modelo para pronosticar los valores reales del conjunto de pruebas.

Análisis residual

El análisis residual evalúa qué tan bien el modelo capturó y identificó los patrones de una serie temporal. Además, proporciona información sobre la distribución de los residuos, necesaria para construir intervalos de confianza en las previsiones. Los residuos son la diferencia entre la observación real y el valor ajustado del modelo. Este proceso implica el uso de herramientas de visualización de datos y pruebas estadísticas para evaluar la bondad del ajuste y la autocorrelación de los residuos. La distribución de los residuos debe ser normal para utilizarlos en la construcción de intervalos de confianza. El texto también menciona la aplicación de un modelo ARIMA en una serie de tiempo. A continuación se realiza esto en el programa.

library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
 md <- auto.arima(train)

Para examinar los residuos, se utiliza la función checkresiduals del paquete de pronóstico, la cual proporciona cuatro resultados: 1. Gráfico de la serie temporal de los residuos. 2. Gráfico ACF de los residuos. 3. Gráfico de distribución de los residuos. 4. Resultado de la prueba de Ljung-Box.

La prueba de Ljung-Box es un método estadístico para verificar si la autocorrelación de una serie (en este caso, los residuos) es diferente de cero. Tiene dos hipótesis: - H0: El nivel de correlación entre la serie y su rezago es igual a cero, lo que significa que las observaciones de la serie son independientes. - H1: El nivel de correlación entre la serie y su rezago es diferente de cero, lo que significa que las observaciones de la serie no son independientes.

Se utiliza la función checkresiduals para evaluar el rendimiento del modelo entrenado en la partición de entrenamiento.

checkresiduals(md)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,1)(2,1,1)[12]
## Q* = 24.95, df = 18, p-value = 0.1263
## 
## Model df: 6.   Total lags used: 24

Basándonos en los resultados de la prueba de Ljung-Box y los valores p, podemos rechazar la hipótesis nula con un nivel de significancia del 0.01. Esto indica que la correlación entre la serie de residuos y sus rezagos es diferente de cero. El gráfico ACF respalda esta conclusión. Esto sugiere que el modelo no capturó completamente todos los patrones de la serie, y podría ser necesario ajustar los parámetros del modelo. En cuanto al gráfico de la serie temporal de residuos, muestra oscilaciones alrededor del eje x, con excepción de algunos residuos que cruzan el valor de 250. Esto podría indicar la presencia de valores atípicos en esos períodos, que necesitan ser revisados en la serie de datos. Por último, el gráfico de distribución de los residuos parece representar adecuadamente una distribución normal.

Puntaje para el pronostico

Una vez que hayas ajustado tu modelo, es el momento de evaluar su capacidad para predecir observaciones que el modelo no ha visto antes (en contraste con los valores ajustados que el modelo ha visto durante el proceso de entrenamiento). El método más común para evaluar el éxito de la predicción de los valores reales es el uso de métricas de precisión o error. Algunas métricas comunes para evaluar el éxito de las predicciones son:

  1. Error Cuadrático Medio (MSE): Cuantifica la distancia cuadrada promedio entre los valores reales y los valores pronosticados. Evita que los valores positivos y negativos se cancelen mutuamente, penalizando el error a medida que aumenta.

  2. Raíz del Error Cuadrático Medio (RMSE): Es la raíz cuadrada de la distancia cuadrada promedio entre los valores reales y pronosticados. Al igual que el MSE, es sensible a los valores atípicos debido al efecto cuadrado.

  3. Error Absoluto Medio (MAE): Mide la tasa de error absoluto del pronóstico. Al igual que el MSE y el RMSE, esta métrica solo tiene valores positivos y no penaliza el error, por lo que no es sensible a los valores atípicos.

  4. Error Porcentual Absoluto Medio (MAPE): Mide el error absoluto promedio en términos de porcentaje. Es más fácil de comparar y comunicar con personas no técnicas debido a su representación en porcentaje.

Para evaluar el rendimiento de tu modelo, puedes usar estas métricas para comparar tus predicciones con los valores reales. Por ejemplo, puedes utilizar la función de pronóstico del paquete de pronóstico para predecir un conjunto de observaciones que no se utilizaron en el entrenamiento y luego evaluar el desempeño del modelo en función de estas métricas.

fc <- forecast(md, h = 12)

Ahora que hemos asignado el pronóstico al objeto “fc”, utilizaremos la función “accuracy” del paquete de pronóstico para evaluar el rendimiento del modelo en comparación con los valores reales en la partición de prueba. Esta función calculará varias métricas de precisión, como el Error Cuadrático Medio (MSE), la Raíz del Error Cuadrático Medio (RMSE), el Error Absoluto Medio (MAE) y el Error Porcentual Absoluto Medio (MAPE) para evaluar qué tan bien se ajusta el modelo a los datos de prueba.

accuracy(fc, test)
##                     ME      RMSE      MAE       MPE     MAPE      MASE
## Training set  5.844136  97.81626 73.42657 0.1170672 3.522348 0.6376860
## Test set     37.847885 103.22848 81.46603 1.3107987 3.261643 0.7075062
##                      ACF1 Theil's U
## Training set -0.004183172        NA
## Test set     -0.046708926 0.3404092

La función “accuracy”, que utilizaremos intensivamente en los próximos capítulos, proporciona varias métricas de error tanto para los valores ajustados (conjunto de entrenamiento) como para las predicciones reales (conjunto de prueba). Se observa que el MAPE del modelo es del 3.52% en el conjunto de entrenamiento y del 7.84% en el conjunto de prueba. Un error más alto en el conjunto de prueba en comparación con el conjunto de entrenamiento no es sorprendente, ya que el modelo generalmente se ajustó a los datos del conjunto de entrenamiento durante el proceso de entrenamiento. Un error bajo en el conjunto de entrenamiento y un error alto en el conjunto de prueba son indicativos de un sobreajuste del modelo.

Una alternativa para evaluar el ajuste del modelo en ambos conjuntos (entrenamiento y prueba) es utilizar la función “test_forecast” del paquete TSstudio. Esta función visualiza la serie real, los valores ajustados en el conjunto de entrenamiento y las predicciones en el conjunto de prueba. Al hacer clic en los valores ajustados o pronosticados, aparecerá una ventana emergente con los resultados de RMSE y MAPE en ambos conjuntos, lo cual es útil para evaluar el modelo en detalle.

 test_forecast(actual = USgas,
               forecast.obj = fc,
               test = test)

Es más fácil y rápido identificar información sobre la calidad del ajuste tanto de los valores ajustados como de los pronosticados al trazar esos valores frente a los valores reales de la serie. Por ejemplo, de inmediato notarás que el pico residual en 2006 se debe a valores atípicos (o un consumo más bajo de lo normal en la serie). Además, el pronóstico real no capturó el pico anual de 2018. Estos aspectos no se pueden observar mediante métricas de error y resaltan la importancia de la visualización para obtener información valiosa sobre el modelo.

Punto de referencia de pronóstico

Para evaluar si los resultados de las métricas de error (MAPE del 7.84% o RMSE de 208.01) son altos o bajos, se suele recurrir a la comparación con un enfoque de referencia o algún método heredado que se desee reemplazar. Un enfoque común es utilizar un enfoque de pronóstico simplista como referencia. Por ejemplo, se puede utilizar un enfoque ingenuo para pronosticar la serie y utilizarlo como punto de referencia para el pronóstico anterior creado con el modelo ARIMA.

Un enfoque ingenuo generalmente asume que el valor más recientemente observado es el representante verdadero del futuro. Por lo tanto, continuará con el último valor hacia el infinito (o hasta el horizonte del pronóstico). Se puede crear un pronóstico ingenuo con la función “naive” del paquete de pronóstico y utilizar el conjunto de entrenamiento como entrada del modelo. Luego, comparar el rendimiento del modelo ARIMA con este pronóstico ingenuo ayudará a determinar si los resultados son competitivos o si se necesita mejorar el modelo.

 library(forecast)

Es posible revisar el rendimiento del modelo en las particiones de entrenamiento y prueba usando la siguiente función:

naive_model <- naive(train, h  = 12)
 test_forecast(actual = USgas,
               forecast.obj = naive_model,
               test = test)

Se realizá un resumen de la presición:

accuracy(naive_model, test)
##                      ME     RMSE      MAE        MPE     MAPE     MASE
## Training set  -1.028444 285.6607 228.5084 -0.9218463 10.97123 1.984522
## Test set     301.891667 499.6914 379.1417  9.6798015 13.28187 3.292723
##                   ACF1 Theil's U
## Training set 0.3761105        NA
## Test set     0.7002486  1.499679

En el caso del modelo ingenuo, no hay un proceso de entrenamiento y los valores ajustados se establecen como los valores reales (como se puede ver en el gráfico anterior). Dado que USgas tiene un patrón estacional fuerte, tendría sentido utilizar un modelo ingenuo estacional que tenga en cuenta la variación estacional. El modelo “snaive_model” del paquete de pronóstico utiliza el último punto estacional como pronóstico para todas las observaciones estacionales correspondientes. Por ejemplo, si estamos trabajando con una serie mensual, el valor de enero más reciente en la serie se utilizará como el pronóstico puntual para todos los futuros meses de enero.

snaive_model <- snaive(train, h = 12)
 test_forecast(actual = USgas,
               forecast.obj = snaive_model,
               test = test)

Se realizá un resumen de la presición:

accuracy(snaive_model, test)
##                    ME     RMSE      MAE      MPE     MAPE     MASE       ACF1
## Training set 33.99953 148.7049 115.1453 1.379869 5.494048 1.000000  0.4859501
## Test set     96.45000 164.6967 135.8833 3.612060 5.220458 1.180103 -0.2120929
##              Theil's U
## Training set        NA
## Test set     0.4289964

Parece que el modelo ingenuo estacional se ajusta mejor al tipo de serie que estamos pronosticando, es decir, USgas, debido a su fuerte patrón estacional (en comparación con el modelo ingenuo). Por lo tanto, lo utilizaremos como referencia para el modelo ARIMA. Al comparar tanto el MAPE como el RMSE de los dos modelos en la partición de prueba, está claro que el modelo ARIMA proporciona una mejora (en términos de precisión) en comparación con el modelo de referencia. Esto sugiere que el modelo ARIMA es más efectivo para predecir los valores de la serie USgas en comparación con un enfoque ingenuo estacional.

Finalizando el modelo predictivo

Una vez que el modelo ha sido entrenado, probado, ajustado (si es necesario) y evaluado con éxito, podemos pasar a la última etapa y finalizar el pronóstico. Esta etapa se basa en recalibrar los pesos o coeficientes del modelo con la serie completa. Hay dos enfoques para usar la configuración de los parámetros del modelo:

  1. Si el modelo fue ajustado manualmente, debes utilizar los parámetros de ajuste exactos que se utilizaron en el modelo entrenado.

  2. Si el modelo fue ajustado automáticamente por un algoritmo (como la función auto.arima que utilizamos anteriormente), puedes hacer cualquiera de lo siguiente:

    • Extraer la configuración de parámetros que se utilizó con la partición de entrenamiento.
    • Dejar que el algoritmo ajuste nuevamente los parámetros del modelo utilizando la serie completa, bajo la suposición de que el algoritmo tiene la capacidad de ajustar correctamente los parámetros del modelo al entrenarlo con nuevos datos.

Se recomienda el uso de algoritmos para automatizar el proceso de ajuste del modelo cuando se ha probado la capacidad del modelo para ajustarse con pruebas retrospectivas. Esto te permite evaluar si el algoritmo tiene la capacidad de ajustar correctamente los parámetros del modelo, según los resultados de las pruebas retrospectivas. Por razones de simplicidad, seguiremos utilizando el modelo auto.arima para entrenar el modelo final.

 md_final <- auto.arima(USgas)
 fc_final <- forecast(md_final, h = 12)

Se emplea la función de gráfica del TSstudio para finalizar el modelo predictivo.

plot_forecast(fc_final,
              title = "The US Natural Gas Consumption Forecast",
              Xtitle = "Year",
              Ytitle = "Billion Cubic Feet")

Manejo de la incertidumbre del pronóstico

El objetivo principal del proceso de pronóstico, como vimos anteriormente, es minimizar el nivel de incertidumbre en torno a los valores futuros de la serie. Aunque no podemos eliminar completamente esta incertidumbre, podemos cuantificarla y proporcionar un rango alrededor del valor puntual del pronóstico (que no es más que el valor esperado del modelo para cada punto en el futuro). Esto se puede hacer utilizando el intervalo de confianza (o un intervalo creíble, cuando se utiliza el modelo bayesiano) o mediante la simulación.

Intervalo de confianza

El intervalo de confianza es un método de aproximación estadística que se utiliza para expresar el rango de valores posibles que contienen el valor real con cierto grado de confianza (o probabilidad). Hay dos parámetros que determinan el rango del intervalo de confianza:

  1. El nivel de confianza o la probabilidad de que el valor real esté en ese rango. Cuanto mayor sea el nivel de confianza, mayor será el rango del intervalo.

  2. La desviación estándar estimada de la predicción en el tiempo T+i, donde T representa la longitud de la serie y i representa el valor pronosticado. Cuanto menor sea la tasa de error, más corto será el rango del intervalo de predicción.

Por defecto, la función de pronóstico genera un intervalo de predicción con niveles de confianza del 80% y el 95%, pero puedes modificarlo utilizando el argumento “level”. Por ejemplo, puedes usar el modelo entrenado y la función de pronóstico para los próximos 60 meses con intervalos de confianza del 80% y 90%.

fc_final2 <- forecast(md_final,
                      h = 60,
                      level = c(80, 90))
 plot_forecast(fc_final2,
              title = "The US Natural Gas Consumption Forecast",
              Xtitle = "Year",
              Ytitle = "Billion Cubic Feet")

Simulación

Una alternativa es utilizar la distribución del modelo para simular posibles caminos para el pronóstico. Este método solo se puede utilizar cuando la distribución del modelo está disponible. La función “forecast_sim” del paquete TSstudio proporciona una función incorporada para simular posibles caminos de pronóstico. Esta estimación se puede utilizar para calcular el valor puntual del pronóstico (por ejemplo, utilizando la media o la mediana de todos los caminos) o para calcular probabilidades de obtener diferentes valores. Puedes alimentar el mismo modelo a la función y ejecutar 100 iteraciones para obtener resultados más detallados y una mejor comprensión de la incertidumbre en el pronóstico.

fc_final3 <- forecast_sim(model = md_final,
                          h = 60,
                          n = 500)

La salida de la función anterior contiene todas las simulaciones calculadas y los caminos simulados. Puedes extraer el gráfico de simulación y utilizar el paquete plotly para agregar títulos al gráfico. Esto te permitirá visualizar de manera más clara las posibles trayectorias de pronóstico y entender la incertidumbre en el pronóstico.

library(plotly)
## Loading required package: ggplot2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
 fc_final3$plot %>%
  layout(title = "US Natural Gas Consumption - Forecasting Simulation",
         yaxis = list(title = "Billion Cubic Feet"),
         xaxis = list(title = "Year"))

Enfoque de carrera de caballos

El enfoque “carrera de caballos” es una estrategia de pronóstico robusta que combina lo que hemos aprendido hasta ahora en este capítulo. Consiste en entrenar, probar y evaluar múltiples modelos de pronóstico y seleccionar el modelo que mejor se desempeñe en las particiones de prueba. En el siguiente ejemplo, aplicaremos la carrera de caballos entre siete modelos diferentes utilizando seis períodos de prueba. La función “ts_backtesting” del paquete TSstudio realiza el proceso completo de entrenamiento, prueba, evaluación y pronóstico, utilizando el modelo que mejor se desempeñó en las particiones de prueba retrospectiva. Por defecto, la función probará los siguientes modelos:

  1. auto.arima: Modelo ARIMA automatizado.
  2. bsts: Modelo bayesiano de series temporales estructuradas.
  3. ets: Modelo de suavización exponencial en espacio de estado.
  4. hybrid: Un conjunto de múltiples modelos.
  5. nnetar: Modelo de series temporales de redes neuronales.
  6. tbats: Modelo de suavización exponencial en espacio de estado con transformación Box-Cox, tendencia, errores ARMA y componentes estacionales.
  7. HoltWinters: Filtro Holt-Winters.

Antes de ejecutar la función, se establece el valor de la semilla con la función “set.seed” para poder reproducir los resultados. Esto garantiza que los resultados sean consistentes y reproducibles en diferentes ejecuciones.

set.seed(1234)
#La función ts_backtesting está obsoleta y en la versión 0.1.5 y desaparecida.

#Lamentablemente, el modelo bayesiano (BSTS) se eliminó ya que sus dependencias (Boom y BookSpikeSlab) no se pueden instalar en el contenedor de Docker y, por lo tanto, impiden que el paquete TSstudio se implemente en imágenes de Docker.

#Fuente (https://github.com/RamiKrispin/TSstudio/issues/8)

 #USgas_forecast <- ts_backtesting(ts.obj = USgas,
#                                  periods = 6,
#                                  models = "abehntw",
#                                  error = "MAPE",
#                                  window_size = 12,
#                                  h = 60,
#                                  plot = FALSE)
Resultado del USgas Forecast
Resultado del USgas Forecast

Conclusión

El proceso de entrenamiento de un modelo de pronóstico es el paso final en el análisis de series temporales. El enfoque de este capítulo fue introducir los principios del flujo de trabajo de pronóstico. Como vimos, existen varios métodos que podemos utilizar para entrenar un modelo de pronóstico, y la elección del método debe estar alineada con los objetivos de pronóstico específicos y los recursos disponibles. En los capítulos siguientes, verás estas aplicaciones en la práctica.