신경망을 사용하여 시계열을 예측하는 것에 대해 조금 들었습니다.
어떻게 시계열 (일일 소매 데이터)을 예측하는 방법이 더 좋은지 비교할 수 있습니다 : auto.arima (x), ets (x) 또는 nnetar (x).
auto.arima와 AIC 또는 BIC의 ets를 비교할 수 있습니다. 그러나 어떻게 신경망과 비교할 수 있습니까?
예를 들면 다음과 같습니다.
> 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)
auto.arima 사용 :
y=auto.arima(x)
plot(forecast(y,h=30))
points(1:length(x),fitted(y),type="l",col="green")
> 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
ets 사용하기 :
fit <- ets(x)
plot(forecast(fit,h=30))
points(1:length(x),fitted(fit),type="l",col="red")
> 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
이 경우 auto.arima가 더 적합합니다.
신경망을 노래 해 봅시다.
library(caret)
fit <- nnetar(x)
plot(forecast(fit,h=60))
points(1:length(x),fitted(fit),type="l",col="green")
그래프에서 신경망 모델이 잘 맞는다는 것을 알 수 있지만 auto.arima / ets와 어떻게 비교할 수 있습니까? AIC는 어떻게 계산할 수 있습니까?
또 다른 질문은 auto.arima / ets에 자동으로 추가되는 것처럼 가능하다면 신경망에 대한 신뢰 구간을 추가하는 방법입니다.
답변
표본 내 적합은 표본 외 예측 정확도에 대한 신뢰할 수있는 가이드 가 아닙니다 . 정확도 측정 예측의 표준은 홀드 아웃 샘플을 사용하는 것입니다. 훈련 샘플에서 지난 30 일을 제거하고, 모델을 나머지 데이터에 맞추고, 적합 모델을 사용하여 홀드 아웃 샘플을 예측하고, 평균 절대 편차 (MAD) 또는 가중 평균 절대 백분율 오류를 사용하여 홀드 아웃의 정확도를 간단히 비교합니다. (wMAPE).
여기에 R을 사용한 예가 있습니다. 2000 시리즈 M3 경쟁을 이미 사용하고 있는데, 이미 훈련 시리즈 M3[[2000]]$x
와 테스트 데이터 로 나뉩니다 M3[[2000]]$xx
. 이것은 월간 데이터입니다. 마지막 두 줄은 두 모델에서 예측의 wMAPE를 출력하며 ARIMA 모델 (wMAPE 18.6 %)이 자동 맞춤 ETS 모델 (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)
또한 지수 280-300 근처에서 판매량이 비정상적으로 높은 것으로 보입니다. 이것이 크리스마스 판매일까요? 이와 같은 캘린더 이벤트에 대해 알고 있다면 예측 변수에 설명 변수로 해당 이벤트를 제공하는 것이 가장 좋으며, 이는 다음에 크리스마스가 돌아올 때 더 나은 예측을 제공합니다. ARIMA (X) 및 NN에서 쉽게 수행 할 수 있지만 ETS에서는 쉽게 수행 할 수 없습니다.
마지막으로,이 교과서를 예측에 권장합니다 : http://otexts.com/fpp/
답변
위의 Stephan의 제안은 좋은 것입니다. 나는 AIC를 사용하는 것이 모델 내 에서 선택하는 올바른 방법이지만 분명히 그중 하나는 아니라고 덧붙였다. 즉, 정보 기준을 사용하여 ARIMA 모델, 지수 평활 모델 등을 선택한 다음 샘플 예측 (MASE, MAPE 등)을 사용하여 상위 후보를 비교할 수 있습니다. ).
답변
Rob 교수가이 비디오를 시청하십시오
https://www.youtube.com/watch?v=1Lh1HlBUf8k
비디오에서 Rob 교수는 정확성 기능과 샘플 정확도와 샘플 정확도의 차이에 대해 가르쳤습니다.
즉, 데이터의 80-90 %를 말하고 모델에 적합하며 예측합니다. 그런 다음 10 %의 예측 데이터를 사용하여 정확도를 확인하십시오 (10 % 데이터의 실제 값이 있으므로 모델의 표본 정확도를 확인할 수 있음)
otext의 온라인 교과서를 참조하십시오.
다른 언급 한 것처럼 모델과 모델을 비교할 때 정확도 ()를 사용하여 테스트 세트와 비교합니다. 그런 다음 모델과 모델을 비교하는 데 사용되는 MAE, MSE, RMSE 등과 같은 다양한 오류 측정이 가능합니다.
답변
NN 모델에 이름을 맞추는 대신 fit_nn을 사용하십시오. 마찬가지로 fit_arima 및 fit_ets. 모든 모델을 비교할 수 있습니다.
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)
이제 ME, MAE 또는 원하는 것을 사용하여 두 모델을 비교할 수 있습니다.