Dự báo chuỗi thời gian R với mạng thần kinh, auto.arima và ets


10

Tôi đã nghe một chút về việc sử dụng các mạng thần kinh để dự báo chuỗi thời gian.

Làm cách nào tôi có thể so sánh, phương pháp nào để dự báo chuỗi thời gian của tôi (dữ liệu bán lẻ hàng ngày) tốt hơn: auto.arima (x), ets (x) hoặc nnetar (x).

Tôi có thể so sánh auto.arima với ets bằng AIC hoặc BIC. Nhưng làm thế nào tôi có thể so sánh chúng với các mạng lưới thần kinh?

Ví dụ:

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

Sử dụng auto.arima:

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

nhập mô tả hình ảnh ở đây

> 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

Sử dụng ets:

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

nhập mô tả hình ảnh ở đây

 > 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

Trong trường hợp này auto.arima phù hợp hơn thì tốt hơn.

Hãy thử hát mạng thần kinh:

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

nhập mô tả hình ảnh ở đây

Từ biểu đồ, tôi có thể thấy, mô hình mạng thần kinh đó khá phù hợp, nhưng làm thế nào tôi có thể so sánh nó với auto.arima / ets? Làm thế nào tôi có thể tính toán AIC?

Một câu hỏi khác là, làm thế nào để thêm khoảng tin cậy cho mạng thần kinh, nếu có thể, giống như nó được thêm tự động cho auto.arima / ets.?

Câu trả lời:


14

Phù hợp trong mẫu không phải là một hướng dẫn đáng tin cậy về độ chính xác dự báo ngoài mẫu. Tiêu chuẩn vàng trong dự báo đo lường độ chính xác là sử dụng mẫu giữ. Xóa 30 ngày qua khỏi mẫu đào tạo, khớp các mô hình của bạn với phần còn lại của dữ liệu, sử dụng các mô hình được trang bị để dự báo mẫu nắm giữ và chỉ cần so sánh độ chính xác trên giá trị giữ, sử dụng Độ lệch tuyệt đối trung bình (MAD) hoặc sai số phần trăm trung bình tuyệt đối (wMAPE).

Dưới đây là một ví dụ sử dụng R. Tôi đang sử dụng loạt cuộc thi thứ 2000 của cuộc thi M3, đã được chia thành chuỗi đào tạo M3[[2000]]$xvà dữ liệu thử nghiệm M3[[2000]]$xx. Đây là dữ liệu hàng tháng. Hai dòng cuối cùng đưa ra wMAPE của các dự báo từ hai mô hình và chúng ta thấy ở đây mô hình ARIMA (wMAPE 18,6%) vượt trội so với mô hình ETS được trang bị tự động (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)

Ngoài ra, có vẻ như có doanh số cao bất thường gần các chỉ số 280-300. Đây có thể là doanh số bán hàng Giáng sinh? Nếu bạn biết về các sự kiện lịch như thế này, tốt nhất nên đưa chúng vào mô hình dự báo của bạn dưới dạng các biến giải thích, điều này sẽ cho bạn dự báo tốt hơn vào lần tới khi Giáng sinh diễn ra. Bạn có thể làm điều đó một cách dễ dàng trong ARIMA (X) và NN, không dễ dàng như vậy trong ETS.

Cuối cùng, tôi đề xuất sách giáo khoa này về dự báo: http://otexts.com/fpp/


Cảm ơn bạn đã trả lời. Đề xuất của bạn rất tốt, nhưng tiếc là chúng không phù hợp với tôi. Tôi có rất nhiều chuỗi thời gian, với các giai đoạn khác nhau và tôi cần phải dự báo cho chúng, do đó tôi đang tìm kiếm một mô hình đơn giản và tốt nhất. Tôi nghĩ rằng, nếu tôi có thể so sánh các phương pháp bằng AIC, thì tôi sẽ chọn phương pháp tốt nhất.
Jurgita

Tôi không thể tìm kiếm mỗi lần serie một cách thủ công, tôi nên viết một chương trình, đó sẽ là mô hình tốt nhất và áp dụng nó
Jurgita

có thể thêm các biến giải thích (ngày Giáng sinh) vào mô hình dự báo auto.arima không? Hoặc chỉ có thể khi làm việc với arima?
Jurgita

1
Bạn có thể viết một vòng lặp trên chuỗi của mình và xem phương thức nào mang lại wMAPE tốt nhất cho mỗi chuỗi. Nếu một phương thức rõ ràng vượt trội so với các phương thức khác, hãy sử dụng phương thức đó cho tất cả các chuỗi. Nếu không, hãy nghĩ về việc sử dụng các phương pháp khác nhau cho mỗi loạt. AIC sẽ không giúp bạn với nhiều loạt! Hoặc, thậm chí tốt hơn, tìm kiếm phần mềm chuyên dụng để dự báo số lượng lớn chuỗi thời gian bán lẻ hàng ngày cũng đưa những thứ như thay đổi giá vv vào tài khoản. Đây là những gì tôi làm để kiếm sống, tôi sẽ vui vẻ giúp bạn liên lạc với nhân viên bán hàng của chúng tôi ;-) Nhưng tôi cũng sẽ rất vui khi được giúp đỡ bạn ở đây!
Stephan Kolassa

Đối với auto.arima(), sử dụng xregtham số. Xem ?auto.arima.
Stephan Kolassa

4

Đề nghị của Stephan ở trên là một trong những tốt. Tôi sẽ nói thêm rằng sử dụng AIC chắc chắn là một cách hợp lệ để chọn trong các mô hình - nhưng không phải trong số đó. Tức là, bạn có thể (và nên!) Sử dụng tiêu chí thông tin để chọn (các) mô hình ARIMA, mô hình làm mịn theo cấp số nhân, v.v., và sau đó so sánh các ứng cử viên hàng đầu của bạn bằng cách sử dụng ngoài dự đoán mẫu (MASE, MAPE, v.v. ).

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


1

Xem video này bởi Giáo sư Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k

Trong video, Giáo sư Rob đã dạy về chức năng chính xác và sự khác biệt giữa độ chính xác của mẫu và độ chính xác của mẫu.

tức là: Lấy 80-90% dữ liệu của bạn, phù hợp với một mô hình, dự báo. Sau đó kiểm tra độ chính xác bằng cách sử dụng dữ liệu dự báo với 10% (vì chúng tôi có giá trị thực của dữ liệu 10% của bạn, chúng tôi có thể kiểm tra độ chính xác của mẫu của mô hình)

Cũng như tham khảo sách giáo khoa trực tuyến trong otext

Giống như các đề cập khác, khi chúng ta so sánh các mô hình với các mô hình, chúng ta sử dụng độ chính xác () để so sánh với bộ thử nghiệm. Sau đó, bạn có thể có các biện pháp lỗi khác nhau như MAE, MSE, RMSE ... vv được sử dụng để so sánh các mô hình với các mô hình


0

Thay vì đặt tên phù hợp với mô hình NN, hãy sử dụng fit_nn. Tương tự, fit_arima và fit_ets. để bạn có thể so sánh tất cả các mô hình.

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)

bây giờ, bạn có thể so sánh cả hai mô hình bằng ME, MAE hoặc bất cứ điều gì bạn muốn.


Tôi đã phải đọc điều này một vài lần để có được quan điểm của bạn. Mặc dù việc đặt tên cho các biến là thực hành mã hóa tốt, nhưng nó không phải là trung tâm của câu trả lời. Phần chính của câu trả lời của bạn là trong dòng cuối cùng (sử dụng MAE, v.v.). Nếu bạn có thể làm nổi bật (hoặc thậm chí tốt hơn, hãy mở rộng), nó sẽ cải thiện điều này.
mkt - Phục hồi Monica

khi bạn sử dụng độ chính xác của hàm (kiểu máy), nó sẽ đưa ra một số thống kê nhất định như ME, MAE, RMSE, MPE, v.v. Bạn có thể sử dụng bất kỳ trong số chúng hoặc tất cả để so sánh hai hoặc nhiều mô hình. Ví dụ, mô hình có ít RMSE (Lỗi trung bình bình phương gốc) được coi là mô hình tốt nhất trong số tất cả.
Komal Batool

Đó là hữu ích để biết. Nhưng quan điểm của tôi là đây không phải là một trang web về mã hóa, mặc dù mã chắc chắn có thể chiếu sáng các câu hỏi và câu trả lời. Và vì vậy, câu trả lời của bạn sẽ tốt hơn nếu bạn nhấn mạnh vấn đề thực chất .
mkt - Phục hồi Monica

Câu hỏi đặt ra là làm thế nào ANN có thể được so sánh với các mô hình thống kê như ARIMA (vì các mô hình này được so sánh bằng cách sử dụng các giá trị AIC của chúng) và câu trả lời là sử dụng các giá trị thống kê khác như MAE hoặc RMSE có thể thu được bằng hàm chính xác (). Không có điểm nhầm lẫn trong đó.
Komal Batool
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.