Introducción

En este análisis, exploraremos dos tipos de promedios móviles: centrado y causal, aplicándolos tanto a una serie temporal generada artificialmente como a una serie real (CONELDO.ts). Evaluaremos cómo diferentes órdenes de promedios móviles afectan la suavización de la serie, y realizaremos una proyección a futuro utilizando estos métodos. Finalmente, compararemos estos métodos con un promedio móvil ponderado.

Generación de Valores y Ejemplos Iniciales

Primero, generamos una secuencia de valores usando la función coseno. Esta serie artificial nos permitirá ilustrar los conceptos de promedio móvil centrado y causal.

x <- 10 * cos(1:6)
plot(x, type = 'l', main = "Serie Generada Artificialmente", ylab = "Valores", xlab = "Índice")

Promedio Móvil Causal

El promedio móvil causal toma en cuenta únicamente los valores anteriores al punto actual. Esto es útil para análisis en tiempo real donde no se tienen datos futuros.

ma_causal <- filter(x, rep(1/3, 3), sides = 1)
plot(x, type = 'l', main = "Promedio Móvil Causal", ylab = "Valores", xlab = "Índice")
lines(ma_causal, col = "red", lwd = 2)

Promedio Móvil Centrado

El promedio móvil centrado utiliza valores anteriores y posteriores al punto actual, lo que proporciona una mejor suavización al costo de requerir datos futuros.

ma_centrado <- filter(x, rep(1/3, 3), sides = 2)
plot(x, type = 'l', main = "Promedio Móvil Centrado", ylab = "Valores", xlab = "Índice")
lines(ma_centrado, col = "green", lwd = 2)

Aplicación a la Serie Temporal CONELDO.ts

Ahora aplicamos estos conceptos a una serie temporal real (CONELDO.ts). Esta serie representa datos mensuales y se analizarán utilizando promedios móviles de diferentes órdenes.

CONELDO <- c(2861, 2833, 2686, 2798, 3123, 3232, 3377, 3545, 3558, 3275, 3079, 2792, 
             2825, 2769, 2655, 2735, 2996, 3282, 3594, 3544, 3633, 3422, 3220, 2859, 
             2998, 3062, 2907, 3012, 3349, 3537, 3688, 3632, 3792, 3608, 3274, 3049, 
             2999, 2990, 2983, 3068, 3279, 3440, 3636, 3670, 3835, 3605, 3436, 3126, 
             3126, 3120, 2905, 2992, 3272, 3524, 3732, 3807, 3793, 3631, 3481, 3203, 
             3230, 3176, 3005, 3119, 3382, 3543, 3820, 3985, 3950, 3743, 3512, 3211, 
             3229, 3212, 3043, 3188, 3483, 3678, 3896, 4142, 4190, 4063, 3847, 3482, 
             3415, 3330, 3063, 3284, 3677, 3964, 4211, 4296, 4310, 4142, 3858, 3591, 
             3371, 3331, 3297, 3396, 3753, 3967, 4322, 4341, 4398, 4213, 3867, 3509)

CONELDO.ts <- ts(CONELDO, start = c(2009, 1), frequency = 12)
plot(CONELDO.ts, main = "Serie Temporal CONELDO", ylab = "Valores", xlab = "Tiempo")

Promedio Móvil Causal en CONELDO.ts

Aplicamos un promedio móvil causal de orden 3 y 5 a la serie temporal para observar cómo afecta la suavización.

ma_causal_3 <- filter(CONELDO.ts, rep(1/3, 3), sides = 1)
ma_causal_5 <- filter(CONELDO.ts, rep(1/12, 12), sides = 1)

plot(CONELDO.ts, type = "l", col = "blue", lwd = 2, main = "Promedio Móvil Causal en CONELDO.ts", ylab = "Valores", xlab = "Tiempo")
lines(ma_causal_3, col = "red", lwd = 2)
lines(ma_causal_5, col = "green", lwd = 2)
legend("topright", legend = c("Original", "Causal 3", "Causal 12"), col = c("blue", "red", "green"), lwd = 2)

Promedio Móvil Centrado en CONELDO.ts

Ahora aplicamos un promedio móvil centrado de orden 3 y 5 para comparar los efectos de la suavización.

ma_centrado_3 <- filter(CONELDO.ts, rep(1/3, 3), sides = 2)
ma_centrado_5 <- filter(CONELDO.ts, rep(1/5, 5), sides = 2)

plot(CONELDO.ts, type = "l", col = "blue", lwd = 2, main = "Promedio Móvil Centrado en CONELDO.ts", ylab = "Valores", xlab = "Tiempo")
lines(ma_centrado_3, col = "red", lwd = 2)
lines(ma_centrado_5, col = "green", lwd = 2)
legend("topright", legend = c("Original", "Centrado 3", "Centrado 5"), col = c("blue", "red", "green"), lwd = 2)

Análisis y Proyección de un Año

A medida que aumentamos el orden del promedio móvil, observamos una mayor suavización, lo que puede ser útil para identificar tendencias a largo plazo. Usaremos un promedio móvil de orden 12 para hacer una proyección de la serie temporal hacia el próximo año.

library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
ma_centrado_12 <- filter(CONELDO.ts, rep(1/12, 12), sides = 1)
forecast_ma <- forecast(ma_centrado_12, h = 12)
## Warning in ets(object, lambda = lambda, biasadj = biasadj,
## allow.multiplicative.trend = allow.multiplicative.trend, : Missing values
## encountered. Using longest contiguous portion of time series
plot(forecast_ma, main = "Proyección de un Año con Promedio Móvil Centrado de Orden 12")

library(forecast)
ma_centrado_12 <- ma(CONELDO.ts, order=12, centre=FALSE)
forecast_ma <- forecast(ma_centrado_12, h = 12)
## Warning in ets(object, lambda = lambda, biasadj = biasadj,
## allow.multiplicative.trend = allow.multiplicative.trend, : Missing values
## encountered. Using longest contiguous portion of time series
plot(forecast_ma, main = "Proyección de un Año con Promedio Móvil Centrado de Orden 12")

Promedio Móvil Ponderado

Finalmente, aplicamos un promedio móvil ponderado, que asigna más peso a ciertos valores, como los más recientes.

Aplicación y Comparación

Usamos un promedio ponderado con coeficientes definidos para suavizar la serie CONELDO.ts y compararlo con los promedios móviles simples.

ma_ponderado <- filter(CONELDO.ts, c(0.1, 0.2, 0.4, 0.2, 0.1), sides = 2)

plot(CONELDO.ts, type = "l", col = "blue", lwd = 2, main = "Promedio Móvil Ponderado en CONELDO.ts", ylab = "Valores", xlab = "Tiempo")
lines(ma_ponderado, col = "purple", lwd = 2)
legend("topright", legend = c("Original", "Ponderado"), col = c("blue", "purple"), lwd = 2)

Suavización exponencial

# Definir diferentes valores de alpha
alphas <- c(0.1, 0.6, 0.9)


par(mfrow = c(3, 1))  # Configurar la disposición de gráficos en 3 filas

for (alpha in alphas) {
  # Crear el modelo de suavización exponencial simple
  model <- ses(CONELDO.ts, alpha = alpha)
  
  # Obtener los valores suavizados
  valores_suavizados <- fitted(model)
  
  # Graficar la serie original y la suavizada
  plot(CONELDO.ts, type = "l", col = "blue", lwd = 2, main = paste("Suavización Exponencial Simple con Alpha =", alpha),
       ylab = "Valores", xlab = "Tiempo")
  lines(valores_suavizados, col = "red", lwd = 2)
  legend("topright", legend = c("Original", paste("Alpha =", alpha)), col = c("blue", "red"), lwd = 2)
}

alpha = 0.6
model_ses <- ses(CONELDO.ts, alpha = alpha, h=24)
model_ses
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2018       3715.693 3376.196 4055.191 3196.477 4234.910
## Feb 2018       3715.693 3319.775 4111.612 3110.188 4321.199
## Mar 2018       3715.693 3270.447 4160.940 3034.747 4396.639
## Apr 2018       3715.693 3226.063 4205.323 2966.869 4464.518
## May 2018       3715.693 3185.381 4246.005 2904.651 4526.735
## Jun 2018       3715.693 3147.605 4283.781 2846.878 4584.509
## Jul 2018       3715.693 3112.189 4319.197 2792.714 4638.673
## Aug 2018       3715.693 3078.740 4352.647 2741.557 4689.830
## Sep 2018       3715.693 3046.961 4384.426 2692.955 4738.431
## Oct 2018       3715.693 3016.625 4414.761 2646.561 4784.825
## Nov 2018       3715.693 2987.552 4443.834 2602.098 4829.289
## Dec 2018       3715.693 2959.597 4471.790 2559.343 4872.043
## Jan 2019       3715.693 2932.638 4498.748 2518.114 4913.273
## Feb 2019       3715.693 2906.578 4524.809 2478.258 4953.129
## Mar 2019       3715.693 2881.330 4550.056 2439.645 4991.741
## Apr 2019       3715.693 2856.825 4574.561 2402.168 5029.219
## May 2019       3715.693 2833.000 4598.387 2365.730 5065.656
## Jun 2019       3715.693 2809.801 4621.585 2330.251 5101.136
## Jul 2019       3715.693 2787.182 4644.205 2295.658 5135.729
## Aug 2019       3715.693 2765.100 4666.286 2261.887 5169.499
## Sep 2019       3715.693 2743.521 4687.866 2228.883 5202.503
## Oct 2019       3715.693 2722.409 4708.977 2196.597 5234.790
## Nov 2019       3715.693 2701.738 4729.649 2164.982 5266.404
## Dec 2019       3715.693 2681.479 4749.907 2133.999 5297.387
plot(model_ses)

Aquí tienes una versión mejorada del análisis, con comentarios, mejor estructura y gráficos más detallados para explicar el modelo de doble suavización exponencial (Holt) y el modelo de Holt-Winters, que considera la variabilidad estacional.

En este análisis, exploraremos dos modelos clave de suavización exponencial:

  1. Modelo de Holt (Doble Suavización Exponencial): Este modelo es una extensión del suavizado exponencial simple, que incorpora un componente de tendencia. Los estimadores de este modelo son lineales y se ajustan en función de la última tendencia observada.

  2. Modelo de Holt-Winters (Suavización Exponencial Triple): Este modelo añade un componente estacional a los estimadores del nivel y la tendencia, y se ajusta a la variabilidad estacional observada en la serie temporal. Es útil cuando los datos presentan un comportamiento periódico o estacional claro.

Doble Suavización Exponencial: Modelo de Holt

El modelo de Holt es útil cuando la serie temporal tiene una tendencia lineal clara pero no muestra estacionalidad. En este caso, la suavización tiene en cuenta tanto el nivel actual como la tendencia, ajustándose de forma más dinámica a los cambios en la serie.

Implementación del Modelo de Holt

# Cargar la librería forecast
library(forecast)

# Aplicar el modelo de Holt con valores especificados de alpha (nivel) y beta (tendencia)
model_holt <- holt(CONELDO.ts, alpha = 0.5, beta = 0.3)

# Resumen del modelo
summary(model_holt)
## 
## Forecast method: Holt's method
## 
## Model Information:
## Holt's method 
## 
## Call:
## holt(y = CONELDO.ts, alpha = 0.5, beta = 0.3)
## 
##   Smoothing parameters:
##     alpha = 0.5 
##     beta  = 0.3 
## 
##   Initial states:
##     l = 2655.9857 
##     b = 28.3545 
## 
##   sigma:  342.1966
## 
##      AIC     AICc      BIC 
## 1768.037 1768.268 1776.084 
## 
## Error measures:
##                     ME     RMSE      MAE       MPE     MAPE     MASE      ACF1
## Training set -10.69909 335.7999 291.8981 -0.069916 8.482855 2.669291 0.7633772
## 
## Forecasts:
##          Point Forecast      Lo 80    Hi 80      Lo 95    Hi 95
## Jan 2018      3449.1411  3010.5985 3887.684  2778.4480 4119.834
## Feb 2018      3130.8452  2569.2366 3692.454  2271.9390 3989.751
## Mar 2018      2812.5493  2072.2042 3552.895  1680.2891 3944.810
## Apr 2018      2494.2535  1532.4544 3456.053  1023.3087 3965.198
## May 2018      2175.9576   959.0511 3392.864   314.8598 4037.055
## Jun 2018      1857.6617   357.6151 3357.708  -436.4616 4151.785
## Jul 2018      1539.3658  -268.2599 3346.992 -1225.1592 4303.891
## Aug 2018      1221.0699  -916.1226 3358.262 -2047.4839 4489.624
## Sep 2018       902.7740 -1584.1920 3389.740 -2900.7122 4706.260
## Oct 2018       584.4781 -2271.1047 3440.061 -3782.7589 4951.715
# Graficar la serie original y el modelo de Holt
plot(model_holt, main = "Modelo de Doble Suavización Exponencial (Holt)",
     ylab = "Valores", xlab = "Tiempo", col = "blue", lwd = 2)
legend("topright", legend = c("Original", "Holt Suavizado"), col = c("blue", "red"), lwd = 2)

Análisis del Modelo de Holt

El modelo de Holt ajusta la serie teniendo en cuenta la tendencia observada en los datos. Los estimadores de nivel y tendencia son lineales, lo que significa que predicen el siguiente valor en la serie basado en la tendencia más reciente. El valor de alpha (0.5) controla el grado de suavización en el nivel actual, mientras que beta (0.3) ajusta la suavización de la tendencia.

Este modelo es útil en series con una tendencia clara pero sin estacionalidad.

Suavización Exponencial Triple: Modelo de Holt-Winters

El modelo de Holt-Winters extiende el enfoque de Holt al incorporar un componente estacional, lo que lo hace especialmente útil para series temporales que presentan un comportamiento periódico o estacional.

Implementación del Modelo de Holt-Winters

En este caso, no especificamos manualmente los parámetros de suavización (alpha, beta y gamma), permitiendo que el modelo ajuste automáticamente los mejores valores.

# Aplicar el modelo de Holt-Winters con estacionalidad
modelHW <- hw(CONELDO.ts)

# Resumen del modelo
summary(modelHW)
## 
## Forecast method: Holt-Winters' additive method
## 
## Model Information:
## Holt-Winters' additive method 
## 
## Call:
## hw(y = CONELDO.ts)
## 
##   Smoothing parameters:
##     alpha = 0.9063 
##     beta  = 1e-04 
##     gamma = 1e-04 
## 
##   Initial states:
##     l = 3101.2897 
##     b = 4.5258 
##     s = -256.3512 47.6607 281.8348 481.424 431.6302 360.58
##            135.2489 -60.8888 -356.7509 -467.7165 -314.623 -282.0482
## 
##   sigma:  69.9758
## 
##      AIC     AICc      BIC 
## 1439.954 1446.754 1485.550 
## 
## Error measures:
##                    ME     RMSE      MAE        MPE    MAPE      MASE
## Training set 1.843688 64.58476 49.51952 0.04156305 1.44218 0.4528361
##                     ACF1
## Training set 0.009876195
## 
## Forecasts:
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2018       3494.363 3404.685 3584.040 3357.213 3631.513
## Feb 2018       3466.333 3345.299 3587.367 3281.227 3651.439
## Mar 2018       3317.793 3171.991 3463.596 3094.808 3540.779
## Apr 2018       3433.305 3266.365 3600.246 3177.992 3688.619
## May 2018       3733.719 3548.026 3919.412 3449.726 4017.711
## Jun 2018       3934.410 3731.688 4137.132 3624.373 4244.447
## Jul 2018       4164.292 3945.859 4382.724 3830.228 4498.355
## Aug 2018       4239.889 4006.799 4472.979 3883.409 4596.369
## Sep 2018       4294.234 4047.352 4541.116 3916.660 4671.808
## Oct 2018       4099.195 3839.247 4359.142 3701.639 4496.750
## Nov 2018       3869.565 3597.175 4141.956 3452.980 4286.150
## Dec 2018       3570.104 3285.812 3854.396 3135.317 4004.891
## Jan 2019       3548.973 3253.252 3844.694 3096.707 4001.239
## Feb 2019       3520.943 3214.219 3827.668 3051.848 3990.038
## Mar 2019       3372.404 3055.054 3689.754 2887.059 3857.749
## Apr 2019       3487.916 3160.282 3815.549 2986.843 3988.988
## May 2019       3788.329 3450.722 4125.936 3272.003 4304.655
## Jun 2019       3989.021 3641.723 4336.318 3457.875 4520.166
## Jul 2019       4218.902 3862.176 4575.628 3673.336 4764.468
## Aug 2019       4294.500 3928.584 4660.415 3734.881 4854.119
## Sep 2019       4348.844 3973.963 4723.726 3775.513 4922.176
## Oct 2019       4153.805 3770.165 4537.445 3567.078 4740.532
## Nov 2019       3924.176 3531.969 4316.382 3324.348 4524.003
## Dec 2019       3624.714 3224.123 4025.306 3012.063 4237.366
# Graficar la serie original y el modelo de Holt-Winters
plot(modelHW, main = "Modelo Holt-Winters (Aditivo)",
     ylab = "Valores", xlab = "Tiempo", col = "blue", lwd = 2)
legend("topright", legend = c("Original", "Holt-Winters Suavizado"), col = c("blue", "red"), lwd = 2)

Análisis del Modelo Holt-Winters

En el modelo Holt-Winters, el componente estacional se adapta a la variabilidad observada en los datos. El modelo suaviza los valores de la serie original utilizando tres componentes:

  1. Nivel (alpha): Controla cómo se suavizan los valores actuales.
  2. Tendencia (beta): Ajusta la suavización de la tendencia de la serie.
  3. Estacionalidad (gamma): Considera la variabilidad estacional.

En este caso, los valores de alpha, beta y gamma son optimizados automáticamente por el modelo. La adición de estacionalidad permite capturar ciclos recurrentes en los datos, haciendo este modelo más robusto cuando hay patrones periódicos.

Ejercicios

De las preguntas anteriores, selecciona 3 preguntas y resuélvelas. Asegúrate de justificar tu elección del método y de los parámetros de suavización o modelos de tendencia, y explica cómo estos modelos se ajustan al comportamiento de la serie temporal. Entendido. A continuación te presento un conjunto de preguntas más prácticas y con contexto aplicado, como el de una aseguradora o una empresa financiera, con ejemplos de gráficos de suavización y resultados. He incluido el código en R para simular datos y crear las visualizaciones, como solicitaste:

Pregunta 1: Análisis de Siniestros Mensuales

Contexto:
Una aseguradora tiene el número de siniestros mensuales durante los últimos 5 años y quiere identificar la tendencia de su portafolio, ajustando las fluctuaciones estacionales que se presentan cada año.

Pregunta:
¿Qué método de suavización exponencial utilizarías para identificar la tendencia actual y ajustar las fluctuaciones estacionales en el número de siniestros? Justifica tu respuesta.

Pregunta 2: Predicción de Ventas Mensuales

Contexto:
Una cadena de supermercados quiere predecir las ventas mensuales de sus productos durante el próximo año. Las ventas históricas muestran tanto una tendencia creciente como fluctuaciones estacionales debido a las ventas en periodos festivos.

Pregunta:
¿Qué modelo de suavización exponencial aplicarías para predecir las ventas del próximo año, considerando tanto la tendencia como la estacionalidad? Justifica tu respuesta.

Pregunta 3: Proyección de Acciones

Contexto:
Una empresa financiera está analizando el comportamiento de las acciones de una empresa tecnológica durante los últimos años. La empresa quiere proyectar los precios de las acciones para los próximos 12 meses, teniendo en cuenta solo la tendencia

Pregunta:
¿Qué método utilizarías para proyectar el precio de las acciones en los próximos 12 meses? Explica por qué elegiste ese método.

Ejemplo 4:

Contexto: La empresa X quiere resumir la información de ventas de sus productos. El gerente menciona que las ventas que ocurrieron hace un año atrás son más importantes para la predicción de la demanda futura debido a la temporalidad del mercado. Quieren aplicar un modelo que asigne más peso a las observaciones del año pasado y menos a las recientes.

Pregunta: ¿Qué modelo utilizarías para ajustar este tipo de series temporales? Justifica tu respuesta y aplica un modelo de promedio ponderado para reflejar la preferencia del gerente.

Ejemplo 5

Contexto: Una empresa de manufactura quiere analizar las fluctuaciones de sus costos operativos en los últimos meses. El gerente desea un modelo que tome en cuenta todas las observaciones, pero que le dé menos importancia a las observaciones actuales, ya que las condiciones actuales son inusuales y no representan una tendencia real.

Pregunta: ¿Qué método de suavización exponencial simple usarías para ajustarte a este enfoque? Justifica tu elección y muestra cómo se vería la serie suavizada.