Estou trabalhando em um alogoritmo em R para automatizar um cálculo de previsão mensal. Estou usando, entre outros, a função ets () do pacote de previsão para calcular a previsão. Está funcionando muito bem.
Infelizmente, para algumas séries temporais específicas, o resultado que recebo é estranho.
Por favor, encontre abaixo o código que estou usando:
train_ts<- ts(values, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL,
phi=NULL, additive.only=FALSE, lambda=TRUE,
lower=c(0.0001,0.0001,0.0001,0.8),upper=c(0.9999,0.9999,0.9999,0.98),
opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3,
bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
restrict=TRUE)
ets <- forecast(fit2,h=forecasthorizon,method ='ets')
Por favor, você encontrará abaixo o conjunto de dados do histórico em questão:
values <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21,
35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36,
29, 29, 24, 42, 15, 24, 21)
Aqui, no gráfico, você verá os dados históricos (preto), o valor ajustado (verde) e a previsão (azul). A previsão definitivamente não está alinhada com o valor ajustado.
Você tem alguma idéia de como "vincular" o forecat a estar "alinhado" com as vendas históricas?
ets
. A média / nível dos dados históricos é de cerca de 20 e a média / nível da previsão é de cerca de 50. Não sabe ao certo por que isso aconteceria? você pode executar um básicoets
e ver se obtém os mesmos resultados?Respostas:
Como a @forecaster apontou, isso é causado por discrepâncias no final da série. Você pode ver claramente o problema se plotar o componente de nível estimado por cima:
Observe o aumento no nível no final da série.
Uma maneira de tornar o modelo mais robusto para os outliers é reduzir o espaço dos parâmetros para que os parâmetros de suavização precisem de valores menores:
fonte
Este é o caso de ter discrepâncias no final da série e suas conseqüências não intencionais. O problema com seus dados é que os dois últimos pontos são discrepantes ; convém identificar e tratar discrepantes antes de executar os algoritmos de previsão. Atualizarei minha resposta e análise ainda hoje em algumas estratégias para identificar discrepâncias. Abaixo está a atualização rápida.
Quando executo novamente as redes com os dois últimos pontos de dados removidos, recebo uma previsão razoável. Por favor veja abaixo:
fonte
@forecastervocê está certo de que o último valor é um valor externo, mas o período 38 (o penúltimo valor) não é um valor externo quando você leva em consideração as tendências e a atividade sazonal. Este é um momento de definição / ensino para testar / avaliar abordagens alternativas robustas. Se você não identificar e ajustar anomalias, a variação será inflada, fazendo com que outros itens não sejam encontrados. O período 32 também é um desvio. Os períodos 3,32 e 1 também são outliers. Há uma tendência estatisticamente significativa na série para os 17 primeiros valores, mas diminui a partir daí a partir do período 18. Portanto, existem realmente duas tendências nos dados. A lição a ser aprendida aqui é que abordagens simples que não assumem tendência ou uma forma específica de tendência e / ou assumem tacitamente que uma forma específica do processo auto-regressivo precisam ser seriamente questionadas. No futuro, uma boa previsão deve considerar a possível continuação da atividade excepcional encontrada no ponto final (período 39). É impossível extrair isso dos dados.
Este é um modelo possivelmente útil:
As estatísticas do modelo final estão aqui O gráfico Real / Ajuste e Previsão é interessante, pois destaca a atividade excepcional.
fonte