🧑‍💻 IT 범생이 Finn/🤖 데이터 석사 생존기

꼭 알아야 하는 머신러닝 필수 개념 (2): K-fold CV 교차검증

It's FInn's Place 2021. 6. 26. 01:28

 

     데이터분석 혹은 머신러닝을 공부하게 되면 꼭 배우는 것이 학습 방법론에 따른 데이터 분류법이다. 데이터 분석을 처음으로 배우는 경우, 모델을 배우고 너무 들뜬 나머지 자신이 가진 데이터 100% 를 전부 활용하여 모델을 학습하고 분석하기 바쁜데 이는 굉장히 큰 오류이다. Train 데이터를 활용하여 학습한 모델은 해당 데이터의 특성을 이미 반영하고 있으므로, 똑같은 데이터로 예측을 하는 것은 당연히 '실제 대비 더 좋은' 결과를 낼 것이기 때문이다. (이러한 경우를 과적합 이라고 한다)

 

     예를 들어, A문제집으로 시험 공부를 한 학생(모델)이 있다고 하자. 이 학생이 '비슷하지만 새로운 유형의 문제'로 구성된 시험을 치루는 경우와, '문제집과 완벽히 동일한 문제'로 구성된 시험을 치루는 경우를 비교 한다면? 당연히 후자의 점수가 높을 것이다. 그렇지만 학생이 공부하는 이유는 시험에서 새로운 문제를 맞딱드리더라도 최대한 잘 풀수 있게 하기 위함이지, 문제집과 똑같은 문제를 달달 외워 잘 풀기 위함이 아니다. 이와 같이, 우리의 알고리즘도 양질의 문제집으로 학습을 시켜, 새로운 데이터 문제에 대한 정답률을 높이도록 해야 할 것이다.

 

Cross Validation - 대표적인 학습 방법론

     이전 글에서 주어진 데이터를 목적에 따라 Train / Validation / Test 으로 나눈다고 설명하였다. 그러나 현실에서는 여러가지 제약으로 주어진 데이터의 양이 한정적일 수 있다. 이 상황에서 데이터의 일부를 Validation 세트로 할당하는 것은 자칫 충분한 Train 데이터를 확보하는 걸림돌이 될 수 있다. 이 경우, n-fold 또는 k-fold cross-validation 이라는 대체 방안을 사용한다. 우리나라 말로 의미를 풀어보면, 데이터를 n개로 접어 교차 검증을 한다는 의미이다.

 

 

     표본의 크기가 S이고, 총 n개의 fold로 나누고자 한다고 가정하자. 이 중 1개의 fold를 제외한 나머지 (n-1)개의 fold를 활용하여 알고리즘을 학습하고, 나머지 1개의 fold로 알고리즘의 Loss function을 구한다. 이 과정을 fold 수량에 맞게 총 n번 진행하고, n개의 Loss function을 평균내어 알고리즘의 최종 성능을 구한다.

 

     파라미터 쎄타에 대한 특정 알고리즘의 Loss function은 아래와 같다. i번째 fold에 대하여, 해당 fold를 제외한 나머지 (n-1)개 fold의 데이터로 알고리즘을 학습한 후, 남은 i번째 fold의 데이터를 활용하여 예측을 한다. 실제 값 yij와 알고리즘이 예측한 값 hi(xij) 간의 차이를 나타낸 Loss function을 얻은 후, 이를 데이터 값의 개수 및 fold의 수를 기준으로 평균낸 값이다. (개념은 직관적인데 말로 표현하자니 장황해지는 개념이다)

     그렇다면 적합한 fold의 개수는 무엇일까? 정답은 없으나, fold의 개수 변화가 의미하는 바는 알아둘 필요가 있다. 먼저 Fold 개수 n이 증가할 수록 나머지 (n-1)개 fold의 데이터로 구성되는 Train 데이터는 전체 표본의 크기인 m에 가까워지고, n개의 경우에 대한 Train 데이터는 서로 유사하다. (100개의 데이터 중 99개를 뽑아서 학습을 하는 경우, 어떻게 뽑아도 '뽑힌 집단'의 성격은 매우 유사할 것이다)

 

     따라서, 평균값이 본래 표본에 가까워진다는 점에서 편향(bias)는 줄어들지만, 분산(variation)은 증가하게 된다. 반면 n이 감소할 경우, m과 성격이 다른 다양한 형태의 Train 데이터로 학습하게 되므로 분산(variation)은 줄고 편향(bias)는 증가한다. 대개 머신러닝 환경에서는 5개~10개의 fold로 구성하는 것이 통념처럼 받아들여지고 있는 것으로 보인다.

 

     LOOCV (leave one out cross validation)과 같이 극단적인 예시도 심심찮게 발견할 수 있다. LOOCV는 명칭과 같이, 하나를 제외한 나머지를 모조리 학습에 활용하는 방법론으로, 위 n-fold 예시로 보자면 '총 데이터 값의 개수 m' = 'fold의 개수 n'이 되는 알고리즘이다. 총 m번의 알고리즘 학습 과정을 거쳐야 한다는 점에서 컴퓨팅 비용이 큰 알고리즘이지만, 몇몇 알고리즘을 수행하는데 있어서는 효율성을 보이기도 한다.

 

 

     위에 살펴본 내용처럼, 하나의 데이터 표본을 바탕으로 머신러닝을 수행함에도 역할별로 데이터를 나누고 목적에 맞게 활용하는 것이 필요하다. 물론 자신의 알고리즘이 좋은 성능을 발휘했으면 하는 마음은 십분 이해하지만, 학생이 올바른 문제집을 바탕으로 공부하고 시험에서 정정당당한 성적을 얻을 수 있는 환경을 구축하는 것이 더욱 중요하다는 점을 명심하자!