본문 바로가기
IT/ML

K-Fold Cross Validation(교차검증) 쉽게 이해하기

by 모던네이쳐 2020. 10. 19.
728x90

 K-Fold Cross Validation (교차검증)은 데이터 내에서 반복적으로 샘플을 사용하는 resampling 방법 중 하나이다. 그렇다면 교차검증을 사용하는 이유 및 방법을 알아보자.

 

 

Cross Validation 사용하는 이유

 머신러닝을 하기 위해 데이터를 Training set, Validation set, Test set으로 나누어 사용하는데 이 중 Training set으로 모델을 만든 뒤 Validation set으로 해당 모델의 성능을 평가하게 된다. 이때 샘플 수가 충분치 못한 경우 우연히 데이터를 어떻게 나누었는지에 따라 성능 차이가 많이 날 수 있다.

 왼쪽 그림을 살펴 보면 랜덤으로 데이터를 한번 나눈 뒤 validation의 MSE(Mean Squared Error, 오차)를 본 경우이며, 오른쪽 그림은 랜덤으로 데이터를 10번 다르게 나누었을 경우 각각의 validation 편차가 어느 정도 나는지를 보여준다. 이를 통해 우연히 어떻게 나누었는지에 따라 MSE값이 크게 다를 수 있다는 것을 알 수 있다. 즉, validation의 variance가 큰 것을 알 수 있다.

 이에 데이터를 나누는 작업에 의해 모델 성능 결과가 크게 변동되지 않게 하기 위해 K-Fold 교차검증을 사용한다.

Validation Mean Squared Error

 

 

K-Fold Cross Validation(교차검증) 방법

 K-Fold란 K번 접는다는 것을 뜻한다. Test set을 제외한 나머지 Training set에 대해 K 등분하여 그 중 1/K는 validation set으로 사용하고 (K-1)/K는 Training set으로 사용하며, 이를 각 등분된 데이터 셋에 대해 총 K번 반복한다. 이를 통해 K개만큼의 모델이 만들고 각 모델의 MSE값을 평균 내어 해당 모델의 MSE값을 결정하게 된다. 일반적으로 5-fold, 10-fold를 사용한다.

 

$ CV_{(k)} = \frac{1}{k} \sum_{i=1}^k MSE_i $

 

5-fold cross validation

 

 

K-Fold Cross Validation(교차검증) 해석

 MSE의 평균값이 낮다는 것은 모델의 성능이 좋다고 평가할 수 있다. 하지만 만약 MSE의 분산(variance)이 높다면 데이터에 따라 성능의 편차가 커 실제 해당 모델을 사용할 경우 우리가 기대한 성능과 비슷한 결과가 나올지 신뢰하기가 어렵다. Variance가 작다는 것은 모델 complexity에 비해 sample수가 많다는 것을 의미하며 신뢰를 높이기 위해서는 variance가 작은 모델을 선택하는 것이 합당한 결정일 수도 있다. 평균값과 분산 모두를 고려하여 $MSE_{avg} + \sigma^2$ 의 결과를 모델 선택의 기준으로 삼을 수도 있다.

 

 

K-Fold Cross Validation(교차검증) 사용 시 주의할 점

 머신러닝을 진행하는 과정에서 feature selection, 엄격히는 로직이 들어간 data cleansing 등의 전처리 작업 또한 training 과정의 일부이기 때문에 이는 training set에 대해서만 시행해야 한다. 데이터를 쪼개기 전, 데이터 전체를 살펴보고 특성에 맞게 어떤 기준을 세워 전처리를 하였다면 이는 쪼갠 뒤의 test data도 같은 기준으로 미리 전처리가 되어 cheating 한 효과가 난다. 따라서 data set을 먼저 나눈 뒤, training set에만 전처리를 시행해야 한하며 다음 fold에 대해 교차검증 시에도 같은 기준으로 전처리를 진행하여 validation set과 test set에 영향이 없도록 해야 한다.

 


사진자료는 모두 ISLR 책을 참조하였다.