Função ETS (), como evitar previsões não alinhadas com dados históricos?

16

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? insira a descrição da imagem aqui

mehdik
fonte
Esta é uma das previsões mais estranhas que já me deparei 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ásico etse ver se obtém os mesmos resultados?
meteorologista
Muito obrigado pelo seu tempo e resposta! Concordo com você: o fato de que o último ponto pode ser visto como "discrepante" (21 vs 7 ou 6 ou 5 no ano anterior) Ele pode ser detectado usando intervalo de confiança com base em dados anteriores e deve estar limpo antes de calcular um previsão estatística. Mas se assumirmos que se trata de uma venda "normale", existe uma maneira de evitar esse comportamento limitando a previsão ou pelo menos ser avisado de que a previsão é duas vezes maior que a história? Os limites alfa, beta e gama não são relevantes nesse caso. Mais uma vez, muito obrigado pela sua ajuda neste ponto!
MehdiK
Votei sua resposta, agora presumo que você possa deixar comentários. No futuro, deixe o comentário diretamente abaixo de uma resposta para que as pessoas que responderem o notem. Obrigado
forecaster
O ETS e todos os modelos de séries temporais univariadas pressupõem que o comportamento passado preveja o comportamento futuro. Se houver algum ponto de dados anormal , será necessário informar o modelo de que existe uma anomalia. O modelo não saberá que o valor é normal; você precisa especificar no modelo que o valor é mais externo.
meteorologista

Respostas:

10

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:

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

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:

fit2 <- ets(train_ts, upper=c(0.3,0.2,0.2,0.98))  
plot(forecast(fit2))

insira a descrição da imagem aqui

Rob Hyndman
fonte
qual é a previsão :: auto.arima equivalente à sua segunda sugestão para lidar com discrepâncias?
Equilíbrio Brash
1
Com os modelos ARIMA, é possível lidar com outliers com variáveis ​​dummy configuradas como 1 nos momentos problemáticos. Basta usar o argumento xreg em auto.arima ou Arima.
precisa
6

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:

values.clean <- 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)## Last two points removed

train_ts.clean<- ts(values.clean, frequency=12)
fit2.clean<-ets(train_ts.clean)  
ets.f.clean <- forecast(fit2.clean,h=24)
plot(ets.f.clean)

insira a descrição da imagem aqui

previsor
fonte
5

@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:

insira a descrição da imagem aquiAs estatísticas do modelo final estão aqui insira a descrição da imagem aquiO gráfico Real / Ajuste e Previsão é interessante, pois destaca a atividade excepcional.insira a descrição da imagem aqui

IrishStat
fonte
Marcar com +1 suas respostas são sempre educativas e esclarecedoras. Eu entendo pulso e tempo, é efeitos fixos modelo puramente determinístico?
previsor
@forecaster Sim, efeitos fixos / pulsos sazonais são puramente destrutivos ... assim como pulsos / mudanças de nível e tendências da hora local. Além disso, o mês de agosto (8) não foi significativo e não estava na lista final.
precisa saber é o seguinte