Peramalan seri waktu R dengan jaringan saraf, auto.arima, dan ets

10

Saya telah mendengar sedikit tentang menggunakan jaringan saraf untuk memperkirakan deret waktu.

Bagaimana saya bisa membandingkan, metode mana untuk meramalkan seri waktu saya (data ritel harian) yang lebih baik: auto.arima (x), ets (x) atau nnetar (x).

Saya dapat membandingkan auto.arima dengan ets oleh AIC atau BIC. Tetapi bagaimana saya bisa membandingkannya dengan jaringan saraf?

Sebagai contoh:

   > 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)

Menggunakan auto.arima:

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

masukkan deskripsi gambar di sini

> 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

Menggunakan ets:

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

masukkan deskripsi gambar di sini

 > 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

Dalam hal ini auto.arima lebih cocok daripada ets.

Mari kita coba bernyanyi neural network:

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

masukkan deskripsi gambar di sini

Dari grafik, saya dapat melihat, bahwa model jaringan saraf sangat cocok, tetapi bagaimana saya bisa membandingkannya dengan auto.arima / ets? Bagaimana saya bisa menghitung AIC?

Pertanyaan lain adalah, bagaimana cara menambahkan interval kepercayaan untuk jaringan saraf, jika memungkinkan, seperti itu ditambahkan secara otomatis untuk auto.arima / ets.?

Jurgita
sumber

Jawaban:

14

Kesesuaian dalam sampel bukan panduan yang dapat diandalkan untuk akurasi perkiraan out-of-sample. Standar emas dalam pengukuran akurasi peramalan adalah dengan menggunakan sampel penahan. Hapus 30 hari terakhir dari sampel pelatihan, sesuaikan model Anda dengan data lainnya, gunakan model yang sesuai untuk meramalkan sampel ketidaksesuaian dan hanya membandingkan akurasi pada ketidaksepakatan, menggunakan Mean Absolute Deviations (MAD) atau Mean Absolute Perscent Errors yang berbobot (wMAPE).

Berikut adalah contoh menggunakan R. Saya menggunakan seri 2000 kompetisi M3, yang sudah dibagi menjadi seri pelatihan M3[[2000]]$xdan data uji M3[[2000]]$xx. Ini adalah data bulanan. Dua baris terakhir menampilkan wMAPE dari perkiraan dari dua model, dan kita lihat di sini bahwa model ARIMA (wMAPE 18,6%) mengungguli model ETS yang dipasang secara otomatis (32,4%):

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)

Selain itu, sepertinya ada penjualan abnormal tinggi dekat indeks 280-300. Mungkinkah ini penjualan Natal? Jika Anda tahu tentang acara-acara kalender seperti ini, yang terbaik adalah memberi mereka makan ke model peramalan Anda sebagai variabel penjelas, yang akan memberi Anda perkiraan yang lebih baik lain kali saat Natal bergulir. Anda dapat melakukannya dengan mudah di ARIMA (X) dan NNs, tidak mudah di ETS.

Akhirnya, saya merekomendasikan buku teks ini tentang perkiraan: http://otexts.com/fpp/

Stephan Kolassa
sumber
Terima kasih atas jawabannya. Saran Anda sangat bagus, tetapi sayangnya itu tidak cocok untuk saya. Saya memiliki banyak seri waktu, dengan periode yang berbeda dan saya perlu melakukan peramalan untuk mereka, oleh karena itu saya mencari model yang sederhana dan terbaik. Saya pikir, jika saya bisa membandingkan metode dengan AIC, maka saya akan memilih yang terbaik.
Jurgita
Saya tidak dapat mencari setiap kali seri secara manual, saya harus menulis sebuah program, yang akan menemukan model terbaik dan menerapkannya
Jurgita
apakah mungkin menambahkan variabel penjelas (hari Natal) ke model peramalan auto.arima? Atau mungkin hanya ketika bekerja dengan arima?
Jurgita
1
Anda dapat menulis satu loop di atas seri Anda dan lihat metode mana yang memberikan wMAPE terbaik untuk setiap seri. Jika satu metode jelas mengungguli yang lain, gunakan metode itu untuk semua seri. Kalau tidak, pikirkan tentang menggunakan metode yang berbeda per seri. AIC tidak akan membantu Anda dengan beberapa seri! Atau, yang lebih baik lagi, cari perangkat lunak khusus untuk memperkirakan sejumlah besar rangkaian waktu ritel harian yang juga mempertimbangkan hal-hal seperti perubahan harga, dll. Inilah yang saya lakukan untuk mencari nafkah, saya akan dengan senang hati membuat Anda berhubungan dengan tenaga penjualan kami ;-) Tetapi saya juga akan dengan senang hati membantu Anda di sini!
Stephan Kolassa
Untuk auto.arima(), gunakan xregparameter. Lihat ?auto.arima.
Stephan Kolassa
4

Saran Stephan di atas adalah saran yang bagus. Saya akan menambahkan bahwa menggunakan AIC jelas merupakan cara yang valid untuk memilih dalam model - tetapi tidak di antara mereka. Yaitu, Anda dapat (dan harus!) Menggunakan kriteria informasi untuk memilih model ARIMA mana, yang mana model penghalusan eksponensial, dll., Dan kemudian membandingkan kandidat teratas Anda menggunakan prediksi sampel di luar (MASE, MAPE, dll. ).

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

Stephen C
sumber
1

Tonton video ini oleh Prof Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k

Dalam video tersebut, Prof Rob mengajarkan tentang fungsi akurasi dan perbedaan antara akurasi sampel dan akurasi sampel.

yaitu: Mengambil katakan 80-90% dari data Anda, muat model, perkiraan. Kemudian periksa akurasi menggunakan data yang diperkirakan dengan 10% (karena kami memiliki nilai aktual dari data 10% Anda, kami dapat memeriksa keakuratan sampel model)

Serta merujuk ke buku teks online dalam otext

Seperti disebutkan lainnya, ketika kami membandingkan model vs model, kami menggunakan akurasi () untuk membandingkan dengan set tes. Maka Anda dapat memiliki berbagai ukuran kesalahan seperti MAE, MSE, RMSE ... dll yang digunakan untuk membandingkan model vs model

misosoup
sumber
0

Alih-alih memberi nama fit ke model NN gunakan fit_nn. Demikian pula, fit_arima dan fit_ets. sehingga Anda dapat membandingkan semua model.

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)

sekarang, Anda dapat membandingkan kedua model menggunakan ME, MAE atau apa pun yang Anda inginkan.

Komal Batool
sumber
Saya harus membaca ini beberapa kali untuk mendapatkan poin Anda. Sementara penamaan variabel adalah praktik pengkodean yang baik, itu bukan inti dari jawabannya. Bagian utama dari jawaban Anda ada di baris terakhir (menggunakan MAE, dll). Jika Anda dapat menyorot (atau bahkan lebih baik, memperluas) itu, itu akan meningkatkan ini.
mkt - Reinstate Monica
ketika Anda menggunakan akurasi fungsi (model), itu memberikan statistik tertentu seperti ME, MAE, RMSE, MPE dan sebagainya. Anda dapat menggunakan salah satu dari mereka atau semua untuk membandingkan dua atau lebih model. Katakan misalnya, model dengan paling sedikit RMSE (Root Mean Square Error) dianggap sebagai model terbaik di antara semua.
Komal Batool
Itu sangat membantu untuk mengetahui. Tapi maksud saya adalah bahwa ini bukan situs tentang pengkodean, meskipun kode pasti dapat menerangi pertanyaan dan jawaban. Dan jawaban Anda akan lebih baik jika Anda menyoroti masalah substantif .
mkt - Reinstate Monica
Pertanyaannya adalah bagaimana JST dapat dibandingkan dengan model statistik seperti ARIMA (karena model ini dibandingkan dengan menggunakan nilai AIC mereka) dan jawabannya adalah menggunakan nilai statistik lain seperti MAE atau RMSE yang dapat diperoleh dengan akurasi () fungsi. Tidak ada titik kebingungan di dalamnya.
Komal Batool