es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

forecasting Pronóstico de series de tiempo con Fable en R; determinación de la combinación más óptima de modelos para el pronóstico de modelos mixtos.

Estoy realizando análisis de pronóstico de series temporales con los paquetes fable y fabletools y me interesa comparar la precisión de modelos individuales y un modelo mixto (consistente en los modelos individuales que estoy utilizando).

Aquí hay un ejemplo de código con un marco de datos simulado:

“`library(fable)
library(fabletools)
library(distributional)
library(tidyverse)
library(imputeTS)

Creando un marco de datos simulado

set.seed(1)

Fecha <- seq(as.Date(“2018-01-01”), as.Date(“2021-03-19”), by = “1 day”)

Cuenta <- rnorm(length(Fecha), mean = 2086, sd= 728)

Cuenta <- round(Cuenta)

df <- data.frame(Fecha, Cuenta)

df

Repitiendo con un nuevo modelo

df$Cuenta <- abs(df$Cuenta) # en caso de que haya valores negativos, forzarlos a ser absolutos

count_data <- as_tsibble(df)

count_data <- imputeTS::na.mean(count_data)

testfrac <- count_data %>% arrange(Fecha) %>% sample_frac(0.8)

lastdate <- last(testfrac$Fecha)

datosentrenamiento

train <- count_data %>%
filter(Fecha <= as.Date(lastdate))
set.seed(1)
fit <- train %>%
model(
ets = ETS(Cuenta),
arima = ARIMA(Cuenta),
snaive = SNAIVE(Cuenta),
croston = CROSTON(Cuenta),
ave = MEAN(Cuenta),
naive = NAIVE(Cuenta),
neural = NNETAR(Cuenta),
lm = TSLM(Cuenta ~ trend() + season())
) %>%
mutate(mixed = (ets + arima + snaive + croston + ave + naive + neural + lm) / 8) # crea un modelo combinado utilizando el promedio de todos los modelos individuales

fc <- fit %>% forecast(h = 7)

accuracy(fc, count_data)

fc_accuracy <- accuracy(fc, count_data,
measures = list(
point_accuracy_measures,
interval_accuracy_measures,
distribution_accuracy_measures
)
)

fc_accuracy

Quiero ser capaz de probar todas las posibles combinaciones de modelos individuales y devolver el modelo mixto con el rendimiento más óptimo en una de las métricas de precisión, por ejemplo, el Error Absoluto Medio (MAE). Pero no estoy seguro de cómo hacer esto de manera automatizada ya que hay muchas posibles combinaciones.

¿Puede alguien sugerir o compartir un código sobre cómo podría hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque para encontrar el modelo mixto óptimo sería utilizar un algoritmo de búsqueda en grilla para probar todas las posibles combinaciones de modelos individuales y comparar sus métricas de rendimiento. Aquí hay un código de ejemplo que demuestra este enfoque:

    “`{r}
    library(purrr)

    define a list of individual models

    models_list <- list(
    ets = ETS(Count),
    arima = ARIMA(Count),
    snaive = SNAIVE(Count),
    croston= CROSTON(Count),
    ave=MEAN(Count),
    naive=NAIVE(Count),
    neural=NNETAR(Count),
    lm=TSLM(Count ~ trend()+season())
    )

    define a function to return accuracy of mixed models for each combination of models

    get_mixed_model_accuracy <- function(model_list){ mixed_model <- model_list %>% reduce(+) / length(model_list)
    fc <- mixed_model %>% forecast(h = 7)
    accuracy(fc, count_data)[“MAE”, “Test”]
    }

    calculate the performance metric (MAE) for all possible combinations of models using grid search

    combinations <- map_dbl(seq_along(models_list), ~ combn(models_list, .x, simplify = FALSE)) %>%
    flatten()
    comb_acc <- map_dbl(combinations, get_mixed_model_accuracy)

    find the optimal combination that results in the lowest MAE

    optimal_comb <- combinations[[which.min(comb_acc)]] optimal_mixed_model <- optimal_comb %>% reduce(+) / length(optimal_comb)

    print the optimal combination and its accuracy on the test set

    print(paste(“Combinación óptima:”, names(optimal_comb)))
    print(paste(“MAE del modelo mixto óptimo:”, comb_acc[which.min(comb_acc)]))
    “`

    Este código define una lista de modelos individuales y luego define una función que toma una lista de modelos y devuelve el MAE del modelo mixto que los combina. Luego usa map_dbl para aplicar esta función a todas las posibles combinaciones de modelos utilizando combn, y almacena las métricas de rendimiento resultantes en comb_acc. Finalmente, encuentra la combinación óptima seleccionando la combinación con el menor MAE y construye el modelo mixto correspondiente. La salida de este código muestra la combinación óptima y su precisión en el conjunto de prueba.

Comments are closed.