데이터·데이터전처리

쉽지만 실수하기 쉬운 데이터 분할! - 예비법, 교차검증, 부트스트랩까지 완벽 정리

데이터요리사 2021. 1. 27. 15:58

안녕하세요. 데이터 요리사, 루나입니다.

머신러닝에서 데이터는 자산입니다.

머신러닝 알고리즘 개발자는 자산을 운용하는 사람이 되겠네요. :)

 

데이터가 많다많다 하지만 실제로 데이터 분석할 때 보면 데이터가 한 없이 부족합니다.

아니 쓸만한 데이터는 부족합니다. ㅠㅠ

 

그렇기 때문에 데이터 분할은 정말 계획적으로 잘~ 해야하는데요.

우선 개념부터 정리해보겠습니다.

 

 

1 학습용 데이터 vs 테스트용 데이터 그리고 검증용 데이터

우리가 가지고 있는 데이터가 100이라면 보통 70~80%는 학습과정에서 사용하고, 나머지는 모델을 평가하는데 사용합니다. 학습과정에서 사용하는 데이터를 학습용 데이터(Training set), 평가 과정에서 사용하는 데이터를 테스트용 데이터(Test set)이라고 합니다. 

 

머신러닝을 시작할 떄에 자주하는 실수 중 하나가 데이터 분할을 하지 않고, 모든 데이터를 학습 과정에서 사용해서 모델을 만드는 것입니다. 그리고 학습에 사용했던 데이터 일부를 뒤늦게 떼어내서 평가에 사용하는데, 이 경우에 컴퓨터는 이미 그 데이터로 학습을 한 상태라 당연히 좋은 결과가 나오겠죠. 의미없는 평가과정입니다. 

 

테스트용 데이터가 평가할 때 사용한다는 것은 알겠는데 검증용 데이터는 또 무엇인가요?

테스트용 데이터가 수능을 위한 재료라면, 검증용 데이터는 모의고사를 위한 재료라고 할 수 있습니다. 즉 모델을 학습하는 과정에서 지금 학습이 잘 이뤄지고 있는지 체크하기 위해 사용하는 데이터 셋이 검증용 데이터셋입니다. 검증용 데이터셋을 활용해서 모델 학습이 과적합되고 있는 것은 아닌지, 하이퍼파라미터는 적당하게 설정된 것인지 확인하는데 사용할 수 있습니다. 

 

 

 

2 데이터 분할 시 주의할 점

1) 학습용 데이터, 검증용 데이터, 테스트용 데이터의 전처리는 동일하게 할 것

앞서서 데이터 분할을 하지않고, 모든 데이터를 사용해서 모델을 학습하는 사례를 말씀드렸는데요, 데이터 분할에 너무 초점을 맞춘 나머지, 학습셋과 테스트셋을 미리 분할해놓고 데이터 전처리를 동일하게 하지 않고 사용하는 경우도 있습니다. 학습셋과 테스트셋은 반드시 동일한 전처리 과정을 거쳐야하니 이 점도 유의해야합니다. 

 

 

2) 범주형 데이터의 경우, 타겟 데이터의 계층을 고려하여 분할할 것

또 자주하는 실수는 데이터를 분할 할 떄, 순서대로 분할하는 것입니다. 애초에 데이터가 랜덤하게 섞여있는 경우라면 괜찮겠지만, 그렇지 않은 경우에는 모델 학습이 제대로 이뤄지지 않을 수 있습니다.

 

사례1) 범주형 데이터가 순서대로 저장되어 있는 경우

예를 들어 데이터가 시계열 순서대로 저장되어있어서 1번부터 70번까지는 봄, 여름, 가을의 데이터가 들어있고, 71번부터 100까지는 겨울 데이터가 들어있다고 가정해보겠습니다. 이런 데이터를 셔플없이 순서대로 분할한다면 컴퓨터는 봄, 여름, 가을 데이터로 학습을 하고 겨울 데이터로 평가를 받는 억울한 상황에 처하게 되겠죠.

 

사례2) 타겟 데이터의 분포가 한쪽으로 치우친 경우 

또 이런 경우도 있습니다. 데이터가 치우친 분포를 가진 경우에는 단순 셔플만 했을 때에 문제가 발생할 수 있습니다. 예를들어 발병률이 낮은 질병을 분류하는 모델을 만들 경우, 발병에 대한 데이터는 적고 정상인 데이터는 상대적으로 많을 것입니다. 이 때는 각 케이스에 따라 균형있게 데이터가 추출될 수 있도록 작업하는 것이 필요합니다.

 

 

 

3 다양한 데이터 분할 방법

1) 예비법(holdout)

데이터 분할은 학습용:테스트용으로 분할하고, 학습용 데이터 중 일부를 검증용 데이터 셋으로 떼어서 사용하는 것이 일반적입니다. 이렇게 전체 데이터를 목적에 따라 서로 겹치지 않게 분할하여 사용하는 것을 예비법(holdout)이라고 합니다. 

 

일반적인 데이터 분할 방법 - 예비법(Hold out)

 

 

 

2) 교차타당성 검증(Cross validation)방법

데이터를 좀 더 효율적으로 사용하고 싶다면(뽕빼고 싶다면) 한 번에 한 역할만 수행하고 끝내는 것이 아니라 역할을 교차로 활용할 수도 있습니다. 이렇게 학습용의 역할과 테스트용의 역할을 교차로 수행하는 방법을 교차타당성 검증 방법이라고 합니다. 

교차타당성 검증(Cross Validation) 방법을 위한 데이터 분할

 

교차타당성 검증 방법 중 가장 일반적인 것은 전체 데이터를 k개로 분할하여 1/k에 해당하는 데이터 셋을 테스트용으로 사용하고, 나머지는 학습용으로 사용하고, 이러한 과정을 k번 수행하는 k-fold 교차타당성 검증(k-fold cross validation) 방법입니다. 

(참고, StratifiedKFold는 범주형 타겟 클래스의 분포를 고려하여 KFold를 진행한 방식입니다.)

3 Fold 방식의 데이터 분할 사례 

 

3) 부트스트랩(bootstrap) 방법

머신러닝 알고리즘 중에 학습용 데이터를 복원추출하는 방법도 있습니다. 복원추출이란, 한 번 학습용 데이터로 추출했던 데이터를 또 학습용 데이터로 추출하는 것을 허용하는 방법입니다. 이러한 방법을 부트스트랩(bootstrap) 방식이라고 합니다. 

부트스트랩(Bootstrap) 방식

 

부트스트랩 방식은 머신러닝 모델 중 배깅(Bagging) 방식의 앙상블 모델에서 사용하는 데이터 분할 방식입니다. 앙상블 모델은 여러 개의 학습 모델을 만들어서 투표(voting) 기반 최종 선택을 하는 방식으로 결과를 얻습니다. 이 중 배깅 방식의 앙상블 모델은 여러 개의 학습 모델을 만들 때, 오분류한 데이터에 가중치를 두어 학습 데이터로 뽑일 가능성을 높이는 방식으로 학습을 진행합니다. 이러한 방식은 마치 사람이 공부를 할 때 자꾸 틀리는 문제 유형에 별표를 표시하고 여러 번 학습을 하는 방식과 유사합니다. 

 

 

 

 

함께 보면 좋은 글

 


※ 이 글의 내용을 상업적으로 무단 활용, 편집하는 것은 금지하고 있습니다. 강의, 출판 등 상업적 이용이 필요하신 경우, 문의 바랍니다.

728x90