Forecast (Pronóstico)

Teoría

Definición: Declaración sobre el valor futro de una variable de interés

Ejemplo: Walt Disney World tiene u departamento de 20 personas dedicadas a realizaar pronósticos de visitas para realizar pedidos de bebidas y alimentos.

Lema: Los pronósticos NO son perfectos. No se busca hacer el pronósticos perfectos, sino reducir el margen de error en estos.

Elementos para un mejor pronóstico:

Horizonte de tiempo precisión Confiabilidad Unidades Significativas Simple de alimentar y usar

6 pasos para reaizar un pronóstico:

  1. Determinar el propósito.
  2. Establecer horizonte de tiempo.
  3. Obtener, limpiar y analizar datos apropiados.
  4. Seleccionar tecnica para pronosticar.
  5. Realizamos el pronóstico.
  6. Monitorear el error del pronóstico.

Error: Es la difrencia entre el valor real y el valor del pronóstico: e_t=A_t-F_t

Series de Tiempo: Los pronósticos se observan en Serioes de tiempo Los 5 patrones en las series de tiempo son:

  1. Tendencia

  1. Ciclos

  1. Temporalidad

  1. Irregular

  2. Aleatorio

Series de Tiempo

0. Concepto

Una serie de tiempo es una colección de observaciones sobre un determinado fenómeno efectuadas en momentos de tiempo sucesivos, usualmente equiespaciados.

Ejmplos de series de tiempo son: 1. Precio de acciones. 2. Niveles de inventario 3. Rotación de personal 4. Ventas

1. Instalar paquetes y llamar librerias

# install.packages("forecast")
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo

2. Crear la serie de tiempo

# Paso 1. Obtener los valores dependientes 
produccion <- c(50,53,55,57,55,60)

# Paso 2. Agregar a los valores anterioes su tiempo correspondiente.
serie_de_tiempo <- ts(data=produccion, start = c(2020,1), frequency = 4)
serie_de_tiempo
##      Qtr1 Qtr2 Qtr3 Qtr4
## 2020   50   53   55   57
## 2021   55   60

3. Crear modelo ARIMA

# ARIMA: AutoRegressive Integrated Moving Average o Modelo Autorregresivo Integrado de Media Móvil
# ARIMA (p,d,q)
# p = orden de autoregresion
# d = ordne de integracion (deferenciacion)
# q = orden del promedio movil

# ¿Cuándo se usa?
# Cuando las estimaciones futuras se explicanpor los datos del pasado y no por variables independientes.

# Ejemplo: Tipo de Cambio.


modelo <- auto.arima(serie_de_tiempo, D = 1)
modelo
## Series: serie_de_tiempo 
## ARIMA(0,0,0)(0,1,0)[4] with drift 
## 
## Coefficients:
##        drift
##       1.5000
## s.e.  0.1768
## 
## sigma^2 = 2.01:  log likelihood = -2.84
## AIC=9.68   AICc=-2.32   BIC=7.06
summary(modelo)
## Series: serie_de_tiempo 
## ARIMA(0,0,0)(0,1,0)[4] with drift 
## 
## Coefficients:
##        drift
##       1.5000
## s.e.  0.1768
## 
## sigma^2 = 2.01:  log likelihood = -2.84
## AIC=9.68   AICc=-2.32   BIC=7.06
## 
## Training set error measures:
##                      ME      RMSE       MAE        MPE      MAPE       MASE
## Training set 0.03333332 0.5787923 0.3666667 0.03685269 0.6429133 0.06111111
##                    ACF1
## Training set -0.5073047

4. Realizar el pronóstico

pronostico <- forecast(modelo, level = c(90), h = 5)
pronostico
##         Point Forecast    Lo 90    Hi 90
## 2021 Q3             61 58.66802 63.33198
## 2021 Q4             63 60.66802 65.33198
## 2022 Q1             61 58.66802 63.33198
## 2022 Q2             66 63.66802 68.33198
## 2022 Q3             67 63.70208 70.29792
plot(pronostico)

Banco Mundial

El Banco Mundial (WB) es un organismo multinacional especializado en finanzas. En R se puede acceder a sus indicadores a través de la librería WBI.

1. Instalar paquetes y llamar librerias

#install.packages("WDI")
library(WDI)
#install.packages("wbstats")
library(wbstats)
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
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

2. Crear la serie de tiempo

# Paso 1. Obtener los valores dependientes 



gdp_data <- wb_data(country = "MX", indicator = "NY.GDP.PCAP.CD", start_date = 1973, end_date = 2022)

gdp_data <- gdp_data %>% select("NY.GDP.PCAP.CD")

# Paso 2. Agregar a los valores anterioes su tiempo correspondiente.
serie_de_tiempo <- ts(data=gdp_data, start = c(1973,1), frequency = 1)
serie_de_tiempo
## Time Series:
## Start = 1973 
## End = 2022 
## Frequency = 1 
##       NY.GDP.PCAP.CD
##  [1,]       1000.942
##  [2,]       1264.362
##  [3,]       1499.356
##  [4,]       1470.191
##  [5,]       1315.599
##  [6,]       1600.763
##  [7,]       2039.165
##  [8,]       3036.355
##  [9,]       3810.310
## [10,]       2612.680
## [11,]       2166.577
## [12,]       2506.900
## [13,]       2607.669
## [14,]       1765.264
## [15,]       1902.462
## [16,]       2302.022
## [17,]       2759.476
## [18,]       3196.920
## [19,]       3756.853
## [20,]       4272.788
## [21,]       5778.908
## [22,]       5976.494
## [23,]       4002.159
## [24,]       4487.263
## [25,]       5370.245
## [26,]       5555.712
## [27,]       6230.697
## [28,]       7232.911
## [29,]       7613.143
## [30,]       7650.932
## [31,]       7120.372
## [32,]       7525.487
## [33,]       8321.860
## [34,]       9125.388
## [35,]       9719.928
## [36,]      10119.821
## [37,]       8104.923
## [38,]       9399.965
## [39,]      10341.500
## [40,]      10376.090
## [41,]      10865.687
## [42,]      11076.134
## [43,]       9753.401
## [44,]       8875.082
## [45,]       9434.378
## [46,]       9857.007
## [47,]      10145.153
## [48,]       8654.997
## [49,]      10045.676
## [50,]      11091.305

3. Crear modelo ARIMA

# ARIMA: AutoRegressive Integrated Moving Average o Modelo Autorregresivo Integrado de Media Móvil
# ARIMA (p,d,q)
# p = orden de autoregresion
# d = ordne de integracion (deferenciacion)
# q = orden del promedio movil

# ¿Cuándo se usa?
# Cuando las estimaciones futuras se explicanpor los datos del pasado y no por variables independientes.

# Ejemplo: Tipo de Cambio.


modelo <- auto.arima(serie_de_tiempo, seasonal = FALSE)
modelo
## Series: serie_de_tiempo 
## ARIMA(0,1,0) with drift 
## 
## Coefficients:
##          drift
##       205.9258
## s.e.  111.6272
## 
## sigma^2 = 623290:  log likelihood = -395.92
## AIC=795.84   AICc=796.1   BIC=799.62
summary(modelo)
## Series: serie_de_tiempo 
## ARIMA(0,1,0) with drift 
## 
## Coefficients:
##          drift
##       205.9258
## s.e.  111.6272
## 
## sigma^2 = 623290:  log likelihood = -395.92
## AIC=795.84   AICc=796.1   BIC=799.62
## 
## Training set error measures:
##                      ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.01590031 773.5364 547.5453 -1.915675 11.61656 0.8423204
##                    ACF1
## Training set 0.01264199

4. Realizar el pronóstico

pronostico <- forecast(modelo, level = c(95), h = 5)
pronostico
##      Point Forecast    Lo 95    Hi 95
## 2023       11297.23 9749.865 12844.60
## 2024       11503.16 9314.850 13691.46
## 2025       11709.08 9028.965 14389.20
## 2026       11915.01 8820.275 15009.74
## 2027       12120.93 8660.917 15580.95
plot(pronostico)