11.3 신경망 모델

인공 신경망 모델(neural network model)은 단순한 수학적 뇌 모델에 기초하는 예측 기법입니다. 이러한 기법으로 반응 변수(response variable)와 예측변수(predictor variable) 사이의 복잡한 비선형 관계를 다룰 수 있습니다.

신경망 구조

신경망을 계층으로 구성된 “신경 세포(neuron)”의 연결망으로 생각할 수 있습니다. 예측변수(predictor variable)(또는 입력값-input)가 밑바닥 계층을 이루고 예측값(forecast)(또는 출력값-output)이 꼭대기 계층을 이룹니다. “숨겨진 신경 세포(hidden neuron)”을 포함하는 중간 계층이 있을 수 있습니다.

단순한 연결망에는 숨겨진 계층이 없고 이러한 경우는 선형 회귀와 같습니다. 그림 11.11 은 4개의 예측변수(predictor variable)를 고려하는 선형 회귀의 신경망 버전입니다. 이러한 예측변수(predictor variable)에 붙은 계수를 “가중치(weight)”이라고 부릅니다. 이러한 입력값의 선형 결합으로 예측값을 얻습니다. MSE 같은 비용 함수를 최소화하는 “학습 알고리즘(learning algorithm)”을 이용하여 신경망 틀에서 가중치를 고릅니다. 물론, 이 단순한 예제에서는 훨씬 더 효과적으로 모델을 학습시키는 기법인 선형 회귀를 사용할 수 있습니다.

선형 회귀에 대응되는 단순한 신경망.

Figure 11.11: 선형 회귀에 대응되는 단순한 신경망.

숨겨진 신경 세포가 있는 중간 계층을 넣으면, 신경망이 비선형이 됩니다. 그림 11.12은 단순한 예제를 나타냅니다.

4개의 입력값과 1개의 숨은 층에 3개의 숨은 뉴런이 있는 신경망.

Figure 11.12: 4개의 입력값과 1개의 숨은 층에 3개의 숨은 뉴런이 있는 신경망.

이것을 다층 앞먹임 연결망(multilayer feed-forward network)으로 부릅니다. 여기에서 각 계층의 마디(node)는 이전의 계층에서부터 입력값을 받습니다. 한 계층에서 마디의 출력값은 다음 계층의 입력값이 됩니다. 각 마디의 입력값은 가중 선형 결합(weighted linear combination)으로 결합됩니다. 결과는 출력되기 전에 비선형 함수에 의해 수정됩니다. 예를 들면, 그림 11.12에서 숨겨진 신경 세포 \(j\)로 들어가는 입력값은 다음과 같이 주어지는 선형 결합입니다. \[ z_j = b_j + \sum_{i=1}^4 w_{i,j} x_i. \] 숨겨진 계층에서, 이것은 다음 계층에 입력값이 되기 위해 다음의 S자 모양의 함수 같은 비선형 함수를 이용하여 수정됩니다. \[ s(z) = \frac{1}{1+e^{-z}}, \] 극단적인 입력값의 효과를 줄이는 경향이 있습니다. 그래서 연결망이 이상값에 의한 영향에 잘 견디도록 합니다.

매개변수 \(b_1,b_2,b_3\)\(w_{1,1},\dots,w_{4,3}\)은 데이터로부터 “학습된(learned)” 것입니다. 가중치의 값은 종종 너무 커지지 않도록 제한됩니다. 가중치를 제한하는 매개변수를 “감쇠 매개변수(decay parameter)”라고 부르고 종종 0.1로 둡니다.

처음에는 가중치 값을 무작위로 주고, 관측된 데이터를 가지고 업데이트합니다. 그래서, 신경망으로 낸 예측값에는 무작위성이 있습니다. 따라서, 다른 무작위 시작점을 가지고 연결망을 여러번 훈련시키고, 결과들의 평균을 구합니다.

숨겨진 계층의 수와 각 숨겨진 계층의 마디의 수를 반드시 미리 정해야 합니다. 이 장의 뒷 부분에서 교차-검증(cross-validation)으로 이러한 값을 어떻게 정할 수 있는지 다루겠습니다.

신경망 자기 회귀

시계열 데이터을 가지고, 선형 자기 회귀 모델에서 시차값을 사용한 것처럼(8 장), 시계열의 시차값을 신경망의 입력값으로 사용할 수 있습니다. 이것을 신경망 자기 회귀 또는 NNAR 모델이라고 부르겠습니다.

이 책에서는, 1개의 숨겨진 계층이 있는 앞먹임 연결망(feed-forward network)만 다루고, 숨겨진 계층에서 \(p\)개의 시차 입력값과 \(k\)개의 마디가 있다는 것을 나타내는 NNAR(\(p,k\)) 기호를 사용합니다. 예를 들어, NNAR(9,5) 모델은 출력값 \(y_t\)을 예측하기 위해 마지막 9개의 관측값 \((y_{t-1},y_{t-2},\dots,y_{t-9})\)을 입력값으로 사용하고 숨겨진 계층에 5개의 신경 세포가 있는 신경망입니다. NNAR(\(p,0\)) 모델은 ARIMA(\(p,0,0\)) 모델과 같지만, ARIMA에서 정상성이 있도록 하는 제한조건에 대한 매개변수가 없습니다.

계절성 데이터를 가지고, 같은 계절의 마지막 관측값을 입력값으로 넣는 것도 유용합니다. 예를 들면, NNAR(3,1,2)\(_{12}\) 모델은 입력값 \(y_{t-1}\), \(y_{t-2}\), \(y_{t-3}\), \(y_{t-12}\)이 있고, 숨겨진 계층에 2개의 신경 세포가 있습니다. 더 일반적으로는, NNAR(\(p,P,k\))\(_m\) 모델에는 입력값 \((y_{t-1},y_{t-2},\dots,y_{t-p},y_{t-m},y_{t-2m},y_{t-Pm})\)이 있고 숨겨진 계층에 \(k\)개의 신경 세포가 있습니다. NNAR(\(p,P,0\))\(_m\) 모델은 ARIMA(\(p,0,0\))(\(P\),0,0)\(_m\) 모델과 같지만, ARIMA와는 다르게 정상성이 있도록 하는 제한조건에 대한 매개변수가 없습니다.

nnetar() 함수는 NNAR(\(p,P,k\))\(_m\) 모델을 맞춥니다. \(p\)\(P\) 값들을 정하지 않으면, 자동으로 고릅니다. 비-계절성 시계열에 대해서는, 기본값은 선형 AR(\(p\)) 모델에 대해 (AIC에 따라 고르는) 최적의 시차의 개수입니다. 계절성 시계열에 대해서는, 기본값은 \(P=1\)이고 \(p\)는 계절성으로 조정된 데이터에 맞춘 최적 선형 모델로 고릅니다. \(k\) 값을 정하지 않으면, \(k=(p+P+1)/2\)로 둡니다(가장 가까운 정수로 반올림합니다).

예측할 때는, 연결망을 반복하여 적용합니다. 한 단계 앞을 예측할 때는, 단순히 주어진 과거 데이터를 입력값으로 사용합니다. 두 단계 앞을 예측할 때는, 한 단계 예측값을 과거 데이터와 함께 입력으로 사용합니다. 필요한 모든 예측값을 계산할 때까지 이 과정을 수행합니다.

예제: 흑점

태양의 표면에는 검은 점처럼 보이는 자성 영역이 있습니다. 이러한 영역은 전자기파가 진행하는 것에 영향을 주기 때문에 통신회사는 어떤 미래의 어려움에 대한 대책을 세우기 위해 흑점 활동을 예측하고 싶어합니다. 흑점은 9–14년 주기를 따릅니다. 그림 11.13은 다음 30년에 대해 NNAR(10,6)로 얻은 예측값을 나타냅니다. 여기에서는 예측값이 양수가 되도록 lambda=0으로 박스-칵스(Box-Cox) 변환을 하겠습니다.

fit <- nnetar(sunspotarea, lambda=0)
autoplot(forecast(fit,h=30))
10개의 시차 입력값과 1개의 숨은 층에 6개의 뉴런을 포함하는 신경망으로 얻은 예측값.

Figure 11.13: 10개의 시차 입력값과 1개의 숨은 층에 6개의 뉴런을 포함하는 신경망으로 얻은 예측값.

여기에서, 마지막 10개 관측값을 예측변수(predictor variable)로 사용했고, 숨겨진 계층에는 6개의 신경 세포가 있습니다. 데이터의 주기성(cyclicity; 또는 반복성)은 모델링이 잘 된 것을 확인할 수 있습니다. 모델이 반복되는 패턴의 비대칭성도 잡아내는 것도 확인할 수 있습니다. 여기에서 주기의 감소 부분보다 반복되는 패턴의 증가 부분이 더 가파릅니다. 이것은 NNAR 모델과 선형적인 AR 모델의 차이입니다. 선형적인 AR 모델로도 반복되는 패턴을 모델링할 수 있긴 합니다만, 모델링한 결과는 항상 대칭적입니다.

11.3.1 예측구간

이 책에서 다룬 대부분의 기법과는 다르게, 신경망은 잘 정의된 확률 모델에 기초하지 않습니다. 따라서 결과 예측값에 대한 예측구간(prediction interval)을 유도하는 것이 간단하지 않습니다. 하지만, 붓스트랩된 잔차(bootstraped residual)를 이용해서 만든 미래 표본 경로(future sample path)로 모사하면 예측구간을 얻을 수 있습니다(3.5 절에서 다룬 것처럼).

흑점 데이터에 맞춘 신경망 모델을 다음과 같이 쓸 수 있습니다. \[ y_t = f(\boldsymbol{y}_{t-1}) + \varepsilon_t \] 여기에서 \(\boldsymbol{y}_{t-1} = (y_{t-1},y_{t-2},\dots,y_{t-10})'\)은 시계열의 시차값을 담고 있는 벡터이고, \(f\)는 1개의 층에 6개의 숨은 마디가 있는 신경망입니다. 오차 시계열 \(\{\varepsilon_t\}\)의 분산이 균일하다고 (그리고 아마도 정규 분포를 따른다고) 가정합니다.

이 모델의 미래의 표본 경로를 정규 분포나 과거값에서 뽑는 방식으로 \(\varepsilon_t\)에 대한 값을 무작위적으로 만들어서 반복적으로 모사할 수 있습니다. \(\varepsilon^*_{T+1}\)이 시간 \(T+1\)에서 오차의 분포로부터 무작위적으로 뽑은 것이라고 하면, \[ y^*_{T+1} = f(\boldsymbol{y}_{T}) + \varepsilon^*_{T+1} \]\(y_{T+1}\)에 대한 예측분포로부터 뽑을 수 있는 하나의 가능한 값입니다. \(\boldsymbol{y}_{T+1}^* = (y^*_{T+1}, y_{T}, \dots, y_{T-6})'\)라고 두면, 아래의 값을 얻기 위해 이러한 과정을 반복할 수 있습니다. \[ y^*_{T+2} = f(\boldsymbol{y}^*_{T+1}) + \varepsilon^*_{T+2}. \] 이러한 방식으로, 미래의 표본 경로를 반복적으로 모사할 수 있습니다. 표본 경로를 반복적으로 모사하여, 맞춘 신경망에 기초하여 모든 미래값에 대한 분포를 만들어 나갈 수 있습니다.

아래는 흑점 데이터에 대한 가능한 9가지 미래 표본 경로(future sample path)를 모사한 것입니다. 각 표본 경로는 관측 데이터 이후 다음 20년에 해당합니다.

sim <- ts(matrix(0, nrow=30L, ncol=9L), 
  start=end(sunspotarea)[1L]+1L) 
for(i in seq(9)) 
  sim[,i] <- simulate(fit, nsim=30L)
autoplot(sunspotarea) + autolayer(sim)
연간 흑점 데이터에 대한 미래 표본 경로.

Figure 11.14: 연간 흑점 데이터에 대한 미래 표본 경로.

이것을 수백 수천번 반복하면, 좋은 예측분포(forecast distribution) 그림을 얻을 수 있습니다. 이것이 forecast() 함수가 예측 구간을 내는 방식입니다:

fcast <- forecast(fit, PI=TRUE, h=30) 
autoplot(fcast) 
연간 흑점 데이터에 대한 예측값과 예측 구간. 예측 구간은 미래 표본 경로를 모사하여 계산합니다.

Figure 11.15: 연간 흑점 데이터에 대한 예측값과 예측 구간. 예측 구간은 미래 표본 경로를 모사하여 계산합니다.

위의 과정이 조금 느리기 때문에, PI=FALSE이 기본값입니다. 그래서 명시하지 않는 경우에는 예측 구간을 계산하지 않습니다. forecast()에서 입력값 npaths으로 모사를 얼마나 많이 할 것인지 조정합니다(기본값 1000). 기본적으로, 오차를 정규 분포에서 뽑습니다. 입력값 bootstrap은 과거 오차에서부터 무작위로 뽑아서 오차를 만들어내도록 합니다.