Dies ist ein langer Beitrag, also hoffe ich, dass Sie ihn mit mir tragen können, und bitte korrigieren Sie mich, wo ich falsch liege.
Mein Ziel ist es, eine tägliche Prognose auf der Grundlage von historischen Daten für 3 oder 4 Wochen zu erstellen.
Die Daten sind 15-Minuten-Daten der lokalen Last einer der Transformatorleitungen. Ich habe Probleme, die Modellreihenfolge eines saisonalen ARIMA-Prozesses zu finden. Betrachten Sie die Zeitreihen des Strombedarfs:
Ursprüngliche Zeitreihe http://i.share.pho.to/80d86574_l.png
Wenn die ersten 3 Wochen als Teilmenge genommen und differenziert werden, werden die folgenden ACF / PACF-Diagramme berechnet:
Subset http://i.share.pho.to/5c165aef_l.png
Erster Unterschied http://i.share.pho.to/b7300cc2_l.png
Saisonale und erste Differenz http://i.share.pho.to/570c5397_l.png
Dies sieht aus wie die Serie ist ein bisschen stationär. Die Saisonalität kann aber auch wöchentlich sein (siehe Unterschiede zwischen Saisonalitätswoche und zweiter Ordnung [hier] http://share.pho.to/3owoq , was denkst du?)
Lassen Sie uns also folgern, dass das Modell folgende Form :
In der letzten Abbildung weist ein deutlicher Anstieg bei Lag 96 auf eine saisonale MA (1) -Komponente hin (möglicherweise könnte AR (1) ebenso gut sein wie ein deutlicher Anstieg bei PACF). Die Spitzen bei Verzögerung 1: 4 zeigen eine MA (4) -Komponente an, die mit ein wenig Phantasie einem exponentiellen Abfall in der PACF entspricht. Das ursprünglich manuell ausgewählte Modell könnte also sein:
mit
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**
Die auto.arima-Funktion berechnet das folgende Modell (mit schrittweiser Annäherung an TRUE, andernfalls dauert die Konvergenz zu lange):
with
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**
Dies bedeutet, dass keine saisonalen Unterschiede angewendet werden. Hier sind die Residuen der beiden Modelle. Die Ljung-Box-Statistik gibt einen sehr kleinen p-Wert an, der anzeigt, dass immer noch eine Autokorrelation vorliegt (korrigieren Sie mich, wenn ich falsch liege).
Vorhersage
Um herauszufinden, was besser ist, ist ein Genauigkeitstest außerhalb der Stichprobe am besten. Daher wird für beide Modelle eine Prognose erstellt, die 24 Stunden im Voraus erstellt und miteinander verglichen wird. Die Ergebnisse sind: auto.arima http://i.share.pho.to/5d1dd934_l.png manual model 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
Handbuch
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
Fragen
Wie Sie sich vorstellen können, handelt es sich hierbei um eine Analyse der ersten drei Wochen eines Datensatzes. Ich habe mit den folgenden Fragen zu kämpfen:
- Wie wähle ich das beste ARIMA-Modell aus (indem ich alle verschiedenen Aufträge ausprobiere und das beste MASE / MAPE / MSE prüfe? Die Auswahl der Leistungsmessung kann eine Diskussion für sich sein.)
- Wenn ich (wie bei der Online-Vorhersage) für jede neue Tagesprognose ein neues Modell und eine neue Prognose erstelle, muss ich dann den jährlichen Trend berücksichtigen und wie? (wie bei einer so kleinen Teilmenge würde ich vermuten, dass der Trend vernachlässigbar ist)
- Würden Sie erwarten, dass die Modellreihenfolge während des gesamten Datensatzes gleich bleibt, dh wenn Sie eine andere Teilmenge nehmen, erhalte ich dann dasselbe Modell?
- Was ist ein guter Weg, um im Rahmen dieser Methode mit Feiertagen umzugehen? Oder wird dafür ARIMAX mit externen Feiertagsdummys benötigt?
- Muss ich den Fourier-Reihenansatz verwenden, um Modelle zu
seasonality=672
testen, die in Lange saisonale Perioden beschrieben wurden ? - Wenn ja, würde dies so aussehen
fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)
(wobei die Fourier-Funktion wie in Hyndmans Blog-Post definiert ist). - Sind erste P- und Q-Komponenten in der Fourier-Reihe enthalten?
Das meiste theoretische Wissen von FPP , großartiges Zeug!
Bevor auf die Verwendung der exponentiellen Glättung oder der (dynamischen) linearen Regression hingewiesen wird, wird ebenfalls an einem Vergleich gearbeitet.
Daten
https://www.dropbox.com/sh/mzx61sskya5ze6x/Zq3A7Q6htH/trafo.txt
Code
data<-read.csv("file", sep=";")
load<-data[,3]
Die wenigen Nullwerte habe ich mit Woche vor Werten entfernt
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))
Es ist auch möglich, ein reproduzierbares Beispiel zu posten, aber dies verlängert den Beitrag, ist jedoch bei Bedarf möglich. Wenn es also etwas gibt, das ich bereitstellen sollte, lassen Sie es mich bitte wissen.