R-Zeitreihenprognose mit neuronalen Netzen, auto.arima und ets

10

Ich habe ein bisschen über die Verwendung neuronaler Netze zur Vorhersage von Zeitreihen gehört.

Wie kann ich vergleichen, welche Methode zur Vorhersage meiner Zeitreihen (tägliche Einzelhandelsdaten) besser ist: auto.arima (x), ets (x) oder nnetar (x).

Ich kann auto.arima mit ets von AIC oder BIC vergleichen. Aber wie kann ich sie mit neuronalen Netzen vergleichen?

Zum Beispiel:

   > dput(x)
 c(1774, 1706, 1288, 1276, 2350, 1821, 1712, 1654, 1680, 1451, 
 1275, 2140, 1747, 1749, 1770, 1797, 1485, 1299, 2330, 1822, 1627, 
 1847, 1797, 1452, 1328, 2363, 1998, 1864, 2088, 2084, 594, 884, 
 1968, 1858, 1640, 1823, 1938, 1490, 1312, 2312, 1937, 1617, 1643, 
 1468, 1381, 1276, 2228, 1756, 1465, 1716, 1601, 1340, 1192, 2231, 
 1768, 1623, 1444, 1575, 1375, 1267, 2475, 1630, 1505, 1810, 1601, 
 1123, 1324, 2245, 1844, 1613, 1710, 1546, 1290, 1366, 2427, 1783, 
 1588, 1505, 1398, 1226, 1321, 2299, 1047, 1735, 1633, 1508, 1323, 
 1317, 2323, 1826, 1615, 1750, 1572, 1273, 1365, 2373, 2074, 1809, 
 1889, 1521, 1314, 1512, 2462, 1836, 1750, 1808, 1585, 1387, 1428, 
 2176, 1732, 1752, 1665, 1425, 1028, 1194, 2159, 1840, 1684, 1711, 
 1653, 1360, 1422, 2328, 1798, 1723, 1827, 1499, 1289, 1476, 2219, 
 1824, 1606, 1627, 1459, 1324, 1354, 2150, 1728, 1743, 1697, 1511, 
 1285, 1426, 2076, 1792, 1519, 1478, 1191, 1122, 1241, 2105, 1818, 
 1599, 1663, 1319, 1219, 1452, 2091, 1771, 1710, 2000, 1518, 1479, 
 1586, 1848, 2113, 1648, 1542, 1220, 1299, 1452, 2290, 1944, 1701, 
 1709, 1462, 1312, 1365, 2326, 1971, 1709, 1700, 1687, 1493, 1523, 
 2382, 1938, 1658, 1713, 1525, 1413, 1363, 2349, 1923, 1726, 1862, 
 1686, 1534, 1280, 2233, 1733, 1520, 1537, 1569, 1367, 1129, 2024, 
 1645, 1510, 1469, 1533, 1281, 1212, 2099, 1769, 1684, 1842, 1654, 
 1369, 1353, 2415, 1948, 1841, 1928, 1790, 1547, 1465, 2260, 1895, 
 1700, 1838, 1614, 1528, 1268, 2192, 1705, 1494, 1697, 1588, 1324, 
 1193, 2049, 1672, 1801, 1487, 1319, 1289, 1302, 2316, 1945, 1771, 
 2027, 2053, 1639, 1372, 2198, 1692, 1546, 1809, 1787, 1360, 1182, 
 2157, 1690, 1494, 1731, 1633, 1299, 1291, 2164, 1667, 1535, 1822, 
 1813, 1510, 1396, 2308, 2110, 2128, 2316, 2249, 1789, 1886, 2463, 
 2257, 2212, 2608, 2284, 2034, 1996, 2686, 2459, 2340, 2383, 2507, 
 2304, 2740, 1869, 654, 1068, 1720, 1904, 1666, 1877, 2100, 504, 
 1482, 1686, 1707, 1306, 1417, 2135, 1787, 1675, 1934, 1931, 1456)

Verwenden von auto.arima:

y=auto.arima(x)
plot(forecast(y,h=30))
points(1:length(x),fitted(y),type="l",col="green")

Geben Sie hier die Bildbeschreibung ein

> summary(y)
Series: x 
ARIMA(5,1,5)                    

Coefficients:
         ar1      ar2     ar3      ar4      ar5      ma1     ma2      ma3     ma4      ma5
      0.2560  -1.0056  0.0716  -0.5516  -0.4822  -0.9584  1.2627  -1.0745  0.8545  -0.2819
s.e.  0.1014   0.0778  0.1296   0.0859   0.0844   0.1184  0.1322   0.1289  0.1388   0.0903

sigma^2 estimated as 58026:  log likelihood=-2191.97
AIC=4405.95   AICc=4406.81   BIC=4447.3

Training set error measures:
                   ME     RMSE      MAE       MPE     MAPE      MASE
Training set 1.457729 240.5059 173.9242 -2.312207 11.62531 0.6157512

Mit ets:

fit <- ets(x)
plot(forecast(fit,h=30))
points(1:length(x),fitted(fit),type="l",col="red")

Geben Sie hier die Bildbeschreibung ein

 > summary(fit)
 ETS(M,N,N) 

 Call:
  ets(y = x) 

   Smoothing parameters:
     alpha = 0.0449 

   Initial states:
     l = 1689.128 

   sigma:  0.2094

      AIC     AICc      BIC 
 5570.373 5570.411 5577.897 

 Training set error measures:
                    ME     RMSE      MAE      MPE     MAPE      MASE
 Training set 7.842061 359.3611 276.4327 -4.81967 17.98136 0.9786665

In diesem Fall passt auto.arima besser als ets.

Versuchen wir, ein neuronales Netzwerk zu singen:

 library(caret)
 fit <- nnetar(x)
 plot(forecast(fit,h=60))
 points(1:length(x),fitted(fit),type="l",col="green")

Geben Sie hier die Bildbeschreibung ein

Aus der Grafik kann ich ersehen, dass das neuronale Netzwerkmodell recht gut passt, aber wie kann ich es mit auto.arima / ets vergleichen? Wie kann ich AIC berechnen?

Eine andere Frage ist, wie man ein Konfidenzintervall für ein neuronales Netzwerk hinzufügt, wenn es möglich ist, wie es automatisch für auto.arima / ets hinzugefügt wird.

Jurgita
quelle

Antworten:

14

Anpassungen innerhalb der Stichprobe sind kein verlässlicher Hinweis auf die Prognosegenauigkeit außerhalb der Stichprobe. Der Goldstandard bei der Messung der Prognosegenauigkeit ist die Verwendung einer Holdout-Stichprobe. Entfernen Sie die letzten 30 Tage aus dem Trainingsmuster, passen Sie Ihre Modelle an den Rest der Daten an, verwenden Sie die angepassten Modelle, um das Holdout-Beispiel vorherzusagen, und vergleichen Sie einfach die Genauigkeiten des Holdouts mithilfe von mittleren absoluten Abweichungen (MAD) oder gewichteten mittleren absoluten prozentualen Fehlern (wMAPEs).

Hier ist ein Beispiel mit R. Ich verwende die 2000. Serie des M3-Wettbewerbs, die bereits in die Trainingsreihe M3[[2000]]$xund die Testdaten unterteilt ist M3[[2000]]$xx. Dies sind monatliche Daten. Die letzten beiden Zeilen geben die wMAPE der Prognosen der beiden Modelle aus, und wir sehen hier, dass das ARIMA-Modell (wMAPE 18,6%) das automatisch angepasste ETS-Modell (32,4%) übertrifft:

library(forecast)
library(Mcomp)

M3[[2000]]

ets.model <- ets(M3[[2000]]$x)
    arima.model <- auto.arima(M3[[2000]]$x)

ets.forecast <- forecast(ets.model,M3[[2000]]$h)$mean
arima.forecast <- forecast(arima.model,M3[[2000]]$h)$mean

sum(abs(ets.forecast-M3[[2000]]$xx))/sum(M3[[2000]]$xx)
sum(abs(arima.forecast-M3[[2000]]$xx))/sum(M3[[2000]]$xx)

Darüber hinaus scheint es in der Nähe der Indizes 280-300 ungewöhnlich hohe Umsätze zu geben. Könnte dies ein Weihnachtsverkauf sein? Wenn Sie über solche Kalenderereignisse Bescheid wissen, sollten Sie diese als erklärende Variablen in Ihr Prognosemodell einspeisen, damit Sie beim nächsten Weihnachtsfest eine bessere Prognose erhalten. Sie können dies problemlos in ARIMA (X) und NNs tun, nicht so einfach in ETS.

Schließlich empfehle ich dieses Lehrbuch zur Prognose: http://otexts.com/fpp/

Stephan Kolassa
quelle
Danke für die Antwort. Ihre Vorschläge sind sehr gut, aber leider passen sie nicht zu mir. Ich habe viele Zeitreihen mit unterschiedlichen Zeiträumen und muss Prognosen für sie erstellen. Deshalb suche ich nach einem einfachen und besten Modell. Ich dachte, wenn ich Methoden von AIC vergleichen könnte, würde ich die beste auswählen.
Jurgita
Ich kann nicht jedes Mal manuell nach Serien suchen, ich sollte ein Programm schreiben, das das beste Modell findet und es anwendet
Jurgita
Ist es möglich, dem Prognosemodell auto.arima erklärende Variablen (Weihnachtstage) hinzuzufügen? Oder ist es nur möglich, mit Arima zu arbeiten?
Jurgita
1
Sie können eine Schleife über Ihre Serie schreiben und prüfen, welche Methode für jede Serie die beste wMAPE liefert. Wenn eine Methode die anderen deutlich übertrifft, verwenden Sie diese für alle Serien. Denken Sie andernfalls daran, verschiedene Methoden pro Serie zu verwenden. AIC hilft Ihnen nicht bei mehreren Serien! Oder, noch besser, suchen Sie nach einer speziellen Software für die Vorhersage einer großen Anzahl von täglichen Einzelhandelszeitreihen, die auch Preisänderungen usw. berücksichtigt. Das ist es, was ich beruflich mache, ich werde Sie gerne mit unseren Verkäufern in Kontakt bringen ;-) Aber ich werde Ihnen auch gerne hier weiterhelfen!
Stephan Kolassa
Für auto.arima(), verwenden Sie den xregParameter. Siehe ?auto.arima.
Stephan Kolassa
4

Stephans Vorschlag oben ist gut. Ich würde hinzufügen, dass die Verwendung von AIC definitiv eine gültige Möglichkeit ist, innerhalb von Modellen zu wählen - aber nicht unter diesen. Das heißt, Sie können (und sollten!) Mithilfe von Informationskriterien auswählen, welche ARIMA-Modelle, welche exponentiellen Glättungsmodelle usw. verwendet werden sollen, und dann Ihre Top-Kandidaten anhand der Vorhersage außerhalb der Stichprobe (MASE, MAPE usw.) vergleichen. ).

http://robjhyndman.com/hyndsight/aic/

Stephen C.
quelle
1

Sehen Sie sich dieses Video von Prof. Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k an

In dem Video unterrichtete Prof. Rob über die Genauigkeitsfunktion und die Unterschiede zwischen der Probengenauigkeit und der Genauigkeit außerhalb der Probe.

Das heißt: Nehmen Sie beispielsweise 80-90% Ihrer Daten, passen Sie ein Modell an und prognostizieren Sie. Überprüfen Sie dann die Genauigkeit anhand der prognostizierten Daten mit 10% (da wir den tatsächlichen Wert Ihrer 10% -Daten haben, können wir die Genauigkeit des Modells außerhalb der Stichprobe überprüfen.)

Beziehen Sie sich auch auf das Online-Lehrbuch in otext

Wie bereits erwähnt, verwenden wir beim Vergleich von Modellen mit Modellen die Genauigkeit (), um sie mit dem Testsatz zu vergleichen. Dann können Sie verschiedene Fehlermaße wie MAE, MSE, RMSE ... usw. verwenden, mit denen Modelle mit Modellen verglichen werden

Miso-Suppe
quelle
0

Verwenden Sie fit_nn, anstatt dem NN-Modell einen Namen zu geben. Ebenso fit_arima und fit_ets. damit können Sie alle Modelle vergleichen.

library(caret)
#ets
fit_ets <- ets(x)
#ANN
fit_nn <- nnetar(x)
plot(forecast(fit,h=60))
points(1:length(x),fitted(fit_nn),type="l",col="green")
library(forecast)
accuracy(fit_nn)
accuracy(fit_ets)

Jetzt können Sie beide Modelle mit ME, MAE oder was auch immer Sie wollen vergleichen.

Komal Batool
quelle
Ich musste das ein paar Mal lesen, um Ihren Standpunkt zu verstehen. Die Benennung der Variablen ist zwar eine gute Codierungspraxis, für die Antwort jedoch nicht von zentraler Bedeutung. Der Hauptteil Ihrer Antwort befindet sich in der letzten Zeile (mit MAE usw.). Wenn Sie dies hervorheben (oder noch besser erweitern) könnten, würde dies dies verbessern.
mkt - Reinstate Monica
Wenn Sie die Funktionsgenauigkeit (Modell) verwenden, werden bestimmte Statistiken wie ME, MAE, RMSE, MPE usw. angezeigt. Sie können eines oder alle verwenden, um zwei oder mehr Modelle zu vergleichen. Angenommen, ein Modell mit dem geringsten RMSE (Root Mean Square Error) wird als das beste Modell unter allen angesehen.
Komal Batool
Das ist hilfreich zu wissen. Mein Punkt ist jedoch, dass es sich hier nicht um eine Website zum Thema Codierung handelt, obwohl Code sicherlich Fragen und Antworten beleuchten kann. Ihre Antwort wäre also besser, wenn Sie das inhaltliche Problem hervorheben würden .
mkt - Wiedereinstellung Monica
Die Frage war, wie ANN mit statistischen Modellen wie ARIMA verglichen werden kann (da diese Modelle anhand ihrer AIC-Werte verglichen werden), und die Antwort besteht darin, andere statistische Werte wie MAE oder RMSE zu verwenden, die durch die Genauigkeit () -Funktion erhalten werden können. Es gibt keinen Grund zur Verwirrung.
Komal Batool