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.
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")
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)
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)
CONELDO.tsAhora 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")
CONELDO.tsAplicamos 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)
CONELDO.tsAhora 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)
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")
Finalmente, aplicamos un promedio móvil ponderado, que asigna más peso a ciertos valores, como los más recientes.
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)
# 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:
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.
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.
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.
# 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)
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.
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.
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)
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:
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.
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:
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.
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.
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.
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.
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.