재표본 방법(Resampling)은 통계학에서 매우 중요하게 여겨지고 있다. 이는 훈련용 데이터셋에서 일부 표본 집합을 반복적으로 뽑아 각 집합에 관심 모델을 적합하여 모델에 대한 정보를 얻는 기술이다. 예를 들어, 선형 회귀를 적합하여 y를 예측하는것이 목적이라고 생각해보자. 우리는 적합값의 변동성을 추정하기 위해 훈련용 데이터 셋으로부터 각기 다른 표본 집합을 뽑아 각 집합에 선형 회귀를 적합한다. 그 후 적합 결과가 얼마나 다른지 정도를 검토한다. 이러한 접근 방식을 통해 훈련용 데이터 셋만 이용하여 적합했을 때 얻을 수 없는 정보를 얻도록 해준다.
재표본 방법의 과정을 살펴보면 표본을 재추출하여 모형을 여러번 적합해야 하기 때문에 계산 비용이 많이 들게 된다. 하지만, 현대 컴퓨팅 기술이 나날히 발전하고 있기 때문에 계산비용에 대한 문제는 신경쓸만큼 방해가 되지 않는다.
본 포스팅에서는 가장 흔히 알려진 재표본 방법 중 두가지로, 교차타당법(cross-validation)과 붓스트랩(bootstrap)을 소개할 것이다. 교차타당법은 적합 모형의 성능을 평가하기 위해(이를 model assessment라고 함) test error를 추정하거나, 적절한 level of flexibility를 선택하기 위해(이를 model selection라고 함) 사용된다. 붓스트랩은 모수 추정의 정확도나 주어진 통계적 모형의 정확도를 계산하기 위해 주로 사용된다.
어떤 두 비교모형이 있을 때 즉, 1차식들로만 이루어진 선형회귀와 2차식도 포함된 다항회귀를 비교할 때 어떤 모형이 더 좋을지 판단하는 방법은 회귀계수 검정, test error 를 보고 판단하는 것이다. 우리는 이 포스팅에서 후자의 방법을 사용하는 것을 공부한다.
1. cross-validation 아이디어
test MSE(회귀) 또는 test error(분류)를 최소화시켜주는 모델을 찾아야 하는데, 우선 현실적으로 test data가 주어지지 않는 경우가 많다. 따라서, 우리는 training data로 test error를 추정하는 방법을 이용한다. 그 중 가장 기본적인 아이디어로 cross-validation, bootstrap 이 있다. cross-validation은 data를 랜덤하게 training set, test set, (validation set)으로 나누어 training set으로 모델을 적합하고 test set으로 평가를 하는 것이다. validation set은 굳이 나누지 않아도 되지만, 정의상으로는 모수 튜닝을 할 때 사용한다. cross-validation은 매우 일반적인 방법으로 모든 종류의 예측 모델링에서 사용될 수 있다.
2. Hold-Out
홀딩아웃법은 training set과 test set의 비율을 50:50 으로 나누는 방법이다. 아래 그림을 보면, n개의 관측치가 존재할때 랜덤하게 뽑힌 관측값 [7, 22, 13, ... ] 은 training set으로 [91, ... ] 은 test set 으로 나누는 것을 볼 수있다.
더 자세히 예를 들어보자. 392개의 데이터가 존재하며 홀딩아웃법을 이용하면 training set : test set = 196 : 196 으로 데이터가 나위어질 것이다. training set을 이용하여 모델을 훈련시키고 test set으로 그 성능을 평가하기 위해 test error를 구한다.
위의 두 그림은 Auto 데이터를 이용하여 선형회귀, 다항회귀를 적합한 것이다. 왼쪽 그림은 홀딩아웃법을 1번 수행한 것으로, 2차 다항 회귀 대한 test error가 선형 회귀(1차)에 대한 test error보다 낮다. 반면, 3차 다항 회귀에 대한 test error는 2차 다항회귀보다 약간 높다. 이는 3차항을 회귀식에 포함하는 것이 더 좋은 예측력을 보여주지 않는 것을 의미한다.
오른쪽 그림은 홀딩아웃법을 10번 수행한 것으로 매수행마다 약간씩 다른 test error가 측정되었다. 하지만, 모든 수행에서 1차 선형회귀보다 2차 다항회귀가 더 좋은 예측력을 가지며, 3차항을 포함시키는 것이 좋다고 암시하지 않는다.
이러한 test error의 변동성을 기반으로 Auto 데이터에 1차 선형회귀를 적합하는 것은 적합하지 않다는 것을 알 수 있다.
홀딩아웃법은 개념적으로 이해하기 쉽고 수행하기 쉽다는 장점이 있지만, 데이터가 어디 set에 속해있는지에 따라 test error의 변동성이 커진다. 또한, 50 : 50 으로 나누게 되면 훈련용 데이터가 작아지기 때문에 test error가 과대추정될 수 있다는 단점이 존재한다.
3. Leave-One-Out Cross-Validation
LOOCV는 홀딩아웃법의 단점을 보안하기 위해 고안된 방법이다. 홀딩아웃법처럼 데이터를 두 개의 set 으로 나누지만, 대등한 크기를 가지는 것이 아닌 1개의 데이터 (x1, y1)가 test set으로 사용되고 나머지 [(x2, y2), ..., (xn, yn)]가 training set으로 사용된다. 따라서, n-1 개의 training set으로 모형을 적합한 후, 배제된 1개의 test set을 이용해 $\bar{y_1}$을 예측한다. 아래 그림은 LOOCV를 나타낸 것으로 n개의 데이터에서 1개의 데이터를 제외한 나머지(blue box)를 training set으로 분리하고 이를 n개의 데이터가 각각 test test으로 이용될 때까지 반복한다.
(x1, y1)이 test set으로 사용되었을 때 test error는 $MSE_1 = (y_1 - \bar{y_1})^2$으로 구해지며, 이는 test error에 대한 대략적인 불편 추정량으로 여겨진다. 하지만, 이는 1개의 관측값을 기반으로 구해졌으며 변동성이 매우 크기 때문에 좋은 불편 추정량은 아니다.
$MSE_1 = (y_1-\bar{y_1})^2$
$MSE_2 = (y_2-\bar{y_2})^2$
...
test MSE에 대한 LOOCV의 추정량은 n개의 test MSE 추정량을 평균한 것이다.
$CV_{(n)} = \frac{1}{n}\sum_{i=1}^n MSE_i $
LOOCV는 n-1개의 training set을 이용하여 모형을 반복적으로 적합하기 때문에 데이터의 절반(n/2)을 이용하여 모형을 적합하는 홀딩아웃법보다 편향(bias)이 작아진다. 결과적으로, LOOCV는 홀딩아웃법만큼 test error를 과대추정하지 않는 경향이 있다. 또한, 홀딩아웃법은 training set과 test set을 나눌 때 발생하는 랜덤성때문에 반복적으로 모형을 적합할 때마다 다른 결과를 가져온다. 반면 LOOCV는 매번 모형을 적합할 때마다 같은 결과를 산출한다. 이는 데이터를 분할할 때 랜덤성을 가지고 있지 않기 때문이다.
LOOCV는 n이 크면 모형이 n번 적합되어야하기 때문에 계산비용이 증가하게 되며, n이 크거나 개별 모델 적합 속도가 느리면 시간비용도 증가하게 된다.
아래 그림은 Auto 데이터를 이용하여 다양한 차수를 가지는 선형회귀를 적합한 것이다.
4. k-Fold Cross-Validation
k-fold는 LOOCV 방법과 매우 유사하며 그에 대한 대안책으로 고안되었다. 데이터를 랜덤하게 k개 집단(같은 사이즈)으로 나눈 후 k-1개 집단를 training set으로 사용하고 나머지 1개 집단을 test set으로 사용하며 각 집단이 한번씩 test set으로 사용될 때까지 수행된다. 각 집단에 대한 test error를 구하면 k개가 도출될 것이고 이를 평균낸 값이 최종 test MSE가 된다.
$CV_(k) = \frac{1}{k} \sum_{i=1}^{k} MSE_i$
LOO-CV와 비교하면 LOOCV는 k-fold의 특별한 경우로, k-fold는 집단의 수(k)를 분석자가 정하지만 LOOCV는 데이터의 갯수만큼 그룹을 나누게 된다. 즉, LOOCV에서는 test set는1개이고 k-fold에서 test set은 n/k개가 된다.
보통 k를 5 or 10로 설정하는데 LOOCV랑 비교를 해보면, k 를 5 or 10 으로 설정하는 것이 n으로 설정하는 것보다 시간과 비용면에서 장점을 가진다. 또한, bias-variance trade off 관점에서도 비교할 수 있다. 홀딩아웃법에 대해 소개할때 얘기했듯이 데이터의 절반만 가지고 모형을 훈련시키기 때문에 test error를 과대추정할 수 있고, LOOCV는 n-1개의 데이터를 가지고 모형을 훈련시키기 때문에 test error에 대한 더 좋은 불편추정량을 산출할 수 있게 된다. 이러한 관점에서 k-fold는 각 집단에서 LOOCV보다는 크고 홀드아웃법보다는 작은 (k-1)n/k개의 데이터를 이용하여 모형을 훈련시키기 때문에 두 방법 사이에서 중간 수준의 bias를 초래할 것이다. 그러므로 bias 측면에서 보면, LOOCV방법이 k-fold보다 선호될 것이다. 하지만, 우리는 항상 bias와 variance를 함께 생각해야한다. variance 측면에서는 LOOCV방법이 k-fold보다 더 높은 분산을 가진다(k<n). 이는 training set의 중복여부와 관련이 있다. 먼저 k-fold CV를 수행할 때, 각 k-1개 집단은 중첩되는 데이터가 작기 때문에 산출되는 k개의 test error 또한 비교적 상관이 적을 것이다. 하지만, LOOCV의 경우 1개의 test set을 제외한 나머지 관측값들이 모두 중첩되기 때문에 산출되는 k개의 test error는 상관이 높을 것이며, 과대적합 현상으로 k-fold에 의해 산출되는 test error보다 더 높은 분산을 가지는 경향이 있다.
요약하면, k=5 또는 k=10인 k-fold CV를 사용하는 것이 높은 편향과 높은 분산을 가지지않는 test error를 산출하는 것으로 경험적으로 입증되었다.
5. Bootstrap
]지금까지 공부한 cross-validation은 test error를 추정하는 것이 목표이지만 붓스트랩은 추정량의 표준오차를 계산하는 것이 목적이다. ]
붓스트랩 방법은 관심 모형이나 추정량에 대한 불확실성(uncertainty)을 정량화하는데 사용될 수 있는 통계적 기법으로 넓게 이용되며 매우 강력한 방법이다. 예를 들어, 붓스트랩방법은 선형회귀 적합에서 회귀계수의 표준오차(standard errors)를 추정하는데 사용될 수 있다. 선형회귀의 특별한 경우에서는 R과 같은 통계적 프로그램에서 계산을 다 해주기 때문에 유용하지 않을 수 있다. 따라서, 붓스트랩은 표준오차와 같은 변동성의 측도를 계산하지 못하는 상황이나 자동적으로 계산해주지 않는 상황에서 유용하게 사용된다.
붓스트랩은 원 데이터셋으로부터 반복적으로 관측값을 추출함으로써 구별된 데이터셋을 얻는다.
n=3인 Z라는 원데이터가 있다고 하자. 여기서 붓스트랩 샘플을 얻기 위해 우리는 n개인 데이터를 랜덤하게 복원추출한다. 붓스트랩에서 중요한 것은 복원추출은 한다는 것이다. 즉, 뽑았던 데이터가 다시 뽑힐 수 있다. 이러한 과정을 B번 반복하여 총 B개의 붓스트랩 샘플을 얻는다. 각 샘플마다 모형을 적합하거나 추정량을 계산하고 그 붓스트랩 추정량의 표준오차를 계산할 수 있다.
왼쪽 그림은 모집단에서 반복적으로 1000개의 데이터를 추출하여 $\alpha$라는 추정량을 구해 히스토그램을 그린 것이며, 중간 그림은 붓스트랩 샘플을 이용하여 $\alpha$를 구해 히스토그램을 그린 것이다. 단일 데이터로부터 붓스트랩 샘플을 뽑아 추정량을 구한 것(0.087)과 모집단에서 여러개 표본 집단을 뽑아 추정량의 구한 것(0.083)은 매우 유사해보인다. 따라서, 붓스트랩 샘플을 이용하는 것이 비용면에서 큰 효율을 가져다 줄 수 있다.
(출처)
An Introduction to Statistical Learning with Applications in R (Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani)
'Statistics > ISLR' 카테고리의 다른 글
Ridge / Lasso regression (0) | 2021.05.21 |
---|---|
6. Linear Model Selection and Regularization (0) | 2020.10.25 |
3. Linear regression(선형 회귀) (0) | 2020.10.08 |
Introduction to Statistical Learning with R (0) | 2020.08.31 |
Ridge regression (0) | 2020.04.08 |
댓글