Este é um post longo, então espero que você possa me acompanhar e, por favor, corrija-me onde estiver errado.
Meu objetivo é produzir uma previsão diária com base em 3 ou 4 semanas de dados históricos.
Os dados são dados de 15 minutos da carga local de uma das linhas de um transformador. Estou tendo problemas para encontrar a ordem do modelo de um processo ARIMA sazonal. Considere a série temporal da demanda de eletricidade:
Séries cronológicas originais http://i.share.pho.to/80d86574_l.png
Quando as três primeiras semanas são tomadas como subconjunto e diferenciadas, os seguintes gráficos ACF / PACF são calculados:
Subconjunto http://i.share.pho.to/5c165aef_l.png
Primeira diferença http://i.share.pho.to/b7300cc2_l.png
Sazonal e primeira diferença http://i.share.pho.to/570c5397_l.png
Parece que a série é meio estacionária. Mas a sazonalidade também pode ser semanal (consulte Diferenças sazonais na semana e diferenças de segunda ordem [aqui] http://share.pho.to/3owoq , o que você acha?)
Então, vamos concluir que o modelo assume a forma de:
Na última figura, um pico distinto no atraso 96 indica um componente MA (1) sazonal (talvez AR (1) possa ser tão bom quanto existe um pico distinto no PACF também). Os picos no atraso 1: 4 indicam um componente MA (4) que corresponde à deterioração exponencial no PACF com um pouco de imaginação. Assim, o modelo inicial selecionado manualmente poderia ser:
com
Series: x
ARIMA(0,1,4)(0,1,1)[96]
Coefficients:
ma1 ma2 ma3 ma4 sma1
-0.2187 -0.2233 -0.0996 -0.0983 -0.9796
s.e. 0.0231 0.0234 0.0257 0.0251 0.0804
sigma^2 estimated as 364612: log likelihood=-15138.91
**AIC=30289.82 AICc=30289.87 BIC=30323.18**
A função auto.arima calcula o seguinte modelo (com stepwise e aproximação em TRUE, caso contrário, leva muito tempo para convergir):
com
Series: x
ARIMA(1,1,1)(2,0,2)[96]
Coefficients:
ar1 ma1 sar1 sar2 sma1 sma2
0.7607 -1.0010 0.4834 0.4979 -0.3369 -0.4168
s.e. 0.0163 0.0001 0.0033 0.0116 0.0216 0.0255
sigma^2 estimated as 406766: log likelihood=-15872.02
**AIC=31744.99 AICc=31745.05 BIC=31784.25**
O que significa que nenhuma diferença sazonal é aplicada. Aqui estão os resíduos dos dois modelos. A estatística Ljung Box fornece um valor p muito pequeno, indicando que ainda existe alguma autocorrelação presente (? Corrija-me se estiver errado).
Previsão
Assim, para determinar qual é o melhor, um teste de precisão fora da amostra é o melhor. Portanto, para ambos os modelos, é feita uma previsão 24 horas à frente, que é comparada entre si. Os resultados são: auto.arima http://i.share.pho.to/5d1dd934_l.png modelo manual http://i.share.pho.to/7ca69c97_l.png
Auto:
ME RMSE MAE MPE MAPE MASE ACF1 Theil's U
Training set -2.586653 606.3188 439.1367 -1.284165 7.599403 0.4914563 -0.01219792 NA
Test set -330.144797 896.6998 754.0080 -7.749675 13.268985 0.8438420 0.70219229 1.617834
Manual
ME RMSE MAE MPE MAPE MASE ACF1 Theil's U
Training set 2.456596e-03 589.1267 435.6571 -0.7815229 7.509774 0.4875621 -0.002034122 NA
Test set 2.878919e+02 919.7398 696.0593 3.4756363 10.317420 0.7789892 0.731013599 1.281764
Questões
Como você pode pensar nisso, há uma análise nas três primeiras semanas de um conjunto de dados. Estou lutando mentalmente com as seguintes perguntas:
- Como seleciono o melhor modelo ARIMA (tentando todas as ordens diferentes e verificando o melhor MASE / MAPE / MSE? Onde a seleção da medição de desempenho pode ser uma discussão por si só ..)
- Se eu gerar um novo modelo e uma previsão para cada nova previsão do dia (como na previsão on-line), preciso levar em consideração a tendência anual e como? (como em um subconjunto tão pequeno, acho que a tendência é negligenciável)
- Você esperaria que a ordem do modelo permaneça a mesma durante todo o conjunto de dados, ou seja, ao fazer outro subconjunto, isso me dará o mesmo modelo?
- Qual é uma boa maneira, nesse método, de lidar com feriados? Ou o ARIMAX com manequins de férias externos é necessário para isso?
- Preciso usar a abordagem da série Fourier para experimentar modelos
seasonality=672
como discutido em períodos sazonais longos ? - Nesse caso, seria assim
fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)
(onde a função fourier é como definida na postagem do blog de Hyndman) - Os componentes P e Q iniciais estão incluídos na série fourier?
A maioria dos conhecimentos teóricos obtidos no FPP , ótimas coisas!
Antes de aconselhar sobre o uso de suavização exponencial ou regressão linear (dinâmica), isso também está sendo trabalhado para comparar.
Dados
https://www.dropbox.com/sh/mzx61sskya5ze6x/Zq3A7Q6htH/trafo.txt
Código
data<-read.csv("file", sep=";")
load<-data[,3]
Eu removi os poucos valores zero com a semana antes dos valores
stepback<-672
load[is.na(load)] <- 0 # Assumed no 0's in first 672 values!
idx <- which(load == 0)
idx <- idx[which(idx>stepback)]
load[idx] <- load[idx-stepback]
ED<-ts(load,start=0, end=c(760,96),frequency=96)
x<-window(ED,start=0, end=c(20,96))
Também é possível postar um exemplo reproduzível, mas isso tornará a postagem ainda mais longa, mas possível se necessário. Portanto, se houver algo que eu deva fornecer, entre em contato.