Los datos del archivo adjunto corresponden a datos reales de ventas de dos de productos. A partir del análisis de la serie de tiempo identifique la técnica apropiada de forecast y calcule el forecast de los siguientes 12 periodos para cada uno de los productos y haga un breve análisis de los resultados.
Si prefieren también pueden usar datos de productos o servicios de su empresa
Publique sus resultados en RPubs con el procedimiento que desarrolló, sus resultados y análisis. Comparta el vínculo de la publicación en el campo disponible
En el archivo hay datos de los siguientes productos:
## Warning: package 'tidyverse' was built under R version 3.6.2
## Warning: package 'tibble' was built under R version 3.6.3
## Warning: package 'forecast' was built under R version 3.6.2
## Warning: package 'readxl' was built under R version 3.6.2
## Warning: package 'imputeTS' was built under R version 3.6.3
Cafe <- read_excel("CAFE_DIARIO.xlsx", col_names = FALSE )
## New names:
## * `` -> ...1
Cafe_ts <- ts(Cafe, frequency = 7,start = c(1,1), end = c(52,1))#
Tamales <- read_excel("TAMALES.xlsx", col_names = FALSE)
## New names:
## * `` -> ...1
## * `` -> ...2
## * `` -> ...3
Tamales_ts <- ts(Tamales[3], frequency = 12, start = c(2015,1))
Lo primero que haremos es un análisis descriptivo de la Serie de Tiempo de Café, para ello trazaremos las gráficas correspondientes a la serie, sus descomposición estacional la función de auntocorrelación y y las sub series
autoplot(Cafe_ts)+
ylab("Demanda de Café diario")+
ggtitle("Serie de tiempo de la Demanda de Café Diaria")
autoplot(mstl(Cafe_ts))
ggAcf(Cafe_ts)
ggsubseriesplot(Cafe_ts)
De los gráficos de la serie de Demanda de Café Diaria, se observa los siguiente:
Al igual que hicimos con la Demanda Diaria de Café , trazaremos las gráficas correspondientes a la serie de la Demada de Tamales. las gráficas que trazaremos, serán: la descomposición estacional la función de auntocorrelación y y las sub series
autoplot(Tamales_ts)+
ylab("Demanda Mensual de Tamales")+
ggtitle("Serie de tiempo de la Demanda Mensual de Tamales")
autoplot(mstl(Tamales_ts))
ggAcf(Tamales_ts)
ggsubseriesplot(Tamales_ts)
En cuanto a la serie de Demanda Mensual de Tamales, al hacer el análisis descriptivo podemos concluir:
Haremos los modelos en el siguieten orde: * Suavizamiento Exponencial Doble (SED) * Suavizamiento Exponencial Triple (SET) * Modelos de espacio de estado (ETS)
# Modelo SED
Cafe_SED <- holt(Cafe_ts, h=12, level = .95)
summary(Cafe_SED)
##
## Forecast method: Holt's method
##
## Model Information:
## Holt's method
##
## Call:
## holt(y = Cafe_ts, h = 12, level = 0.95)
##
## Smoothing parameters:
## alpha = 4e-04
## beta = 4e-04
##
## Initial states:
## l = 15.7038
## b = 0.0218
##
## sigma: 7.7631
##
## AIC AICc BIC
## 3578.564 3578.735 3597.967
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -0.2545881 7.719593 6.020645 -Inf Inf 0.8660847 0.1704491
##
## Forecasts:
## Point Forecast Lo 95 Hi 95
## 52.14286 14.56121 -0.6541553 29.77657
## 52.28571 14.54254 -0.6728283 29.75791
## 52.42857 14.52388 -0.6915088 29.73926
## 52.57143 14.50521 -0.7101999 29.72062
## 52.71429 14.48654 -0.7289043 29.70199
## 52.85714 14.46787 -0.7476253 29.68337
## 53.00000 14.44921 -0.7663657 29.66478
## 53.14286 14.43054 -0.7851286 29.64621
## 53.28571 14.41187 -0.8039169 29.62766
## 53.42857 14.39321 -0.8227336 29.60915
## 53.57143 14.37454 -0.8415818 29.59066
## 53.71429 14.35587 -0.8604645 29.57221
errores_Cafe_SED <- residuals(Cafe_SED)
checkresiduals(errores_Cafe_SED)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.
autoplot(Cafe_SED) + autolayer(fitted(Cafe_SED))
Cafe_SED_accuracy <- accuracy(Cafe_SED)
Se observa que las predicciones están alrededor de 17 unidades con un intervalo de confianza al 95% muy amplio (entre 2 y 32 unidades).
Los errores parecen no ser un ruido blanco, al ver tanto el su gráfico, como el de autocorrelación estos tienden as salide de los límites de confianza sistemáticanmente> Otro elemento es que al ver la distribución de los errores se está tiende a estar sesgada hacia la izquierda no estando centrada en cero y alejandose de la distribución normal.
Al ver el gráfico de las predicciones, se obesrva que el modelo SED no recoge la estacionalidad de la serie, la tendencia si la modela bien
# Modelo SET
Cafe_SET <- hw(Cafe_ts, h=12, level = .95)
summary(Cafe_SET)
##
## Forecast method: Holt-Winters' additive method
##
## Model Information:
## Holt-Winters' additive method
##
## Call:
## hw(y = Cafe_ts, h = 12, level = 0.95)
##
## Smoothing parameters:
## alpha = 0.0479
## beta = 1e-04
## gamma = 2e-04
##
## Initial states:
## l = 13.3807
## b = 0.0041
## s = 10.7587 -5.5179 -3.9637 -2.4771 -2.041 -1.5875
## 4.8285
##
## sigma: 5.818
##
## AIC AICc BIC
## 3378.907 3379.811 3425.473
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.01145474 5.727948 4.595494 -Inf Inf 0.661073 0.1819252
##
## Forecasts:
## Point Forecast Lo 95 Hi 95
## 52.14286 14.99501 3.5918826 26.39813
## 52.28571 14.55034 3.1341116 25.96657
## 52.42857 14.11674 2.6873667 25.54611
## 52.57143 12.63429 1.1917346 24.07685
## 52.71429 11.08475 -0.3710353 22.54053
## 52.85714 27.36232 15.8932781 38.83137
## 53.00000 21.44357 9.9612234 32.92592
## 53.14286 15.02689 3.5311095 26.52266
## 53.28571 14.58222 3.0730599 26.09138
## 53.42857 14.14862 2.6260363 25.67120
## 53.57143 12.66617 1.1301259 24.20222
## 53.71429 11.11662 -0.4329222 22.66617
errores_Cafe_SET <- residuals(Cafe_SET)
checkresiduals(errores_Cafe_SET)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.
autoplot(Cafe_SET) + autolayer(fitted(Cafe_SET))
Cafe_SET_accuracy <- accuracy(Cafe_SET)
Se observa que las predicciones presentan no tienen un valor constante, sino que varían recogiendo la el efecto estacional de la serie de tiempo y lo hacen en un rango menor para los intervalos de confianza al 95%
Aunque la gráfica de autocorrelación de los errores presenta valores que ciclicamente se salen de los límites de confianza, la distribución de estos si parece estar centrada alrededor del cero (0), aunque aun son un poco sesgados hacia la izquierda.
Al ver el gráfico de las predicciones, se obesrva que el modelo SET recoge en parte la estacionalidad la estacionalidad de la serie, así como la tendencia de la misma.
# Modelo ETS
Cafe_ETS <- ets(Cafe_ts)
summary(Cafe_ETS)
## ETS(A,N,A)
##
## Call:
## ets(y = Cafe_ts)
##
## Smoothing parameters:
## alpha = 1e-04
## gamma = 1e-04
##
## Initial states:
## l = 17.1761
## s = 10.6427 -5.4262 -4.2528 -2.621 -1.6816 -1.8542
## 5.1931
##
## sigma: 5.7334
##
## AIC AICc BIC
## 3366.473 3367.107 3405.278
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -0.05701634 5.660874 4.562954 -Inf Inf 0.6563922 0.2061525
Cafe_ETS_FOR <- forecast(Cafe_ETS, h=12)
Cafe_ETS_FOR
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 52.14286 15.31951 7.971864 22.66716 4.0822540 26.55677
## 52.28571 15.49155 8.143904 22.83920 4.2542945 26.72881
## 52.42857 14.55389 7.206245 21.90154 3.3166349 25.79115
## 52.57143 12.92277 5.575121 20.27042 1.6855108 24.16003
## 52.71429 11.74703 4.399382 19.09468 0.5097720 22.98429
## 52.85714 27.81442 20.466772 35.16207 16.5771618 39.05168
## 53.00000 22.36679 15.019140 29.71444 11.1295298 33.60405
## 53.14286 15.31951 7.971863 22.66716 4.0822533 26.55677
## 53.28571 15.49155 8.143904 22.83920 4.2542939 26.72881
## 53.42857 14.55389 7.206244 21.90154 3.3166342 25.79115
## 53.57143 12.92277 5.575120 20.27042 1.6855101 24.16003
## 53.71429 11.74703 4.399382 19.09468 0.5097714 22.98429
errores_Cafe_ETS <- residuals(Cafe_ETS)
checkresiduals(errores_Cafe_ETS)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.
autoplot(Cafe_ETS_FOR) + autolayer(fitted(Cafe_ETS_FOR))
Cafe_ETS_accuracy <- accuracy(Cafe_ETS)
El modelo que sugiere es el siguiente: ETS(A,N,A), es decir un modelo con Error aditivo, sin Tendencia y con estacionalidad aditiva. Las predicciones realizadas por el modelo se encuentran en in intervalo de confiana con un rango menor que en los casos anteriores.
La distribución de los errores se ajusta bastante a una normal centrada en cero, aun se aprecia como se salen algunas autocorrelaciones de los errores de los límites de confianza del intervalo.
En cuando a la gráfica de las predicciones, estás paracen recoger los efectos estacionales de la demanda de café diaria
print(paste0("El AIC Para el Modelo SED es: ",as.character(round(Cafe_SED_accuracy[3],3))))
## [1] "El AIC Para el Modelo SED es: 6.021"
print(paste0("El AIC Para el Modelo SET es: ",as.character(round(Cafe_SET_accuracy[3],3))))
## [1] "El AIC Para el Modelo SET es: 4.595"
print(paste0("El AIC Para el Modelo ETS es: ",as.character(round(Cafe_ETS_accuracy[3],3))))
## [1] "El AIC Para el Modelo ETS es: 4.563"
Al evaluar los AIC de los tres modelos, se puede ver que elmejor modelo es el ETS(A,N,A), ya que preenta el menor valor del AIC con 4.563
Haremos los modelos en el siguieten orde: * Suavizamiento Exponencial Doble (SED) * Suavizamiento Exponencial Triple (SET) * Modelos de espacio de estado (ETS)
# Modelo SED
Tamales_SED <- holt(Tamales_ts, h=12, level = .95)
summary(Cafe_SED)
##
## Forecast method: Holt's method
##
## Model Information:
## Holt's method
##
## Call:
## holt(y = Cafe_ts, h = 12, level = 0.95)
##
## Smoothing parameters:
## alpha = 4e-04
## beta = 4e-04
##
## Initial states:
## l = 15.7038
## b = 0.0218
##
## sigma: 7.7631
##
## AIC AICc BIC
## 3578.564 3578.735 3597.967
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -0.2545881 7.719593 6.020645 -Inf Inf 0.8660847 0.1704491
##
## Forecasts:
## Point Forecast Lo 95 Hi 95
## 52.14286 14.56121 -0.6541553 29.77657
## 52.28571 14.54254 -0.6728283 29.75791
## 52.42857 14.52388 -0.6915088 29.73926
## 52.57143 14.50521 -0.7101999 29.72062
## 52.71429 14.48654 -0.7289043 29.70199
## 52.85714 14.46787 -0.7476253 29.68337
## 53.00000 14.44921 -0.7663657 29.66478
## 53.14286 14.43054 -0.7851286 29.64621
## 53.28571 14.41187 -0.8039169 29.62766
## 53.42857 14.39321 -0.8227336 29.60915
## 53.57143 14.37454 -0.8415818 29.59066
## 53.71429 14.35587 -0.8604645 29.57221
errores_Tamales_SED <- residuals(Tamales_SED)
checkresiduals(errores_Tamales_SED)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.
autoplot(Tamales_SED) + autolayer(fitted(Tamales_SED))
Tamales_SED_accuracy <- accuracy(Tamales_SED)
Al observar los resultados del modelo SED se observa que el mismo produce predicciones negatias en el límite inferrior del intevalo de confianzas, lo cual no tiene sentido desde el punto de vista del producto que se evalúa, mientras que las estimaciones puntuales practiamente no varian de 14 unidades por mes, cuando en la realidad este producto no tiene ese comportamiento.
Los residuos no siguen una distribución normal, ni siquiera están centrados en cero.
al ver el gráfico de las predicciones, bien estas recogen la tendencia creciente, no hacen lo mismo con las variaciones estacionales que tienen los datos.
# Modelo SET
Tamales_SET <- hw(Tamales_ts, h=12, level = .95)
summary(Tamales_SET)
##
## Forecast method: Holt-Winters' additive method
##
## Model Information:
## Holt-Winters' additive method
##
## Call:
## hw(y = Tamales_ts, h = 12, level = 0.95)
##
## Smoothing parameters:
## alpha = 0.0657
## beta = 1e-04
## gamma = 0.9343
##
## Initial states:
## l = 45010.5255
## b = 682.5689
## s = 42262.26 -3787.482 -2568.108 6142.475 -2499.036 9988.144
## 3256.771 2043.198 -6565.473 6626.172 -9402.424 -45496.5
##
## sigma: 13703.21
##
## AIC AICc BIC
## 565.1999 652.6285 585.9208
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -1024.351 8221.928 5341.026 -0.7492906 11.86823 0.8479476
## ACF1
## Training set -0.2011276
##
## Forecasts:
## Point Forecast Lo 95 Hi 95
## Feb 2017 43926.56 17068.75 70784.37
## Mar 2017 53820.28 26904.34 80736.21
## Apr 2017 53761.43 26787.31 80735.54
## May 2017 56616.47 29584.12 83648.82
## Jun 2017 73526.21 46435.58 100616.84
## Jul 2017 59367.23 32218.27 86516.19
## Aug 2017 58182.23 30974.89 85389.57
## Sep 2017 69202.23 41936.45 96468.00
## Oct 2017 59685.45 32361.19 87009.71
## Nov 2017 67683.28 40300.48 95066.07
## Dec 2017 100514.62 73073.24 127955.99
## Jan 2018 57511.09 30011.08 85011.11
errores_Tamales_SET <- residuals(Tamales_SET)
checkresiduals(errores_Tamales_SET)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.
autoplot(Tamales_SET) + autolayer(fitted(Tamales_SET))
Tamales_SET_accuracy <- accuracy(Tamales_SET)
El modelo SET parece ajustarse mejor a los datos y producir predicciones que tienen más sentido desde el punto de vista del producto que se estudia.
Los errores muestra una distribución con mucha dispersión, y no centrada en cero, no se ajustan a una distribución normal.
El observar el gráfico de las predicciones se tiene que el mismo muestra las mejoras del modelo en el sentido que se toman en cuenta, tanto la tendencia como los movimientos estacionales de la serie original.
# Modelo ETS
Tamales_ETS <- ets(Tamales_ts)
summary(Tamales_ETS)
## ETS(M,N,N)
##
## Call:
## ets(y = Tamales_ts)
##
## Smoothing parameters:
## alpha = 0.1895
##
## Initial states:
## l = 42554.0262
##
## sigma: 0.3079
##
## AIC AICc BIC
## 564.9825 566.1253 568.6391
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 3522.876 14696.92 9879.66 1.515717 17.43614 1.568506 -0.2123752
Tamales_ETS_FOR <- forecast(Tamales_ETS, h=12)
Tamales_ETS_FOR
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Feb 2017 59247.94 35866.81 82629.07 23489.58 95006.30
## Mar 2017 59247.94 35411.39 83084.49 22793.08 95702.80
## Apr 2017 59247.94 34963.00 83532.88 22107.33 96388.55
## May 2017 59247.94 34521.25 83974.63 21431.74 97064.14
## Jun 2017 59247.94 34085.80 84410.08 20765.76 97730.12
## Jul 2017 59247.94 33656.30 84839.58 20108.91 98386.97
## Aug 2017 59247.94 33232.47 85263.41 19460.72 99035.16
## Sep 2017 59247.94 32814.03 85681.85 18820.76 99675.12
## Oct 2017 59247.94 32400.71 86095.17 18188.65 100307.23
## Nov 2017 59247.94 31992.29 86503.59 17564.02 100931.87
## Dec 2017 59247.94 31588.53 86907.35 16946.52 101549.36
## Jan 2018 59247.94 31189.24 87306.64 16335.86 102160.02
errores_Tamales_ETS <- residuals(Tamales_ETS)
checkresiduals(errores_Tamales_ETS)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.
autoplot(Tamales_ETS_FOR) + autolayer(fitted(Tamales_ETS_FOR))
Tamales_ETS_accuracy <- accuracy(Tamales_ETS)
El Modelo que sugiere es el siguiente ETS(M,N,N), es decir con componente de error Multiplicativo, sin tendendencia y sin estacionalidad, este modelo a la luz del comportamiento de los datos no parece ser muy adecuado, recordemos que al hacer la descomposición de la serie, esta mostró tanto tendencia como estacionalidad.
Es probable que por ser la estacionalidad de los datos de 12 meses y dado que el tamaño de la misma es de 25 observaciones (solo dos años) esta poca cantidad de observaciones esté afectando las estimaciones del modelo, y no pueda modelar correctamente la naturaleza de la serie
Los Errores en nada siguen un distribución normal, parece más bien una distribución bimodal y no simétrica.
Al observar el gráfico de las predicciones se nota que las mismas empeoran en comparación con el modelo anterior
print(paste0("El AIC Para el Modelo SED es: ",as.character(round(Tamales_SED_accuracy[3],3))))
## [1] "El AIC Para el Modelo SED es: 9505.529"
print(paste0("El AIC Para el Modelo SET es: ",as.character(round(Tamales_SET_accuracy[3],3))))
## [1] "El AIC Para el Modelo SET es: 5341.026"
print(paste0("El AIC Para el Modelo ETS es: ",as.character(round(Tamales_ETS_accuracy[3],3))))
## [1] "El AIC Para el Modelo ETS es: 9879.66"
Al evaluar los AIC de los tres modelos, se puede ver que el mejor modelo es el de Suavizamiento Exponencial Triple (SET), ya que preenta el menor valor del AIC con 5441.026