카테고리 보관물: stats

stats

신경망, auto.arima 및 ets를 사용한 R 시계열 예측 2140, 1747, 1749,

신경망을 사용하여 시계열을 예측하는 것에 대해 조금 들었습니다.

어떻게 시계열 (일일 소매 데이터)을 예측하는 방법이 더 좋은지 비교할 수 있습니다 : 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 등)을 사용하여 상위 후보를 비교할 수 있습니다. ).

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


답변

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 또는 원하는 것을 사용하여 두 모델을 비교할 수 있습니다.


답변