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


10

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

어떻게 시계열 (일일 소매 데이터)을 예측하는 방법이 더 좋은지 비교할 수 있습니다 : 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에 자동으로 추가되는 것처럼 가능하다면 신경망에 대한 신뢰 구간을 추가하는 방법입니다.

답변:


14

표본 내 적합은 표본 외 예측 정확도에 대한 신뢰할 수있는 가이드 가 아닙니다 . 정확도 측정 예측의 표준은 홀드 아웃 샘플을 사용하는 것입니다. 훈련 샘플에서 지난 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/


응답 해주셔서 감사합니다. 당신의 제안은 매우 좋지만 불행히도 그들은 나에게 적합하지 않습니다. 기간이 다른 시계열이 많고 예측이 필요하므로 간단하고 최상의 모델을 찾고 있습니다. 나는 AIC로 방법을 비교할 수 있다면 가장 좋은 방법을 선택할 것이라고 생각했습니다.
Jurgita

나는 매번 수동으로 serie를 찾을 수없고, 최고의 모델을 찾아 적용 할 프로그램을 작성해야한다
Jurgita

설명 변수 (크리스마스 일)를 auto.arima 예측 모델에 추가 할 수 있습니까? 아니면 arima로 작업 할 때만 가능합니까?
Jurgita

1
시리즈에 루프를 작성하고 각 시리즈에 가장 적합한 wMAPE를 제공하는 방법을 찾을 수 있습니다. 한 방법이 다른 방법보다 성능이 뛰어나면 모든 계열에이 방법을 사용하십시오. 그렇지 않으면 시리즈마다 다른 방법을 사용하는 것을 고려하십시오. AIC는 여러 시리즈를 지원하지 않습니다 ! 또는 가격 변화 등을 고려한 많은 일일 소매 시계열을 예측할 수있는 전용 소프트웨어를 찾으십시오. 이것은 내가 생계를 위해하는 일이며, 나는 당신을 행복하게 우리 영업 사원과 접촉하게 할 것입니다 ;-) 그러나 나는 또한 당신을 여기서 기꺼이 도와 드리겠습니다!
Stephan Kolassa

의 경우 매개 변수를 auto.arima()사용하십시오 xreg. 참조하십시오 ?auto.arima.
Stephan Kolassa

4

위의 Stephan의 제안은 좋은 것입니다. 나는 AIC를 사용하는 것이 모델 에서 선택하는 올바른 방법이지만 분명히 그중 하나는 아니라고 덧붙였다. 즉, 정보 기준을 사용하여 ARIMA 모델, 지수 평활 모델 등을 선택한 다음 샘플 예측 (MASE, MAPE 등)을 사용하여 상위 후보를 비교할 수 있습니다. ).

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


1

Rob 교수가이 비디오를 시청하십시오 https://www.youtube.com/watch?v=1Lh1HlBUf8k

비디오에서 Rob 교수는 정확성 기능과 샘플 정확도와 샘플 정확도의 차이에 대해 가르쳤습니다.

즉, 데이터의 80-90 %를 말하고 모델에 적합하며 예측합니다. 그런 다음 10 %의 예측 데이터를 사용하여 정확도를 확인하십시오 (10 % 데이터의 실제 값이 있으므로 모델의 표본 정확도를 확인할 수 있음)

otext의 온라인 교과서를 참조하십시오.

다른 언급 한 것처럼 모델과 모델을 비교할 때 정확도 ()를 사용하여 테스트 세트와 비교합니다. 그런 다음 모델과 모델을 비교하는 데 사용되는 MAE, MSE, RMSE 등과 같은 다양한 오류 측정이 가능합니다.


0

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


나는 당신의 요점을 얻기 위해 이것을 두 번 읽어야했습니다. 변수의 이름은 좋은 코딩 방법이지만 대답의 중심은 아닙니다. 답변의 주요 부분은 마지막 줄에 있습니다 (MAE 등 사용). 당신이 그것을 강조 할 수 있다면 (또는 더 확장하면) 이것을 개선 할 것입니다.
mkt-복원 모니카

함수 정확도 (모델)를 사용하면 ME, MAE, RMSE, MPE 등과 같은 특정 통계를 제공합니다. 둘 중 하나 이상을 사용하여 둘 이상의 모델을 비교할 수 있습니다. 예를 들어, RMSE (Root Mean Square Error)가 가장 적은 모델이 가장 좋은 모델로 간주됩니다.
Komal Batool 19.

알아두면 도움이됩니다. 그러나 내 요점은 코드가 확실히 질문과 답변을 밝힐 수는 있지만 코딩에 대한 사이트는 아니라는 것입니다. 따라서 실질적인 문제 를 강조하면 대답이 더 나을 것 입니다.
mkt-

문제는 ANN을 ARIMA와 같은 통계 모델과 비교하는 방법 (이러한 모델은 AIC 값을 사용하여 비교되므로)이며 정답은 정확도 () 함수로 얻을 수있는 MAE 또는 RMSE와 같은 다른 통계 값을 사용하는 것입니다. 혼동의 여지가 없습니다.
코말 Batool
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.