Questo è un post lungo, quindi spero che tu possa sopportare con me, e per favore correggimi dove sbaglio.
Il mio obiettivo è produrre una previsione giornaliera basata su 3 o 4 settimane di dati storici.
I dati sono dati di 15 minuti del carico locale di una delle linee di un trasformatore. Ho problemi a trovare l'ordine del modello di un processo ARIMA stagionale. Considera le serie temporali della domanda di elettricità:
Serie storiche originali http://i.share.pho.to/80d86574_l.png
Quando le prime 3 settimane vengono prese come sottoinsieme e differenziate, vengono calcolati i seguenti diagrammi ACF / PACF:
Sottoinsieme http://i.share.pho.to/5c165aef_l.png
Prima differenza http://i.share.pho.to/b7300cc2_l.png
Differenza stagionale e prima http://i.share.pho.to/570c5397_l.png
Sembra che la serie sia un po 'stazionaria. Ma la stagionalità potrebbe anche essere settimanale (vedi Settimana differenza stagionale e differenze secondo ordine [qui] http://share.pho.to/3owoq , cosa ne pensi?)
Quindi concludiamo che il modello prende forma di:
Nell'ultima figura un picco distinto al ritardo 96 indica un componente stagionale MA (1) (forse AR (1) potrebbe anche essere presente in quanto vi è un picco distinto anche in PACF). I picchi al ritardo 1: 4 indicano un componente MA (4) che corrisponde al decadimento esponenziale nel PACF con un po 'di immaginazione. Pertanto, il modello iniziale selezionato manualmente potrebbe essere:
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**
La funzione auto.arima calcola il seguente modello (con stepwise e approssimazione su TRUE, altrimenti ci vuole troppo tempo per convergere):
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**
Ciò significa che non viene applicata alcuna differenziazione stagionale. Ecco i residui di entrambi i modelli. La statistica di Ljung Box fornisce un valore p molto piccolo, indicando che è ancora presente un'autocorrelazione (? Correggimi se sbaglio).
previsione
Pertanto, per determinare quale sia il migliore, un test di precisione fuori campione è quindi il migliore. Quindi per entrambi i modelli viene fatta una previsione con 24 ore di anticipo che viene confrontata tra loro. I risultati sono: auto.arima http://i.share.pho.to/5d1dd934_l.png modello manuale 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
Manuale
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
Domande
Come puoi pensare, questa è un'analisi delle prime tre settimane di un set di dati. Sto lottando nella mia mente con le seguenti domande:
- Come faccio a selezionare il miglior modello ARIMA (provando tutti i diversi ordini e controllando il miglior MASE / MAPE / MSE? In cui la selezione della misurazione delle prestazioni può essere una discussione a sé stante ..)
- Se generi un nuovo modello e previsioni per ogni nuova previsione giornaliera (come nelle previsioni online), devo tenere conto dell'andamento annuale e come? (come in un sottoinsieme così piccolo, la mia ipotesi sarebbe che la tendenza è neglible)
- Ti aspetteresti che l'ordine del modello rimanga lo stesso per tutto il set di dati, vale a dire quando prendere un altro sottoinsieme mi darà lo stesso modello?
- Qual è un buon modo, all'interno di questo metodo, per far fronte alle vacanze? O è necessario ARIMAX con manichini natalizi esterni per questo?
- Devo usare l'approccio della serie di Fourier per provare i modelli
seasonality=672
come discusso in Lunghi periodi stagionali ? - In tal caso sarebbe come
fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)
(dove la funzione fourier è come definita nel post del blog di Hyndman) - I componenti P e Q iniziali sono inclusi con la serie Fourier?
La maggior parte delle conoscenze teoriche ottenute da FPP , grandi cose!
Prima di consigliare sull'uso del livellamento esponenziale o della regressione lineare (dinamica) si sta lavorando anche a questo confronto.
Dati
https://www.dropbox.com/sh/mzx61sskya5ze6x/Zq3A7Q6htH/trafo.txt
Codice
data<-read.csv("file", sep=";")
load<-data[,3]
Ho rimosso i pochi valori zero con i valori della settimana precedente
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))
È anche possibile pubblicare un esempio riproducibile, ma ciò renderà il post ancora più lungo, ma possibile se necessario. Quindi, se c'è qualcosa che dovrei fornire, per favore fatemelo sapere.