Pronósticos con métodos benchmark
1 Train/test
Vamos a hacer pronósticos a 3 años, por lo que necesitamos dejar los últimos 3 años como el conjunto de test.
Code
gas_train <- aus_production |>
filter_index(. ~ "2007 Q2")
gas_train2 Visualize
Code
gas_train |>
autoplot(Gas)Intentamos estabilizar la varianza con logaritmos.
Parece que todavía no es completamente estable (ahora al inicio la varianza es mayor).
Probemos con Box-Cox:
Code
gas_lambda <- gas_train |>
features(Gas, guerrero) |>
pull()
gas_lambda[1] 0.1037006
Code
gas_train |>
autoplot(box_cox(Gas, gas_lambda))Parece que mejora un poco.
2.1 Descomposición STL
Vamos a separar la serie transformada usando STL.
Code
gas_train |>
model(
stl = STL(box_cox(Gas, gas_lambda), robust = TRUE)
) |>
components() |>
autoplot()3 Especificación de modelos
Primero vamos a probar los 4 modelos benchmark por separado, y posteriormente vamos a crear un modelo a partir de la descomposición que hicimos arriba.
Code
gas_fit <- gas_train |>
model(
media = MEAN(box_cox(Gas, gas_lambda)),
naive = NAIVE(box_cox(Gas, gas_lambda)),
snaive = SNAIVE(box_cox(Gas, gas_lambda)),
drift = RW(box_cox(Gas, gas_lambda) ~ drift())
)
gas_fit4 Evaluación
Code
Code
4.1 Pronóstico a partir de descomposición
Code
gas_fit_stl <- gas_train |>
model(
stlf = decomposition_model(
STL(box_cox(Gas, gas_lambda), robust = TRUE),
SNAIVE(season_year),
RW(season_adjust ~ drift())
)
)
gas_fit_stlCode
gas_fit_todos <- gas_train |>
model(
media = MEAN(box_cox(Gas, gas_lambda)),
naive = NAIVE(box_cox(Gas, gas_lambda)),
snaive = SNAIVE(box_cox(Gas, gas_lambda)),
drift = RW(box_cox(Gas, gas_lambda) ~ drift()),
stlf = decomposition_model(
STL(box_cox(Gas, gas_lambda), robust = TRUE),
SNAIVE(season_year),
RW(season_adjust ~ drift())
)
)5 Pronóstico
Code
gas_fc_todos <- gas_fit_todos |>
forecast(h = "3 years")
gas_fc_todosCode
gas_fc_todos |>
autoplot(aus_production) +
facet_wrap(vars(.model), scales = "free_y")Code
gas_fc_todos |>
autoplot(aus_production, level = NULL, linewidth = 1)5.1 Métricas de error (Accuracy)
Code
gas_fc_todos |>
accuracy(aus_production) |>
arrange(RMSE)El mejor modelo parece ser el SNAIVE. Vamos a utilizar este para hacer el pronóstico final.
Code
aus_production |>
model(
snaive = SNAIVE(box_cox(Gas, gas_lambda))
) |>
forecast(h = "3 years") |>
autoplot(aus_production)








