Algoritmos de Alisamiento Exponencial

Suavizado exponencial:

  • Técnica para suavizar datos de series de tiempo utilizando una función de ventana exponencial.

  • Difiere del promedio móvil simple, con el tiempo las funciones exponenciales asignan pesos exponencialmente decrecientes.

    • Los pesos mayores se asignan a los valores u observaciones recientes, mientras que los pesos menores se asignan a los valores u observaciones más antiguos.
  • Entre muchas funciones de ventana, en el procesamiento de señales, la función de suavizado exponencial generalmente se aplica para suavizar datos donde actúa como un filtro de paso bajo para eliminar el ruido de alta frecuencia.

Suaviamiento exponencial simple - SES (simple exponencial smoothing)

Este procedimiento es adecuado cuando los datos no tienen tendencia o patrón estacional. Los pesos de cada observación son determinados por un parámetro de suavizamiento \(\alpha\).

Para un conjunto de datos con \(T\) observaciones , calculamos el valor predicho \(\hat{y}_{t+1}\), el cual estará basado en \(y_1\) a través de \(y_t\) de la siguiente forma:

\[\hat{y}_{t+1}=\alpha y_t+\alpha(1-\alpha)y_{t−1}+...+\alpha(1−\alpha)^{t−1}y_1\]

Donde:

  • \(0< \alpha < 1\).

  • \(\alpha\) puede ser visto como una tasa de aprendizaje.

  • Valores cercanos a cero son considerados como aprendizaje lento ya que se da más peso a información histórica

  • Valores cercanos a 1 son considerados como aprendizaje rápido porque el algoritmo da más peso a las observaciones recientes.

library(tseries)
#library(FitAR)
library(urca)
library(highcharter)
library(readxl)
library(ggplot2)
library(TSstudio)
library(forecast)
library(car)
library(rio)
library(readxl)
IPC=rio::import("https://github.com/Wilsonsr/Series-de-Tiempo/raw/main/bases/IPC_ACTUALIZADO.xlsx")

head(IPC)
##   Año(aaaa)-Mes(mm) Índice Inflación anual % Inflación mensual %
## 1            200001  40.30              8.25                1.29
## 2            200002  41.23              8.89                2.30
## 3            200003  41.93              9.73                1.71
## 4            200004  42.35              9.96                1.00
## 5            200005  42.57             10.00                0.52
## 6            200006  42.56              9.68               -0.02
##   Inflación año corrido %
## 1                    1.29
## 2                    3.62
## 3                    5.39
## 4                    6.44
## 5                    7.00
## 6                    6.98
inicio <- as.Date("2000-01-01")
fin <- as.Date("2023-07-01")

fecha <- seq.Date(from=inicio, to=fin, by="month")

print(fecha)
##   [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01"
##   [6] "2000-06-01" "2000-07-01" "2000-08-01" "2000-09-01" "2000-10-01"
##  [11] "2000-11-01" "2000-12-01" "2001-01-01" "2001-02-01" "2001-03-01"
##  [16] "2001-04-01" "2001-05-01" "2001-06-01" "2001-07-01" "2001-08-01"
##  [21] "2001-09-01" "2001-10-01" "2001-11-01" "2001-12-01" "2002-01-01"
##  [26] "2002-02-01" "2002-03-01" "2002-04-01" "2002-05-01" "2002-06-01"
##  [31] "2002-07-01" "2002-08-01" "2002-09-01" "2002-10-01" "2002-11-01"
##  [36] "2002-12-01" "2003-01-01" "2003-02-01" "2003-03-01" "2003-04-01"
##  [41] "2003-05-01" "2003-06-01" "2003-07-01" "2003-08-01" "2003-09-01"
##  [46] "2003-10-01" "2003-11-01" "2003-12-01" "2004-01-01" "2004-02-01"
##  [51] "2004-03-01" "2004-04-01" "2004-05-01" "2004-06-01" "2004-07-01"
##  [56] "2004-08-01" "2004-09-01" "2004-10-01" "2004-11-01" "2004-12-01"
##  [61] "2005-01-01" "2005-02-01" "2005-03-01" "2005-04-01" "2005-05-01"
##  [66] "2005-06-01" "2005-07-01" "2005-08-01" "2005-09-01" "2005-10-01"
##  [71] "2005-11-01" "2005-12-01" "2006-01-01" "2006-02-01" "2006-03-01"
##  [76] "2006-04-01" "2006-05-01" "2006-06-01" "2006-07-01" "2006-08-01"
##  [81] "2006-09-01" "2006-10-01" "2006-11-01" "2006-12-01" "2007-01-01"
##  [86] "2007-02-01" "2007-03-01" "2007-04-01" "2007-05-01" "2007-06-01"
##  [91] "2007-07-01" "2007-08-01" "2007-09-01" "2007-10-01" "2007-11-01"
##  [96] "2007-12-01" "2008-01-01" "2008-02-01" "2008-03-01" "2008-04-01"
## [101] "2008-05-01" "2008-06-01" "2008-07-01" "2008-08-01" "2008-09-01"
## [106] "2008-10-01" "2008-11-01" "2008-12-01" "2009-01-01" "2009-02-01"
## [111] "2009-03-01" "2009-04-01" "2009-05-01" "2009-06-01" "2009-07-01"
## [116] "2009-08-01" "2009-09-01" "2009-10-01" "2009-11-01" "2009-12-01"
## [121] "2010-01-01" "2010-02-01" "2010-03-01" "2010-04-01" "2010-05-01"
## [126] "2010-06-01" "2010-07-01" "2010-08-01" "2010-09-01" "2010-10-01"
## [131] "2010-11-01" "2010-12-01" "2011-01-01" "2011-02-01" "2011-03-01"
## [136] "2011-04-01" "2011-05-01" "2011-06-01" "2011-07-01" "2011-08-01"
## [141] "2011-09-01" "2011-10-01" "2011-11-01" "2011-12-01" "2012-01-01"
## [146] "2012-02-01" "2012-03-01" "2012-04-01" "2012-05-01" "2012-06-01"
## [151] "2012-07-01" "2012-08-01" "2012-09-01" "2012-10-01" "2012-11-01"
## [156] "2012-12-01" "2013-01-01" "2013-02-01" "2013-03-01" "2013-04-01"
## [161] "2013-05-01" "2013-06-01" "2013-07-01" "2013-08-01" "2013-09-01"
## [166] "2013-10-01" "2013-11-01" "2013-12-01" "2014-01-01" "2014-02-01"
## [171] "2014-03-01" "2014-04-01" "2014-05-01" "2014-06-01" "2014-07-01"
## [176] "2014-08-01" "2014-09-01" "2014-10-01" "2014-11-01" "2014-12-01"
## [181] "2015-01-01" "2015-02-01" "2015-03-01" "2015-04-01" "2015-05-01"
## [186] "2015-06-01" "2015-07-01" "2015-08-01" "2015-09-01" "2015-10-01"
## [191] "2015-11-01" "2015-12-01" "2016-01-01" "2016-02-01" "2016-03-01"
## [196] "2016-04-01" "2016-05-01" "2016-06-01" "2016-07-01" "2016-08-01"
## [201] "2016-09-01" "2016-10-01" "2016-11-01" "2016-12-01" "2017-01-01"
## [206] "2017-02-01" "2017-03-01" "2017-04-01" "2017-05-01" "2017-06-01"
## [211] "2017-07-01" "2017-08-01" "2017-09-01" "2017-10-01" "2017-11-01"
## [216] "2017-12-01" "2018-01-01" "2018-02-01" "2018-03-01" "2018-04-01"
## [221] "2018-05-01" "2018-06-01" "2018-07-01" "2018-08-01" "2018-09-01"
## [226] "2018-10-01" "2018-11-01" "2018-12-01" "2019-01-01" "2019-02-01"
## [231] "2019-03-01" "2019-04-01" "2019-05-01" "2019-06-01" "2019-07-01"
## [236] "2019-08-01" "2019-09-01" "2019-10-01" "2019-11-01" "2019-12-01"
## [241] "2020-01-01" "2020-02-01" "2020-03-01" "2020-04-01" "2020-05-01"
## [246] "2020-06-01" "2020-07-01" "2020-08-01" "2020-09-01" "2020-10-01"
## [251] "2020-11-01" "2020-12-01" "2021-01-01" "2021-02-01" "2021-03-01"
## [256] "2021-04-01" "2021-05-01" "2021-06-01" "2021-07-01" "2021-08-01"
## [261] "2021-09-01" "2021-10-01" "2021-11-01" "2021-12-01" "2022-01-01"
## [266] "2022-02-01" "2022-03-01" "2022-04-01" "2022-05-01" "2022-06-01"
## [271] "2022-07-01" "2022-08-01" "2022-09-01" "2022-10-01" "2022-11-01"
## [276] "2022-12-01" "2023-01-01" "2023-02-01" "2023-03-01" "2023-04-01"
## [281] "2023-05-01" "2023-06-01" "2023-07-01"
IPC$Fecha<-fecha
head(IPC)
##   Año(aaaa)-Mes(mm) Índice Inflación anual % Inflación mensual %
## 1            200001  40.30              8.25                1.29
## 2            200002  41.23              8.89                2.30
## 3            200003  41.93              9.73                1.71
## 4            200004  42.35              9.96                1.00
## 5            200005  42.57             10.00                0.52
## 6            200006  42.56              9.68               -0.02
##   Inflación año corrido %      Fecha
## 1                    1.29 2000-01-01
## 2                    3.62 2000-02-01
## 3                    5.39 2000-03-01
## 4                    6.44 2000-04-01
## 5                    7.00 2000-05-01
## 6                    6.98 2000-06-01
z2=ts(IPC[,4], start = c(2000,1),frequency = 12)
z2
##        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
## 2000  1.29  2.30  1.71  1.00  0.52 -0.02 -0.04  0.32  0.43  0.15  0.33  0.46
## 2001  1.05  1.89  1.48  1.15  0.42  0.04  0.11  0.26  0.37  0.19  0.12  0.34
## 2002  0.80  1.26  0.71  0.92  0.60  0.43  0.02  0.09  0.36  0.56  0.78  0.27
## 2003  1.17  1.11  1.05  1.15  0.49 -0.05 -0.14  0.31  0.22  0.06  0.35  0.61
## 2004  0.89  1.20  0.98  0.46  0.38  0.60 -0.03  0.03  0.30 -0.01  0.28  0.30
## 2005  0.82  1.02  0.77  0.44  0.41  0.40  0.05  0.00  0.43  0.23  0.11  0.07
## 2006  0.54  0.66  0.70  0.45  0.33  0.30  0.41  0.39  0.29 -0.14  0.24  0.23
## 2007  0.77  1.17  1.21  0.90  0.30  0.12  0.17 -0.13  0.08  0.01  0.47  0.49
## 2008  1.06  1.51  0.81  0.71  0.93  0.86  0.48  0.19 -0.19  0.35  0.28  0.44
## 2009  0.59  0.84  0.50  0.32  0.01 -0.06 -0.04  0.04 -0.11 -0.13 -0.07  0.08
## 2010  0.69  0.83  0.25  0.46  0.10  0.11 -0.04  0.11 -0.14 -0.09  0.19  0.65
## 2011  0.91  0.60  0.27  0.12  0.28  0.32  0.14 -0.03  0.31  0.19  0.14  0.42
## 2012  0.73  0.61  0.12  0.14  0.30  0.08 -0.02  0.04  0.29  0.16 -0.14  0.09
## 2013  0.30  0.44  0.21  0.25  0.28  0.23  0.04  0.08  0.29 -0.26 -0.22  0.26
## 2014  0.49  0.63  0.39  0.46  0.48  0.09  0.15  0.20  0.14  0.16  0.13  0.27
## 2015  0.64  1.15  0.59  0.54  0.26  0.10  0.19  0.48  0.72  0.68  0.60  0.62
## 2016  1.29  1.28  0.94  0.50  0.51  0.48  0.52 -0.32 -0.05 -0.06  0.11  0.42
## 2017  1.02  1.01  0.47  0.47  0.23  0.11 -0.05  0.14  0.04  0.02  0.18  0.38
## 2018  0.63  0.71  0.24  0.46  0.25  0.15 -0.13  0.12  0.16  0.12  0.12  0.30
## 2019  0.60  0.57  0.43  0.50  0.31  0.27  0.22  0.09  0.23  0.16  0.10  0.26
## 2020  0.42  0.67  0.57  0.16 -0.32 -0.38  0.00 -0.01  0.32 -0.06 -0.15  0.38
## 2021  0.41  0.64  0.51  0.59  1.00 -0.05  0.32  0.45  0.38  0.01  0.50  0.73
## 2022  1.67  1.63  1.00  1.25  0.84  0.51  0.81  1.02  0.93  0.72  0.77  1.26
## 2023  1.78  1.66  1.05  0.78  0.43  0.30  0.50
z1=ts(IPC[,4], start = c(2000,1), end=c(2022,12),frequency = 12)
length(z1)
## [1] 276
h1=auto.arima(z1)
hchart(forecast(h1,h=12))
v=as.vector(forecast(h1, h=12))
w=v$mean
#rmse(data_real, w)

Realizamos la gráfica de los datos

ts_plot(z1, title = "IPC 2000-2018" , slider = T)
ts_decompose(z1)
ts_decompose(z1,type="multiplicative")
ts_seasonal(z1, type="all")
ts_heatmap(z1)
ts_surface(z1)

SES(Suavizado Exponencial Simple)

  • Datos que no tienen tendencia o patrón estacional.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::recode() masks car::recode()
## ✖ purrr::some()   masks car::some()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#library(fpp2)

El pronóstico del período \(t\) \((F_{t})\) será igual al pronóstico del período anterior, es decir, del período \(t-1\) \((F_{t-1})\) más alfa \((\alpha)\) por el error del período anterior \((A_{t-1}-F_{t-1})\)

ipc_ses <- ses(z1, alpha = .2,  h = 12)
autoplot(ipc_ses)

summary(ipc_ses)
## 
## Forecast method: Simple exponential smoothing
## 
## Model Information:
## Simple exponential smoothing 
## 
## Call:
##  ses(y = z1, h = 12, alpha = 0.2) 
## 
##   Smoothing parameters:
##     alpha = 0.2 
## 
##   Initial states:
##     l = 1.0987 
## 
##   sigma:  0.384
## 
##      AIC     AICc      BIC 
## 1024.960 1025.004 1032.200 
## 
## Error measures:
##                        ME      RMSE      MAE  MPE MAPE    MASE      ACF1
## Training set -0.003186061 0.3826495 0.293295 -Inf  Inf 1.14779 0.5972244
## 
## Forecasts:
##          Point Forecast     Lo 80    Hi 80      Lo 95    Hi 95
## Jan 2023      0.9228607 0.4306892 1.415032 0.17014930 1.675572
## Feb 2023      0.9228607 0.4209422 1.424779 0.15524267 1.690479
## Mar 2023      0.9228607 0.4113810 1.434340 0.14062007 1.705101
## Apr 2023      0.9228607 0.4019953 1.443726 0.12626583 1.719455
## May 2023      0.9228607 0.3927757 1.452946 0.11216571 1.733556
## Jun 2023      0.9228607 0.3837138 1.462008 0.09830667 1.747415
## Jul 2023      0.9228607 0.3748017 1.470920 0.08467676 1.761045
## Aug 2023      0.9228607 0.3660322 1.479689 0.07126497 1.774456
## Sep 2023      0.9228607 0.3573987 1.488323 0.05806114 1.787660
## Oct 2023      0.9228607 0.3488950 1.496826 0.04505591 1.800665
## Nov 2023      0.9228607 0.3405155 1.505206 0.03224056 1.813481
## Dec 2023      0.9228607 0.3322549 1.513466 0.01960702 1.826114
autoplot(ipc_ses) +
  autolayer(fitted(ipc_ses), series="Fitted") +
  xlab("Year")

ipc_ses
##          Point Forecast     Lo 80    Hi 80      Lo 95    Hi 95
## Jan 2023      0.9228607 0.4306892 1.415032 0.17014930 1.675572
## Feb 2023      0.9228607 0.4209422 1.424779 0.15524267 1.690479
## Mar 2023      0.9228607 0.4113810 1.434340 0.14062007 1.705101
## Apr 2023      0.9228607 0.4019953 1.443726 0.12626583 1.719455
## May 2023      0.9228607 0.3927757 1.452946 0.11216571 1.733556
## Jun 2023      0.9228607 0.3837138 1.462008 0.09830667 1.747415
## Jul 2023      0.9228607 0.3748017 1.470920 0.08467676 1.761045
## Aug 2023      0.9228607 0.3660322 1.479689 0.07126497 1.774456
## Sep 2023      0.9228607 0.3573987 1.488323 0.05806114 1.787660
## Oct 2023      0.9228607 0.3488950 1.496826 0.04505591 1.800665
## Nov 2023      0.9228607 0.3405155 1.505206 0.03224056 1.813481
## Dec 2023      0.9228607 0.3322549 1.513466 0.01960702 1.826114
length(z2)
## [1] 283
length(z1)
## [1] 276
test=z2[229:240]

ETS (Error tendencia y estacionalidad)

  • El algoritmo ETS es especialmente útil para conjuntos de datos con estacionalidad y otras suposiciones previas sobre los datos.

  • ETS calcula un promedio ponderado sobre todas las observaciones en el conjunto de datos de las series temporales de entrada como su predicción.

  • Las ponderaciones disminuyen exponencialmente con el tiempo, en lugar de las ponderaciones constantes en los métodos de promedio móvil simple.

  • Las ponderaciones dependen de un parámetro constante, conocido como parámetro de suavizamiento.

fit_ets_default <- ets(z1)
checkresiduals(fit_ets_default)

## 
##  Ljung-Box test
## 
## data:  Residuals from ETS(A,N,A)
## Q* = 57.418, df = 24, p-value = 0.0001465
## 
## Model df: 0.   Total lags used: 24
mod2 <- forecast(fit_ets_default, 7, level = 95)
plot(mod2)

  • Veamos el ajuste entre los datos de la serie y el pronóstico del modelo en la siguiente representación gráfica, usando la función fitted() que obtiene un ajuste con la data historica.
autoplot(mod2)+
  autolayer(fitted(mod2), series="Ajuste")

print(summary(mod2))
## 
## Forecast method: ETS(A,N,A)
## 
## Model Information:
## ETS(A,N,A) 
## 
## Call:
##  ets(y = z1) 
## 
##   Smoothing parameters:
##     alpha = 0.4283 
##     gamma = 1e-04 
## 
##   Initial states:
##     l = 0.6784 
##     s = -0.0295 -0.1793 -0.3052 -0.1516 -0.2475 -0.2867
##            -0.2167 -0.0315 0.1534 0.3001 0.6022 0.3922
## 
##   sigma:  0.2436
## 
##      AIC     AICc      BIC 
## 787.3352 789.1814 841.6413 
## 
## Error measures:
##                       ME      RMSE       MAE MPE MAPE      MASE      ACF1
## Training set 0.003826058 0.2373507 0.1835628 NaN  Inf 0.7183603 0.2348024
## 
## Forecasts:
##          Point Forecast     Lo 95    Hi 95
## Jan 2023      1.5230061 1.0455400 2.000472
## Feb 2023      1.7329328 1.2135139 2.252352
## Mar 2023      1.4307746 0.8725470 1.989002
## Apr 2023      1.2841427 0.6896344 1.878651
## May 2023      1.0992502 0.4705514 1.727949
## Jun 2023      0.9140417 0.2529182 1.575165
## Jul 2023      0.8440168 0.1519862 1.536047

Y podemos representar solo los resultados a través de un dataframe, asignando la ejecución del mismo a la variable pronóstico.

pronostico <- as.data.frame(mod2)
pronostico
##          Point Forecast     Lo 95    Hi 95
## Jan 2023      1.5230061 1.0455400 2.000472
## Feb 2023      1.7329328 1.2135139 2.252352
## Mar 2023      1.4307746 0.8725470 1.989002
## Apr 2023      1.2841427 0.6896344 1.878651
## May 2023      1.0992502 0.4705514 1.727949
## Jun 2023      0.9140417 0.2529182 1.575165
## Jul 2023      0.8440168 0.1519862 1.536047

SUAVIZADO EXPONENCIAL(HOLT-WINTERS)

  • El método se basa en un algoritmo iterativo que a cada tiempo realiza un pronóstico sobre el comportamiento de la serie en base a promedios debidamente ponderados de los datos obtenidos anteriormente.

  • A este particular hay que reseñar los 2 diferentes tipos de estacionalidad que se pueden dar en las gráficas, que son estacionalidad aditiva o estacionalidad multiplicativa.

  • El modelo multiplicativo se usa cuando la magnitud del patron estacional en los datos depende de la magnitud de los datos. En otras palabras, la magnitud del patron estacional aumenta a medida que los valores de los datos se incrementan y disminuye a medida que los valores de los datos decrecen.

  • El modelo aditivo se usa cuando la magnitud del patron estacional en los datos no dependa de la magnitud de los datos. En otras palabras, la magnitud del patron estacional no cambia cuando la serie sube o baja.

El método de Holt-Winters es una técnica de suavizado que utiliza un conjunto de estimaciones recursivas a partir de la serie histórica. Estas estimaciones utilizan

  • Una constante de nivel \(\alpha\)

  • Una constante de tendencia \(\beta\)

  • Una constante estacional multiplicativa \(\gamma\)

Las estimaciones recursivas se basan en las siguientes ecuaciones:

\[\hat Y_t=\alpha(\hat Y_{t-1}-T_{t-1})+(1-\alpha)\frac{Y_t}{F_{t-s}}\ \ \ 0< \alpha <1\]

\[T_t=\beta T_{t-1}+(1-\beta)(\hat Y_{t}-\hat Y_{t-1})\ \ \ 0< \beta <1\]

\[F_t=\gamma F_{t-s}+(1-\gamma)\frac{Y_t}{\hat Y_{t}}\ \ \ 0< \gamma <1\]

donde \(s=4\) en el caso de datos trimestrales y \(s=12\) en el caso de datos mensuales.

  • \(\hat{Y}_t\) sería el nivel suavizado de la serie,

  • \(T_t\) la tendencia suavizada de la serie y

  • \(F_t\) el ajuste estacional suavizado de la serie.

HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL, seasonal = c(“additive”,multiplicative“), start.periods = 2, l.start = NULL, b.start = NULL, s.start = NULL, optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1), optim.control = list())

Graficando nuevamente nuestros datos

`

ts_plot(z1, slider = T, title = "IPC 2000-2019")
  • Ahora realizaremos una gráfica donde se vea la serie del modelo (linea negra) y el ajuste con la predicción(linea roja), así mismo aparecerá la descomposición de la gráfica para evaluar los datos.
m1 = HoltWinters(z1, seasonal = "additive")
plot(m1)

hchart(forecast(m1,7))
m1
## Holt-Winters exponential smoothing with trend and additive seasonal component.
## 
## Call:
## HoltWinters(x = z1, seasonal = "additive")
## 
## Smoothing parameters:
##  alpha: 0.298296
##  beta : 0
##  gamma: 0.493723
## 
## Coefficients:
##             [,1]
## a    0.961306071
## b   -0.003293998
## s1   0.609663142
## s2   0.631576834
## s3   0.240894809
## s4   0.289949188
## s5   0.084339934
## s6  -0.320581396
## s7  -0.067869299
## s8   0.008977429
## s9  -0.006904004
## s10 -0.244521044
## s11 -0.111848790
## s12  0.236754462
checkresiduals(m1)

## 
##  Ljung-Box test
## 
## data:  Residuals from HoltWinters
## Q* = 37.508, df = 24, p-value = 0.03891
## 
## Model df: 0.   Total lags used: 24
  • A posterori realizaremos las predicciones a 12 meses vista y las graficaremos:
mod3=predict(m1, 7, prediction.interval = TRUE)
mod3
##                fit      upr        lwr
## Jan 2023 1.5676752 2.054181 1.08116953
## Feb 2023 1.5862949 2.093984 1.07860566
## Mar 2023 1.1923189 1.720343 0.66429524
## Apr 2023 1.2380793 1.785683 0.69047580
## May 2023 1.0291760 1.595683 0.46266904
## Jun 2023 0.6209607 1.205760 0.03616094
## Jul 2023 0.8703788 1.472916 0.26784137
plot(m1, mod3)

REDES NEURONALES DE RETROALIMENTACION (nntear)

Son redes con una sola capa oculta y entradas retrasadas para pronosticar series de tiempo univariadas.

Vamos a elaborar entonces el modelo de red neuronal con nuestros datos:

set.seed(42)
neural_network <- nnetar(z1)
class(neural_network)
## [1] "nnetar"
  • Una vez hecho esto vamos a comprobar los residuos que presenta nuestro modelo.
checkresiduals(neural_network)

## 
##  Ljung-Box test
## 
## data:  Residuals from NNAR(4,1,3)[12]
## Q* = 34.826, df = 24, p-value = 0.07102
## 
## Model df: 0.   Total lags used: 24

Una vez hecho esto realizamos la predicción a 12 meses de los datos, con una significancia del 95% de los mismos.

mod4 <- forecast(neural_network, h=7, level = 95)
mod4
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2023 1.2289202 1.0240862 0.9220282 0.9648346 0.8947183 0.7717747 0.7616832
  • Luego realizamos un gráfico de nuestro pronostico.
autoplot(mod4)

  • Ahora vamos a ver representado el ajuste entre lo datos de la serie y el pronóstico del modelo en la siguiente representación gráfica, para ello utilizamos la función fitted() que obtiene un ajuste con la data histórica.
autoplot(mod4)+
  autolayer(fitted(mod4), series="Ajuste")
## Warning: Removed 12 rows containing missing values (`geom_line()`).

Ahora vamos a determinar los resultados de este modelo creando un dataframe

pronostico <- as.data.frame(mod4)
pronostico
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2023 1.2289202 1.0240862 0.9220282 0.9648346 0.8947183 0.7717747 0.7616832

REDES NEURONALES RECURRENTES (Modelos Elman y Jordan).

  • Una red neuronal recurrente no tiene una estructura de capas definida, sino que permiten conexiones arbitrarias entre las neuronas, incluso pudiendo crear ciclos, con esto se consigue crear la temporalidad, permitiendo que la red tenga memoria.

  • Los RNN se denominan recurrentes porque realizan la misma tarea para cada elemento de una secuencia, y la salida depende de los cálculos anteriores.

Modelo Elman.

  • En las redes de Elman, las entradas de estas neuronas, se toman desde las salidas de las neuronas de una de las capas ocultas, y sus salidas se conectan de nuevo en las entradas de esta misma capa, lo que proporciona una especie de memoria sobre el estado anterior de dicha capa.

  • Para desarrollar este modelo junto con el de Jordan, se cargan las librerías

#install.packages("RSNNS")
library(RSNNS)
## Warning: package 'RSNNS' was built under R version 4.3.1
library(quantmod)

Vamos pronosticar 12 meses de nuestros datos con esta red.

  • En primer lugar para actuar en dicho proceso con redes neuronales tenemos que normalizar nuestros datos para que tomen valores entre 0 y 1. Para ello hemos asociado a nuestro dataset de base una variable “Z” y a partir de esta hemos realizar la normalización a través de la variable “S”.
Z <- as.ts(z1,F)
S <- (Z-min(Z))/(max(Z)-min(Z))  
plot(S)

A continuación comprobamos el numero de filas totales que contiene nuestro dataset y dividiremos los conjuntos de entrenamiento en un 75% y prueba en un 25% respectivamente.

tamano_total <- length(S)
tamano_total
## [1] 276
tamano_train <- round(tamano_total*0.75, digits = 0)
train <- 0:(tamano_train-1)
train
##   [1]   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
##  [19]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35
##  [37]  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53
##  [55]  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71
##  [73]  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89
##  [91]  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107
## [109] 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
## [127] 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
## [145] 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
## [163] 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
## [181] 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
## [199] 198 199 200 201 202 203 204 205 206
test <- (tamano_train):tamano_total
test
##  [1] 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
## [20] 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
## [39] 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
## [58] 264 265 266 267 268 269 270 271 272 273 274 275 276
  • Ahora crearemos un dataframe con \(n\) columnas, cada una de las cuales adelantara un valor de la serie en el futuro, a través de una variable tipo zoo, equivalente al periodo de retardo de la serie.
y <- as.zoo(S)
x1 <- Lag(y, k = 1)
x2 <- Lag(y, k = 2)
x3 <- Lag(y, k = 3)
x4 <- Lag(y, k = 4)
x5 <- Lag(y, k = 5)
x6 <- Lag(y, k = 6)
x7 <- Lag(y, k = 7)
x8 <- Lag(y, k = 8)
x9 <- Lag(y, k = 9)
x10 <- Lag(y, k = 10)
x11 <- Lag(y, k = 11)
x12 <- Lag(y, k = 12)
slogN <- cbind(y,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12)
DT::datatable(slogN)
  • A continuacion eliminaremos los valores NA producidos al desplazar la serie:
slogN1 <- slogN[-(1:12),]
DT::datatable(slogN1)
  • Luego definimos los valores de entrada y salida de la red neuronal:
inputs <- slogN1[,2:13]
outputs <- slogN1[,1]
  • Ahora crearemos la red de Elman, probando diferentes tipos de combinaciones de neuronas en las capas ocultas e iteraciones máximas, ademas del ritmo de aprendizaje aunque este último apenas lo hemos tocado, para ajustar lo mejor posible la curva de predicción a la del modelo de la serie. De esta forma hemos llegado a estos valores a la hora de crear nuestra red. Asi mismo ponemos una semilla para que el resultado sea reproducible.
set.seed(42)
fit<-elman(inputs[train],outputs[train],size=c(10,3),learnFuncParams=c(0.1),
                  maxit=64000)
  • En la gráfica siguiente vemos como evoluciona el error de la red con el numero de iteraciones para los parámetros expuestos.
plotIterativeError(fit, main = "Iterative Error for 7,3 Neuron")

  • Observamos que el error converge a 0 muy rapidamente.

  • Ahora realizamos la predicción con el resto de los términos de la serie que son los datos seleccionados para test, pasamos pues una vez entrenada a probarla y a representarla graficamente para ver el ajuste del modelo.

y <- as.vector(outputs[-test])
plot(y,type="l")
pred <- predict(fit, inputs[-test])
lines(pred,col = "red")

  • El ajuste que predice bastante bien con los parametros elegidos, pues la curva del modelo de la serie y la de la prediccion parecen bastante ajustadas.

  • Esta representacion grafica se puede utilizar para ir ajustando la prediccion y el modelo a medida que vamos probando diferentes parametros de la red de Elman, de forma que la curva del modelo y de la prediccion queden lo mas ajustados posibles.

  • Ahora gracias al efecto memoria vamos a adelantarle a la serie al menos en un valor con una precision muy buena. Para ello volveremos a introducir los datos de entrenamiento.

predictions <- predict(fit,inputs[-train])
predictions
##                   [,1]
## mar. 2018   0.20155160
## abr. 2018   0.26878041
## may. 2018   0.24045695
## jun. 2018   0.17272875
## jul. 2018   0.18273371
## ago. 2018   0.24018662
## sept. 2018  0.26043680
## oct. 2018   0.14401960
## nov. 2018   0.06738933
## dic. 2018  -0.00350827
## ene. 2019   0.29848185
## feb. 2019   0.44689900
## mar. 2019   0.21386547
## abr. 2019   0.27052948
## may. 2019   0.24281317
## jun. 2019   0.20457482
## jul. 2019   0.22603002
## ago. 2019   0.27260423
## sept. 2019  0.18370105
## oct. 2019   0.21100679
## nov. 2019   0.11725422
## dic. 2019   0.13014795
## ene. 2020   0.27740842
## feb. 2020   0.51852149
## mar. 2020   0.30465892
## abr. 2020   0.15880583
## may. 2020   0.22456965
## jun. 2020   0.21157464
## jul. 2020   0.25139078
## ago. 2020   0.11221258
## sept. 2020  0.04543498
## oct. 2020  -0.07154493
## nov. 2020   0.01882648
## dic. 2020   0.41777167
## ene. 2021   0.25505498
## feb. 2021   0.58207905
## mar. 2021   0.48128504
## abr. 2021   0.13794538
## may. 2021   0.17353083
## jun. 2021   0.15123299
## jul. 2021   0.17263919
## ago. 2021   0.35848954
## sept. 2021  0.19154371
## oct. 2021   0.13107669
## nov. 2021   0.11026130
## dic. 2021   0.21891356
## ene. 2022   1.07840061
## feb. 2022   1.25381970
## mar. 2022   2.11794496
## abr. 2022   0.36162722
## may. 2022   0.54533941
## jun. 2022   0.25274438
## jul. 2022   0.08399927
## ago. 2022  -0.36474147
## sept. 2022 -0.36983466
## oct. 2022  -0.62704027
## nov. 2022  -0.27795017
## dic. 2022   0.86469340
  • posteriori desnormalizaremos los datos:
mod5 <- predictions*(max(Z)-min(Z))+min(Z)
mod5
##                    [,1]
## mar. 2018   0.160158291
## abr. 2018   0.340331500
## may. 2018   0.264424636
## jun. 2018   0.082913042
## jul. 2018   0.109726355
## ago. 2018   0.263700133
## sept. 2018  0.317970632
## oct. 2018   0.005972538
## nov. 2018  -0.199396591
## dic. 2018  -0.389402163
## ene. 2019   0.419931363
## feb. 2019   0.817689312
## mar. 2019   0.193159470
## abr. 2019   0.345019003
## may. 2019   0.270739295
## jun. 2019   0.168260527
## jul. 2019   0.225760459
## ago. 2019   0.350579329
## sept. 2019  0.112318823
## oct. 2019   0.185498198
## nov. 2019  -0.065758691
## dic. 2019  -0.031203497
## ene. 2020   0.363454568
## feb. 2020   1.009637587
## mar. 2020   0.436485904
## abr. 2020   0.045599630
## may. 2020   0.221846658
## jun. 2020   0.187020046
## jul. 2020   0.293727304
## ago. 2020  -0.079270276
## sept. 2020 -0.258234249
## oct. 2020  -0.571740413
## nov. 2020  -0.329545021
## dic. 2020   0.739628068
## ene. 2021   0.303547348
## feb. 2021   1.179971862
## mar. 2021   0.909843895
## abr. 2021  -0.010306371
## may. 2021   0.085062630
## jun. 2021   0.025304407
## jul. 2021   0.082673032
## ago. 2021   0.580751976
## sept. 2021  0.133337151
## oct. 2021  -0.028714461
## nov. 2021  -0.084499719
## dic. 2021   0.206688328
## ene. 2022   2.510113640
## feb. 2022   2.980236807
## mar. 2022   5.296092482
## abr. 2022   0.589160953
## may. 2022   1.081509607
## jun. 2022   0.297354929
## jul. 2022  -0.154881960
## ago. 2022  -1.357507151
## sept. 2022 -1.371156893
## oct. 2022  -2.060467916
## nov. 2022  -1.124906449
## dic. 2022   1.937378321
  • Ahora veamos la representación de los valores predecidos para el siguiente periodo.
x <- 1:(tamano_total+7)
y <- c(as.vector(Z),mod5)
plot(x[1:tamano_total], y[1:tamano_total],col = "blue", type="l")
lines( x[(tamano_total):length(x)-1], y[(tamano_total):length(x)-1], col="red")

pron_elman=y[(tamano_total):length(x)]
length(y)
## [1] 334
  • Aquí vemos la gráfica con los valores predecidos con la linea roja.

-Los valores que adelantamos en el tiempo corresponden a mod5, de los cuales adelantaremos 12 meses a futuro para nuestro estudio.

Modelo Jordan

  • En las redes Jordan, la diferencia esta en que la entrada de las neuronas de la capa de contexto se toma desde la salida de la red.

  • Realizamos las mismas operaciones que con la red Elman, sustituyendo el modelo, obtenemos el resultado para la red Jordan.

set.seed(42)
fit <-jordan(inputs[train],outputs[train],size=6,learnFuncParams=c(0.1),
             maxit=78000)

plotIterativeError(fit, main = "Iterative Error for 6 Neuron")

y <- as.vector(outputs[-test])
plot(y,type="l")
pred <- predict(fit, inputs[-test])
lines(pred,col = "red")

predictions <- predict(fit,inputs[-train])
mod6 <- predictions*(max(Z)-min(Z))+min(Z)
mod6
##                   [,1]
## mar. 2018   0.48357859
## abr. 2018   0.24947453
## may. 2018   0.55703292
## jun. 2018   0.25775671
## jul. 2018   0.00837783
## ago. 2018   0.09540738
## sept. 2018  0.13791284
## oct. 2018   0.25336896
## nov. 2018   0.05883493
## dic. 2018   0.41206063
## ene. 2019   0.52424850
## feb. 2019   0.68606238
## mar. 2019   0.36462283
## abr. 2019   0.41907611
## may. 2019   0.44248008
## jun. 2019   0.16078036
## jul. 2019   0.17737687
## ago. 2019   0.21479967
## sept. 2019 -0.03033898
## oct. 2019   0.22085982
## nov. 2019   0.14870862
## dic. 2019   0.17645341
## ene. 2020   0.40888244
## feb. 2020   0.49826169
## mar. 2020   0.68229746
## abr. 2020   0.50538452
## may. 2020   0.15317360
## jun. 2020  -0.28370893
## jul. 2020   0.06456965
## ago. 2020   0.17615103
## sept. 2020  0.26256442
## oct. 2020   0.49260808
## nov. 2020   0.26564058
## dic. 2020   0.11493226
## ene. 2021   0.52815823
## feb. 2021   0.59548492
## mar. 2021   0.40788957
## abr. 2021   0.28765729
## may. 2021   0.68348369
## jun. 2021   0.27659814
## jul. 2021  -0.12996523
## ago. 2021   0.55520636
## sept. 2021  0.99480776
## oct. 2021  -0.07525219
## nov. 2021   0.15117932
## dic. 2021   0.32759483
## ene. 2022   0.65105343
## feb. 2022   3.52926952
## mar. 2022   0.97831776
## abr. 2022   1.71909875
## may. 2022   0.84692796
## jun. 2022   0.18835384
## jul. 2022  -0.15431418
## ago. 2022   0.36182769
## sept. 2022  0.33009765
## oct. 2022   0.25402933
## nov. 2022   0.17107907
## dic. 2022   0.89698096
x <- 1:(tamano_total+7)
y <- c(as.vector(Z),mod6)
plot(x[1:tamano_total], y[1:tamano_total],col = "blue", type="l")
lines( x[(tamano_total):length(x)], y[(tamano_total):length(x)], col="red")

pron_jordan=y[(tamano_total):length(x)]
  • La anterior grafica con los valores predecidos con la linea roja.

  • Los valores que adelantamos en el tiempo corresponden a mod6, de los cuales adelantaremos 7 meses a futuro para nuestro estudio

Estimación del error Comparativo de los modelos con los valores actuales observados.

data=IPC[277:283,4]
data_real <- ts(data, start = c(2023,1), end=c(2023,7), frequency = 12)

data_real
##       Jan  Feb  Mar  Apr  May  Jun  Jul
## 2023 1.78 1.66 1.05 0.78 0.43 0.30 0.50

Ahora haremos la comparacion de nuestros modelos con la data_real(valor de test en RMSE).

  • ETS:
library(MLmetrics)
## Warning: package 'MLmetrics' was built under R version 4.3.1
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
## 
##     Recall
library(Metrics)
## Warning: package 'Metrics' was built under R version 4.3.1
## 
## Attaching package: 'Metrics'
## The following object is masked from 'package:forecast':
## 
##     accuracy
RMSE(mod2$mean, data_real)
## [1] 0.4494131
MAPE(mod2$mean,data_real)
## [1] 0.7840755
mase(mod2$mean, data_real)
## [1] 2.216997
mod2$mean
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2023 1.5230061 1.7329328 1.4307746 1.2841427 1.0992502 0.9140417 0.8440168
  • HOLT-WINTERS:
mod3
##                fit      upr        lwr
## Jan 2023 1.5676752 2.054181 1.08116953
## Feb 2023 1.5862949 2.093984 1.07860566
## Mar 2023 1.1923189 1.720343 0.66429524
## Apr 2023 1.2380793 1.785683 0.69047580
## May 2023 1.0291760 1.595683 0.46266904
## Jun 2023 0.6209607 1.205760 0.03616094
## Jul 2023 0.8703788 1.472916 0.26784137
mod3[,1]
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2023 1.5676752 1.5862949 1.1923189 1.2380793 1.0291760 0.6209607 0.8703788
RMSE(mod3[,1], data_real)
## [1] 0.3545246
MAPE(mod3[,1],data_real)
## [1] 0.5843666
mase(mod3[,1], data_real)
## [1] 1.408379

NNTEAR:

mod4
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2023 1.2289202 1.0240862 0.9220282 0.9648346 0.8947183 0.7717747 0.7616832
mod4$mean
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2023 1.2289202 1.0240862 0.9220282 0.9648346 0.8947183 0.7717747 0.7616832
RMSE(mod4$mean,data_real)
## [1] 0.4252106
MAPE(mod4$mean,data_real)
## [1] 0.60403
mase(mod4$mean,data_real)
## [1] 4.182965
mod5
##                    [,1]
## mar. 2018   0.160158291
## abr. 2018   0.340331500
## may. 2018   0.264424636
## jun. 2018   0.082913042
## jul. 2018   0.109726355
## ago. 2018   0.263700133
## sept. 2018  0.317970632
## oct. 2018   0.005972538
## nov. 2018  -0.199396591
## dic. 2018  -0.389402163
## ene. 2019   0.419931363
## feb. 2019   0.817689312
## mar. 2019   0.193159470
## abr. 2019   0.345019003
## may. 2019   0.270739295
## jun. 2019   0.168260527
## jul. 2019   0.225760459
## ago. 2019   0.350579329
## sept. 2019  0.112318823
## oct. 2019   0.185498198
## nov. 2019  -0.065758691
## dic. 2019  -0.031203497
## ene. 2020   0.363454568
## feb. 2020   1.009637587
## mar. 2020   0.436485904
## abr. 2020   0.045599630
## may. 2020   0.221846658
## jun. 2020   0.187020046
## jul. 2020   0.293727304
## ago. 2020  -0.079270276
## sept. 2020 -0.258234249
## oct. 2020  -0.571740413
## nov. 2020  -0.329545021
## dic. 2020   0.739628068
## ene. 2021   0.303547348
## feb. 2021   1.179971862
## mar. 2021   0.909843895
## abr. 2021  -0.010306371
## may. 2021   0.085062630
## jun. 2021   0.025304407
## jul. 2021   0.082673032
## ago. 2021   0.580751976
## sept. 2021  0.133337151
## oct. 2021  -0.028714461
## nov. 2021  -0.084499719
## dic. 2021   0.206688328
## ene. 2022   2.510113640
## feb. 2022   2.980236807
## mar. 2022   5.296092482
## abr. 2022   0.589160953
## may. 2022   1.081509607
## jun. 2022   0.297354929
## jul. 2022  -0.154881960
## ago. 2022  -1.357507151
## sept. 2022 -1.371156893
## oct. 2022  -2.060467916
## nov. 2022  -1.124906449
## dic. 2022   1.937378321

ELMAN

RMSE(pron_elman[1:7], data_real)
## [1] 0.707297
MAPE(pron_elman[1:7], data_real)
## [1] 0.635221
mase(pron_elman[1:7], data_real)
## [1] 2.004772
  • JORDAN(RNN):
RMSE(pron_jordan[1:7], data_real)
## [1] 0.6121775
MAPE(pron_jordan[1:7], data_real)
## [1] 0.6044154
mase(pron_jordan[1:7], data_real)
## [1] 1.574264
library(xgboost)
## Warning: package 'xgboost' was built under R version 4.3.1
## 
## Attaching package: 'xgboost'
## The following object is masked from 'package:dplyr':
## 
##     slice
library(tidymodels)
## Warning: package 'tidymodels' was built under R version 4.3.1
## ── Attaching packages ────────────────────────────────────── tidymodels 1.1.0 ──
## ✔ broom        1.0.4     ✔ rsample      1.1.1
## ✔ dials        1.2.0     ✔ tune         1.1.1
## ✔ infer        1.0.4     ✔ workflows    1.1.3
## ✔ modeldata    1.1.0     ✔ workflowsets 1.0.1
## ✔ parsnip      1.1.0     ✔ yardstick    1.2.0
## ✔ recipes      1.0.6
## Warning: package 'dials' was built under R version 4.3.1
## Warning: package 'infer' was built under R version 4.3.1
## Warning: package 'parsnip' was built under R version 4.3.1
## Warning: package 'recipes' was built under R version 4.3.1
## Warning: package 'rsample' was built under R version 4.3.1
## Warning: package 'tune' was built under R version 4.3.1
## Warning: package 'workflows' was built under R version 4.3.1
## Warning: package 'workflowsets' was built under R version 4.3.1
## Warning: package 'yardstick' was built under R version 4.3.1
## ── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ──
## ✖ yardstick::accuracy()  masks Metrics::accuracy(), forecast::accuracy()
## ✖ scales::discard()      masks purrr::discard()
## ✖ dplyr::filter()        masks stats::filter()
## ✖ xts::first()           masks dplyr::first()
## ✖ recipes::fixed()       masks stringr::fixed()
## ✖ dplyr::lag()           masks stats::lag()
## ✖ xts::last()            masks dplyr::last()
## ✖ yardstick::mae()       masks Metrics::mae()
## ✖ yardstick::mape()      masks Metrics::mape()
## ✖ yardstick::mase()      masks Metrics::mase()
## ✖ parsnip::mlp()         masks RSNNS::mlp()
## ✖ dials::momentum()      masks TTR::momentum()
## ✖ rsample::populate()    masks Rcpp::populate()
## ✖ yardstick::precision() masks Metrics::precision()
## ✖ yardstick::recall()    masks Metrics::recall()
## ✖ dplyr::recode()        masks car::recode()
## ✖ yardstick::rmse()      masks Metrics::rmse()
## ✖ xgboost::slice()       masks dplyr::slice()
## ✖ yardstick::smape()     masks Metrics::smape()
## ✖ purrr::some()          masks car::some()
## ✖ yardstick::spec()      masks readr::spec()
## ✖ recipes::step()        masks stats::step()
## • Learn how to get started at https://www.tidymodels.org/start/
library(modeltime)
## Warning: package 'modeltime' was built under R version 4.3.1
## 
## Attaching package: 'modeltime'
## The following object is masked from 'package:TTR':
## 
##     growth
library(tidyverse)
library(lubridate)
library(timetk)
## Warning: package 'timetk' was built under R version 4.3.1
  • Dividir los datos en conjuntos de entrenamiento y prueba.
IPC
##     Año(aaaa)-Mes(mm) Índice Inflación anual % Inflación mensual %
## 1              200001  40.30              8.25                1.29
## 2              200002  41.23              8.89                2.30
## 3              200003  41.93              9.73                1.71
## 4              200004  42.35              9.96                1.00
## 5              200005  42.57             10.00                0.52
## 6              200006  42.56              9.68               -0.02
## 7              200007  42.55              9.29               -0.04
## 8              200008  42.68              9.10                0.32
## 9              200009  42.86              9.20                0.43
## 10             200010  42.93              8.99                0.15
## 11             200011  43.07              8.82                0.33
## 12             200012  43.27              8.75                0.46
## 13             200101  43.72              8.49                1.05
## 14             200102  44.55              8.06                1.89
## 15             200103  45.21              7.81                1.48
## 16             200104  45.73              7.98                1.15
## 17             200105  45.92              7.87                0.42
## 18             200106  45.94              7.93                0.04
## 19             200107  45.99              8.09                0.11
## 20             200108  46.11              8.03                0.26
## 21             200109  46.28              7.97                0.37
## 22             200110  46.37              8.01                0.19
## 23             200111  46.42              7.78                0.12
## 24             200112  46.58              7.65                0.34
## 25             200201  46.95              7.37                0.80
## 26             200202  47.54              6.70                1.26
## 27             200203  47.87              5.89                0.71
## 28             200204  48.31              5.65                0.92
## 29             200205  48.60              5.84                0.60
## 30             200206  48.81              6.25                0.43
## 31             200207  48.82              6.16                0.02
## 32             200208  48.87              5.98                0.09
## 33             200209  49.04              5.97                0.36
## 34             200210  49.32              6.37                0.56
## 35             200211  49.70              7.07                0.78
## 36             200212  49.83              6.99                0.27
## 37             200301  50.42              7.39                1.17
## 38             200302  50.98              7.24                1.11
## 39             200303  51.51              7.60                1.05
## 40             200304  52.10              7.85                1.15
## 41             200305  52.36              7.73                0.49
## 42             200306  52.33              7.21               -0.05
## 43             200307  52.26              7.04               -0.14
## 44             200308  52.42              7.26                0.31
## 45             200309  52.53              7.11                0.22
## 46             200310  52.56              6.58                0.06
## 47             200311  52.75              6.13                0.35
## 48             200312  53.07              6.49                0.61
## 49             200401  53.54              6.19                0.89
## 50             200402  54.18              6.28                1.20
## 51             200403  54.71              6.21                0.98
## 52             200404  54.96              5.49                0.46
## 53             200405  55.17              5.37                0.38
## 54             200406  55.51              6.07                0.60
## 55             200407  55.49              6.19               -0.03
## 56             200408  55.51              5.89                0.03
## 57             200409  55.67              5.97                0.30
## 58             200410  55.66              5.90               -0.01
## 59             200411  55.82              5.82                0.28
## 60             200412  55.99              5.50                0.30
## 61             200501  56.45              5.43                0.82
## 62             200502  57.02              5.25                1.02
## 63             200503  57.46              5.03                0.77
## 64             200504  57.72              5.01                0.44
## 65             200505  57.95              5.04                0.41
## 66             200506  58.18              4.83                0.40
## 67             200507  58.21              4.91                0.05
## 68             200508  58.21              4.88                0.00
## 69             200509  58.46              5.02                0.43
## 70             200510  58.60              5.27                0.23
## 71             200511  58.66              5.10                0.11
## 72             200512  58.70              4.85                0.07
## 73             200601  59.02              4.56                0.54
## 74             200602  59.41              4.19                0.66
## 75             200603  59.83              4.11                0.70
## 76             200604  60.09              4.12                0.45
## 77             200605  60.29              4.04                0.33
## 78             200606  60.48              3.94                0.30
## 79             200607  60.73              4.32                0.41
## 80             200608  60.96              4.72                0.39
## 81             200609  61.14              4.58                0.29
## 82             200610  61.05              4.19               -0.14
## 83             200611  61.19              4.31                0.24
## 84             200612  61.33              4.48                0.23
## 85             200701  61.80              4.71                0.77
## 86             200702  62.53              5.25                1.17
## 87             200703  63.29              5.78                1.21
## 88             200704  63.85              6.26                0.90
## 89             200705  64.05              6.23                0.30
## 90             200706  64.12              6.03                0.12
## 91             200707  64.23              5.77                0.17
## 92             200708  64.14              5.22               -0.13
## 93             200709  64.20              5.01                0.08
## 94             200710  64.20              5.16                0.01
## 95             200711  64.51              5.41                0.47
## 96             200712  64.82              5.69                0.49
## 97             200801  65.51              6.00                1.06
## 98             200802  66.50              6.35                1.51
## 99             200803  67.04              5.93                0.81
## 100            200804  67.51              5.73                0.71
## 101            200805  68.14              6.39                0.93
## 102            200806  68.73              7.18                0.86
## 103            200807  69.06              7.52                0.48
## 104            200808  69.19              7.87                0.19
## 105            200809  69.06              7.57               -0.19
## 106            200810  69.30              7.94                0.35
## 107            200811  69.49              7.73                0.28
## 108            200812  69.80              7.67                0.44
## 109            200901  70.21              7.18                0.59
## 110            200902  70.80              6.47                0.84
## 111            200903  71.15              6.14                0.50
## 112            200904  71.38              5.73                0.32
## 113            200905  71.39              4.77                0.01
## 114            200906  71.35              3.81               -0.06
## 115            200907  71.32              3.28               -0.04
## 116            200908  71.35              3.13                0.04
## 117            200909  71.28              3.21               -0.11
## 118            200910  71.19              2.72               -0.13
## 119            200911  71.14              2.37               -0.07
## 120            200912  71.20              2.00                0.08
## 121            201001  71.69              2.10                0.69
## 122            201002  72.28              2.09                0.83
## 123            201003  72.46              1.84                0.25
## 124            201004  72.79              1.98                0.46
## 125            201005  72.87              2.07                0.10
## 126            201006  72.95              2.25                0.11
## 127            201007  72.92              2.24               -0.04
## 128            201008  73.00              2.31                0.11
## 129            201009  72.90              2.28               -0.14
## 130            201010  72.84              2.33               -0.09
## 131            201011  72.98              2.59                0.19
## 132            201012  73.45              3.17                0.65
## 133            201101  74.12              3.40                0.91
## 134            201102  74.57              3.17                0.60
## 135            201103  74.77              3.19                0.27
## 136            201104  74.86              2.84                0.12
## 137            201105  75.07              3.02                0.28
## 138            201106  75.31              3.23                0.32
## 139            201107  75.42              3.42                0.14
## 140            201108  75.39              3.27               -0.03
## 141            201109  75.62              3.73                0.31
## 142            201110  75.77              4.02                0.19
## 143            201111  75.87              3.96                0.14
## 144            201112  76.19              3.73                0.42
## 145            201201  76.75              3.54                0.73
## 146            201202  77.22              3.55                0.61
## 147            201203  77.31              3.40                0.12
## 148            201204  77.42              3.43                0.14
## 149            201205  77.66              3.44                0.30
## 150            201206  77.72              3.20                0.08
## 151            201207  77.70              3.03               -0.02
## 152            201208  77.73              3.11                0.04
## 153            201209  77.96              3.08                0.29
## 154            201210  78.08              3.06                0.16
## 155            201211  77.98              2.77               -0.14
## 156            201212  78.05              2.44                0.09
## 157            201301  78.28              2.00                0.30
## 158            201302  78.63              1.83                0.44
## 159            201303  78.79              1.91                0.21
## 160            201304  78.99              2.02                0.25
## 161            201305  79.21              2.00                0.28
## 162            201306  79.39              2.16                0.23
## 163            201307  79.43              2.22                0.04
## 164            201308  79.50              2.27                0.08
## 165            201309  79.73              2.27                0.29
## 166            201310  79.52              1.84               -0.26
## 167            201311  79.35              1.76               -0.22
## 168            201312  79.56              1.94                0.26
## 169            201401  79.95              2.13                0.49
## 170            201402  80.45              2.32                0.63
## 171            201403  80.77              2.51                0.39
## 172            201404  81.14              2.72                0.46
## 173            201405  81.53              2.93                0.48
## 174            201406  81.61              2.79                0.09
## 175            201407  81.73              2.89                0.15
## 176            201408  81.90              3.02                0.20
## 177            201409  82.01              2.86                0.14
## 178            201410  82.14              3.29                0.16
## 179            201411  82.25              3.65                0.13
## 180            201412  82.47              3.66                0.27
## 181            201501  83.00              3.82                0.64
## 182            201502  83.96              4.36                1.15
## 183            201503  84.45              4.56                0.59
## 184            201504  84.90              4.64                0.54
## 185            201505  85.12              4.41                0.26
## 186            201506  85.21              4.42                0.10
## 187            201507  85.37              4.46                0.19
## 188            201508  85.78              4.74                0.48
## 189            201509  86.39              5.35                0.72
## 190            201510  86.98              5.89                0.68
## 191            201511  87.51              6.39                0.60
## 192            201512  88.05              6.77                0.62
## 193            201601  89.19              7.45                1.29
## 194            201602  90.33              7.59                1.28
## 195            201603  91.18              7.98                0.94
## 196            201604  91.63              7.93                0.50
## 197            201605  92.10              8.20                0.51
## 198            201606  92.54              8.60                0.48
## 199            201607  93.02              8.97                0.52
## 200            201608  92.73              8.10               -0.32
## 201            201609  92.68              7.27               -0.05
## 202            201610  92.62              6.48               -0.06
## 203            201611  92.73              5.96                0.11
## 204            201612  93.11              5.75                0.42
## 205            201701  94.07              5.47                1.02
## 206            201702  95.01              5.18                1.01
## 207            201703  95.46              4.69                0.47
## 208            201704  95.91              4.66                0.47
## 209            201705  96.12              4.37                0.23
## 210            201706  96.23              3.99                0.11
## 211            201707  96.18              3.40               -0.05
## 212            201708  96.32              3.87                0.14
## 213            201709  96.36              3.97                0.04
## 214            201710  96.37              4.05                0.02
## 215            201711  96.55              4.12                0.18
## 216            201712  96.92              4.09                0.38
## 217            201801  97.53              3.68                0.63
## 218            201802  98.22              3.37                0.71
## 219            201803  98.45              3.14                0.24
## 220            201804  98.91              3.13                0.46
## 221            201805  99.16              3.16                0.25
## 222            201806  99.31              3.20                0.15
## 223            201807  99.18              3.12               -0.13
## 224            201808  99.30              3.10                0.12
## 225            201809  99.47              3.23                0.16
## 226            201810  99.59              3.33                0.12
## 227            201811  99.70              3.27                0.12
## 228            201812 100.00              3.18                0.30
## 229            201901 100.60              3.15                0.60
## 230            201902 101.18              3.01                0.57
## 231            201903 101.62              3.21                0.43
## 232            201904 102.12              3.25                0.50
## 233            201905 102.44              3.31                0.31
## 234            201906 102.71              3.43                0.27
## 235            201907 102.94              3.79                0.22
## 236            201908 103.03              3.75                0.09
## 237            201909 103.26              3.82                0.23
## 238            201910 103.43              3.86                0.16
## 239            201911 103.54              3.84                0.10
## 240            201912 103.80              3.80                0.26
## 241            202001 104.24              3.62                0.42
## 242            202002 104.94              3.72                0.67
## 243            202003 105.53              3.86                0.57
## 244            202004 105.70              3.51                0.16
## 245            202005 105.36              2.85               -0.32
## 246            202006 104.97              2.19               -0.38
## 247            202007 104.97              1.97                0.00
## 248            202008 104.96              1.88               -0.01
## 249            202009 105.29              1.97                0.32
## 250            202010 105.23              1.75               -0.06
## 251            202011 105.08              1.49               -0.15
## 252            202012 105.48              1.61                0.38
## 253            202101 105.91              1.60                0.41
## 254            202102 106.58              1.56                0.64
## 255            202103 107.12              1.51                0.51
## 256            202104 107.76              1.95                0.59
## 257            202105 108.84              3.30                1.00
## 258            202106 108.78              3.63               -0.05
## 259            202107 109.14              3.97                0.32
## 260            202108 109.62              4.44                0.45
## 261            202109 110.04              4.51                0.38
## 262            202110 110.06              4.58                0.01
## 263            202111 110.60              5.26                0.50
## 264            202112 111.41              5.62                0.73
## 265            202201 113.26              6.94                1.67
## 266            202202 115.11              8.01                1.63
## 267            202203 116.26              8.53                1.00
## 268            202204 117.71              9.23                1.25
## 269            202205 118.70              9.07                0.84
## 270            202206 119.31              9.67                0.51
## 271            202207 120.27             10.21                0.81
## 272            202208 121.50             10.84                1.02
## 273            202209 122.63             11.44                0.93
## 274            202210 123.51             12.22                0.72
## 275            202211 124.46             12.53                0.77
## 276            202212 126.03             13.12                1.26
## 277            202301 128.27             13.25                1.78
## 278            202302 130.40             13.28                1.66
## 279            202303 131.77             13.34                1.05
## 280            202304 132.80             12.82                0.78
## 281            202305 133.38             12.36                0.43
## 282            202306 133.78             12.13                0.30
## 283            202307 134.45             11.78                0.50
##     Inflación año corrido %      Fecha
## 1                      1.29 2000-01-01
## 2                      3.62 2000-02-01
## 3                      5.39 2000-03-01
## 4                      6.44 2000-04-01
## 5                      7.00 2000-05-01
## 6                      6.98 2000-06-01
## 7                      6.94 2000-07-01
## 8                      7.27 2000-08-01
## 9                      7.73 2000-09-01
## 10                     7.90 2000-10-01
## 11                     8.25 2000-11-01
## 12                     8.75 2000-12-01
## 13                     1.05 2001-01-01
## 14                     2.96 2001-02-01
## 15                     4.49 2001-03-01
## 16                     5.69 2001-04-01
## 17                     6.13 2001-05-01
## 18                     6.17 2001-06-01
## 19                     6.29 2001-07-01
## 20                     6.57 2001-08-01
## 21                     6.96 2001-09-01
## 22                     7.16 2001-10-01
## 23                     7.28 2001-11-01
## 24                     7.65 2001-12-01
## 25                     0.80 2002-01-01
## 26                     2.06 2002-02-01
## 27                     2.79 2002-03-01
## 28                     3.73 2002-04-01
## 29                     4.35 2002-05-01
## 30                     4.79 2002-06-01
## 31                     4.82 2002-07-01
## 32                     4.92 2002-08-01
## 33                     5.30 2002-09-01
## 34                     5.88 2002-10-01
## 35                     6.71 2002-11-01
## 36                     6.99 2002-12-01
## 37                     1.17 2003-01-01
## 38                     2.30 2003-02-01
## 39                     3.37 2003-03-01
## 40                     4.56 2003-04-01
## 41                     5.07 2003-05-01
## 42                     5.01 2003-06-01
## 43                     4.86 2003-07-01
## 44                     5.18 2003-08-01
## 45                     5.42 2003-09-01
## 46                     5.48 2003-10-01
## 47                     5.85 2003-11-01
## 48                     6.49 2003-12-01
## 49                     0.89 2004-01-01
## 50                     2.10 2004-02-01
## 51                     3.10 2004-03-01
## 52                     3.57 2004-04-01
## 53                     3.97 2004-05-01
## 54                     4.59 2004-06-01
## 55                     4.56 2004-07-01
## 56                     4.59 2004-08-01
## 57                     4.90 2004-09-01
## 58                     4.89 2004-10-01
## 59                     5.18 2004-11-01
## 60                     5.50 2004-12-01
## 61                     0.82 2005-01-01
## 62                     1.85 2005-02-01
## 63                     2.64 2005-03-01
## 64                     3.09 2005-04-01
## 65                     3.51 2005-05-01
## 66                     3.93 2005-06-01
## 67                     3.98 2005-07-01
## 68                     3.98 2005-08-01
## 69                     4.42 2005-09-01
## 70                     4.66 2005-10-01
## 71                     4.78 2005-11-01
## 72                     4.85 2005-12-01
## 73                     0.54 2006-01-01
## 74                     1.20 2006-02-01
## 75                     1.91 2006-03-01
## 76                     2.37 2006-04-01
## 77                     2.71 2006-05-01
## 78                     3.02 2006-06-01
## 79                     3.44 2006-07-01
## 80                     3.85 2006-08-01
## 81                     4.15 2006-09-01
## 82                     4.00 2006-10-01
## 83                     4.24 2006-11-01
## 84                     4.48 2006-12-01
## 85                     0.77 2007-01-01
## 86                     1.95 2007-02-01
## 87                     3.18 2007-03-01
## 88                     4.11 2007-04-01
## 89                     4.42 2007-05-01
## 90                     4.55 2007-06-01
## 91                     4.72 2007-07-01
## 92                     4.58 2007-08-01
## 93                     4.67 2007-09-01
## 94                     4.68 2007-10-01
## 95                     5.17 2007-11-01
## 96                     5.69 2007-12-01
## 97                     1.06 2008-01-01
## 98                     2.58 2008-02-01
## 99                     3.41 2008-03-01
## 100                    4.15 2008-04-01
## 101                    5.12 2008-05-01
## 102                    6.02 2008-06-01
## 103                    6.53 2008-07-01
## 104                    6.74 2008-08-01
## 105                    6.53 2008-09-01
## 106                    6.90 2008-10-01
## 107                    7.20 2008-11-01
## 108                    7.67 2008-12-01
## 109                    0.59 2009-01-01
## 110                    1.43 2009-02-01
## 111                    1.94 2009-03-01
## 112                    2.26 2009-04-01
## 113                    2.28 2009-05-01
## 114                    2.22 2009-06-01
## 115                    2.18 2009-07-01
## 116                    2.23 2009-08-01
## 117                    2.12 2009-09-01
## 118                    1.98 2009-10-01
## 119                    1.92 2009-11-01
## 120                    2.00 2009-12-01
## 121                    0.69 2010-01-01
## 122                    1.52 2010-02-01
## 123                    1.78 2010-03-01
## 124                    2.24 2010-04-01
## 125                    2.35 2010-05-01
## 126                    2.47 2010-06-01
## 127                    2.42 2010-07-01
## 128                    2.54 2010-08-01
## 129                    2.40 2010-09-01
## 130                    2.31 2010-10-01
## 131                    2.51 2010-11-01
## 132                    3.17 2010-12-01
## 133                    0.91 2011-01-01
## 134                    1.52 2011-02-01
## 135                    1.79 2011-03-01
## 136                    1.91 2011-04-01
## 137                    2.20 2011-05-01
## 138                    2.53 2011-06-01
## 139                    2.67 2011-07-01
## 140                    2.64 2011-08-01
## 141                    2.95 2011-09-01
## 142                    3.15 2011-10-01
## 143                    3.29 2011-11-01
## 144                    3.73 2011-12-01
## 145                    0.73 2012-01-01
## 146                    1.35 2012-02-01
## 147                    1.47 2012-03-01
## 148                    1.62 2012-04-01
## 149                    1.92 2012-05-01
## 150                    2.01 2012-06-01
## 151                    1.98 2012-07-01
## 152                    2.03 2012-08-01
## 153                    2.32 2012-09-01
## 154                    2.48 2012-10-01
## 155                    2.34 2012-11-01
## 156                    2.44 2012-12-01
## 157                    0.30 2013-01-01
## 158                    0.74 2013-02-01
## 159                    0.95 2013-03-01
## 160                    1.21 2013-04-01
## 161                    1.49 2013-05-01
## 162                    1.73 2013-06-01
## 163                    1.77 2013-07-01
## 164                    1.86 2013-08-01
## 165                    2.16 2013-09-01
## 166                    1.89 2013-10-01
## 167                    1.67 2013-11-01
## 168                    1.94 2013-12-01
## 169                    0.49 2014-01-01
## 170                    1.12 2014-02-01
## 171                    1.52 2014-03-01
## 172                    1.98 2014-04-01
## 173                    2.48 2014-05-01
## 174                    2.57 2014-06-01
## 175                    2.73 2014-07-01
## 176                    2.94 2014-08-01
## 177                    3.08 2014-09-01
## 178                    3.25 2014-10-01
## 179                    3.38 2014-11-01
## 180                    3.66 2014-12-01
## 181                    0.64 2015-01-01
## 182                    1.80 2015-02-01
## 183                    2.40 2015-03-01
## 184                    2.95 2015-04-01
## 185                    3.22 2015-05-01
## 186                    3.33 2015-06-01
## 187                    3.52 2015-07-01
## 188                    4.02 2015-08-01
## 189                    4.76 2015-09-01
## 190                    5.47 2015-10-01
## 191                    6.11 2015-11-01
## 192                    6.77 2015-12-01
## 193                    1.29 2016-01-01
## 194                    2.59 2016-02-01
## 195                    3.55 2016-03-01
## 196                    4.07 2016-04-01
## 197                    4.60 2016-05-01
## 198                    5.10 2016-06-01
## 199                    5.65 2016-07-01
## 200                    5.31 2016-08-01
## 201                    5.25 2016-09-01
## 202                    5.19 2016-10-01
## 203                    5.31 2016-11-01
## 204                    5.75 2016-12-01
## 205                    1.02 2017-01-01
## 206                    2.04 2017-02-01
## 207                    2.52 2017-03-01
## 208                    3.00 2017-04-01
## 209                    3.23 2017-05-01
## 210                    3.35 2017-06-01
## 211                    3.30 2017-07-01
## 212                    3.44 2017-08-01
## 213                    3.49 2017-09-01
## 214                    3.50 2017-10-01
## 215                    3.69 2017-11-01
## 216                    4.09 2017-12-01
## 217                    0.63 2018-01-01
## 218                    1.34 2018-02-01
## 219                    1.58 2018-03-01
## 220                    2.05 2018-04-01
## 221                    2.31 2018-05-01
## 222                    2.47 2018-06-01
## 223                    2.34 2018-07-01
## 224                    2.46 2018-08-01
## 225                    2.63 2018-09-01
## 226                    2.75 2018-10-01
## 227                    2.87 2018-11-01
## 228                    3.18 2018-12-01
## 229                    0.60 2019-01-01
## 230                    1.18 2019-02-01
## 231                    1.62 2019-03-01
## 232                    2.12 2019-04-01
## 233                    2.44 2019-05-01
## 234                    2.71 2019-06-01
## 235                    2.94 2019-07-01
## 236                    3.03 2019-08-01
## 237                    3.26 2019-09-01
## 238                    3.43 2019-10-01
## 239                    3.54 2019-11-01
## 240                    3.80 2019-12-01
## 241                    0.42 2020-01-01
## 242                    1.09 2020-02-01
## 243                    1.67 2020-03-01
## 244                    1.83 2020-04-01
## 245                    1.50 2020-05-01
## 246                    1.12 2020-06-01
## 247                    1.12 2020-07-01
## 248                    1.12 2020-08-01
## 249                    1.44 2020-09-01
## 250                    1.38 2020-10-01
## 251                    1.23 2020-11-01
## 252                    1.61 2020-12-01
## 253                    0.41 2021-01-01
## 254                    1.05 2021-02-01
## 255                    1.56 2021-03-01
## 256                    2.16 2021-04-01
## 257                    3.18 2021-05-01
## 258                    3.13 2021-06-01
## 259                    3.47 2021-07-01
## 260                    3.93 2021-08-01
## 261                    4.33 2021-09-01
## 262                    4.34 2021-10-01
## 263                    4.86 2021-11-01
## 264                    5.62 2021-12-01
## 265                    1.67 2022-01-01
## 266                    3.33 2022-02-01
## 267                    4.36 2022-03-01
## 268                    5.66 2022-04-01
## 269                    6.55 2022-05-01
## 270                    7.09 2022-06-01
## 271                    7.96 2022-07-01
## 272                    9.06 2022-08-01
## 273                   10.08 2022-09-01
## 274                   10.86 2022-10-01
## 275                   11.72 2022-11-01
## 276                   13.12 2022-12-01
## 277                    1.78 2023-01-01
## 278                    3.47 2023-02-01
## 279                    4.56 2023-03-01
## 280                    5.38 2023-04-01
## 281                    5.83 2023-05-01
## 282                    6.15 2023-06-01
## 283                    6.68 2023-07-01
IPC$valor<-IPC$`Inflación mensual %`
IPC %>%  plot_time_series(Fecha, valor, .interactive = TRUE)

Dividir los datos en conjuntos de entrenamiento y prueba usando initial_time_split()

# Split Data 80/20
splits <- initial_time_split(IPC, prop = 0.9)
splits
## <Training/Testing/Total>
## <254/29/283>
  • crear y ajustar varios modelos

Podemos crear fácilmente varios modelos de pronóstico combinando modeltimey parsnip

  • ARIMA
  • Suavizado exponencial
  • Regresión lineal
  • MARS (Splines de regresión adaptativa multivariada)

Modelo 1: Auto ARIMA (Tiempo de modelo) Primero, creamos un modelo ARIMA univariado básico usando “Auto Arima” usandoarima_reg()

model_fit_arima_no_boost <- arima_reg() %>%
    set_engine(engine = "auto_arima") %>%
    fit(valor ~ Fecha, data = training(splits))
## frequency = 12 observations per 1 year
  • Modelo 2: Auto ARIMA potenciado (Modeltime) A continuación, creamos un ARIMA mejorado usando arima_boost(). Boosting utiliza XGBoost para modelar los errores de ARIMA.

Tenga en cuenta que la fórmula del modelo contiene una característica de fecha y derivados de fecha - ARIMA usa la fecha - XGBoost usa los derivados de fecha como regresores

model_fit_arima_boosted <- arima_boost(
    min_n = 2,
    learn_rate = 0.015
) %>%
    set_engine(engine = "auto_arima_xgboost") %>%
    fit(valor ~ Fecha + as.numeric(Fecha) + factor(month(Fecha, label = TRUE), ordered = F),
        data = training(splits))
## frequency = 12 observations per 1 year
  • Modelo 3: Suavizado exponencial (tiempo modelo) A continuación, cree un modelo de temporada de tendencias de errores (ETS) utilizando un modelo de espacio de estados de suavizado exponencial. Esto se logra con exp_smoothing().
model_fit_ets <- exp_smoothing() %>%
    set_engine(engine = "ets") %>%
    fit(valor ~ Fecha, data = training(splits))
## frequency = 12 observations per 1 year
  • Modelo 4: ProPhet (Modeltime) Crearemos un modelo prophet usando prophet_reg().
model_fit_prophet <- prophet_reg() %>%
    set_engine(engine = "prophet") %>%
    fit(valor ~ Fecha, data = training(splits))
## Disabling weekly seasonality. Run prophet with weekly.seasonality=TRUE to override this.
## Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
  • Paso 3: agregue modelos ajustados a una tabla de modelos.

El siguiente paso es agregar cada uno de los modelos a una tabla Modeltime usando modeltime_table(). Este paso realiza algunas comprobaciones básicas para garantizar que cada uno de los modelos esté ajustado y que se organice en una estructura escalable llamada “Tabla de tiempos del modelo” que se utiliza como parte de nuestro flujo de trabajo de pronóstico.

Disponemos de 4 modelos para añadir. Un par de notas antes de continuar:

Tenga en cuenta que algunos de los modelos tienen parámetros ajustables .

Se espera que el ajuste y la selección de parámetros se realicen antes de incorporarlos a una tabla de tiempo modelo. Si intenta agregar un modelo no adaptado, se modeltime_table()quejará (arrojará un error informativo) diciendo que necesita fit()el modelo.

models_tbl <- modeltime_table(
    model_fit_arima_no_boost,
    model_fit_arima_boosted,
    model_fit_ets,
    model_fit_prophet
    )
models_tbl
## # Modeltime Table
## # A tibble: 4 × 3
##   .model_id .model   .model_desc                                         
##       <int> <list>   <chr>                                               
## 1         1 <fit[+]> ARIMA(2,0,1)(1,1,1)[12] WITH DRIFT                  
## 2         2 <fit[+]> ARIMA(1,0,0)(0,1,2)[12] WITH DRIFT W/ XGBOOST ERRORS
## 3         3 <fit[+]> ETS(A,A,A)                                          
## 4         4 <fit[+]> PROPHET

Paso 4: calibre el modelo en un conjunto de prueba. La calibración agrega una nueva columna, .calibration_datacon las predicciones de prueba y los residuos dentro. Algunas notas sobre la calibración:

La calibración es la forma en que se determinan los intervalos de confianza y las métricas de precisión. Los datos de calibración son simplemente predicciones de pronóstico y residuos que se calculan a partir de datos fuera de la muestra. Después de la calibración, los datos de calibración siguen a los datos a través del flujo de trabajo de pronóstico.

calibration_tbl <- models_tbl %>% modeltime_calibrate(new_data = testing(splits), quiet = FALSE)
calibration_tbl
## # Modeltime Table
## # A tibble: 4 × 5
##   .model_id .model   .model_desc                         .type .calibration_data
##       <int> <list>   <chr>                               <chr> <list>           
## 1         1 <fit[+]> ARIMA(2,0,1)(1,1,1)[12] WITH DRIFT  Test  <tibble [29 × 4]>
## 2         2 <fit[+]> ARIMA(1,0,0)(0,1,2)[12] WITH DRIFT… Test  <tibble [29 × 4]>
## 3         3 <fit[+]> ETS(A,A,A)                          Test  <tibble [29 × 4]>
## 4         4 <fit[+]> PROPHET                             Test  <tibble [29 × 4]>

Paso 5: Pronóstico del conjunto de pruebas y evaluación de la precisión Hay dos partes críticas en una evaluación.

  • Visualización del conjunto de datos de pronóstico frente a prueba
  • Evaluación de la precisión de la prueba (fuera de la muestra)

5A - Visualización de la prueba de pronóstico Visualizar el error de prueba es fácil de hacer usando la visualización gráfica interactiva (simplemente cambie la visibilidad de los modelos usando la Leyenda).

calibration_tbl %>%
    modeltime_forecast(
        new_data    = testing(splits),
        actual_data = IPC
    ) %>%
    plot_modeltime_forecast(
      .legend_max_width = 25, 
      .interactive      = FALSE
    )
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

5B - Métricas de precisión Podemos utilizarlo modeltime_accuracy()para recopilar métricas de precisión comunes. El valor predeterminado informa las siguientes métricas mediante yardstickfunciones:

MAE - Error absoluto medio,mae() MAPE : error porcentual absoluto medio, mape() MASE : error escalado absoluto medio, mase() SMAPE : error porcentual absoluto medio simétrico, smape() RMSE : error cuadrático medio, rmse() RSQ - R cuadrado,rsq() Por supuesto, estos se pueden personalizar siguiendo las reglas para crear nuevas métricas, pero los valores predeterminados son muy útiles. Consulte default_forecast_accuracy_metrics()para obtener más información.

Para facilitar un poco la creación de tablas, he incluido la salida de resultados en tablas table_modeltime_accuracy()interactivas ( reactable) o estáticas ( ).gt

calibration_tbl %>%
    modeltime_accuracy() %>%
    table_modeltime_accuracy(
        .interactive = TRUE
    )
  • Paso 6: reajustar el conjunto de datos completo y pronosticar hacia adelante

El último paso es reajustar los modelos al conjunto de datos completo modeltime_refit()y pronosticarlos.

refit_tbl <- calibration_tbl %>%
    modeltime_refit(data = IPC)
## frequency = 12 observations per 1 year
## frequency = 12 observations per 1 year
## frequency = 12 observations per 1 year
## Disabling weekly seasonality. Run prophet with weekly.seasonality=TRUE to override this.
## Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
refit_tbl %>%
    modeltime_forecast(h = "1 years", actual_data = IPC) %>%
    plot_modeltime_forecast(
      .legend_max_width = 25, # For mobile screens
      .interactive      = TRUE
    )