학습 데이터와 테스트 데이터의 차이가 있을 때 (gap between train dataset and test dataset)
[ 제 네이버 블로그 글을 티스토리로 이전한 글입니다. 해당 글은 제 네이버 블로그에 2018.06.14에 작성되었었습니다 ]
Kdnugget에서 학습 데이터와 테스트 데이터 간의 유사성에 대한 글을 보고, 정리해두면 좋을 것 같아서 정리합니다.
(원본 글을 번역한 것이 아니라, 글을 읽은 후 내 생각대로 정리한 글이므로 .. 이 부분을 참고해서 읽어주시면 좋겠습니다.)
원본 글 출처:
https://towardsdatascience.com/how-dis-similar-are-my-train-and-test-data-56af3923de9b
데이터 분석을 하다보면, training 데이터로 아무리 모델 학습을 잘 시켜도, test 데이터의 성능이 잘 안나올 때가 많습니다. 이러한 이유로는 over fitting issue가 있을수도 있지만, 아예 training과 test 데이터 사이의 간극이 너무나도 커도 이러한 결과를 얻을 수 있습니다.
train data에 대한 모델의 over fitting은 validation set을 이용해서 어느정도 무마시킬 수 있지만, training과 test 데이터 사이의 간극이 클 경우에는 validation set을 잘 선택해서 사용한다고 하더라도 좋은 분류 성능을 얻는데는 한계가 있을 수 밖에 없습니다.
training 데이터와 test 데이터 간의 성질의 차이(or 이동? shift란 표현을 사용)를 Covariate shift라고 표현합니다.
원글에서는 training 데이터와 test 데이터 간의 covariate shift를 확인하는 기본 방법으로 train data와 test data를 각각 0과 1로 label을 준 후, 특정 feature에 대하여 Random forest를 이용해서 분류를 해보라고 하였습니다.
=> train과 test set 사이에 차이가 나는 인자(feature)가 무엇인지, Random forest 분류기로 확인.
Training 데이터와 test 데이터 사이의 Covariate shift가 확인될 경우, 이를 처리하기 위한 방법으로는... 아래의 2가지 방법을 추천하고 있습니다. (여러 가지 방법들 중, 가장 간단한 방법들을 추천한 듯)
1) Dropping of drifting features
2) Importance weight using Density Ratio Estimation
1) Dropping of drifting features
- feature selection으로 보입니다.
- Random forest를 통해서 Covariate shift를 유발하는 feature들을 확인하고, 유발에 가장 영향을 많이 미치는 순으로 feature들을 sorting합니다.
- Feature들을 하나씩 빼가면서 모델을 학습 시키고 성능을 확인해보고, 성능을 떨어뜨리는 feature들을 표시해둡니다.
- 성능을 떨어뜨리는 feature들을 제외하고, 모델을 학습하고 평가합니다.
2) Importance weight using Density Ratio Estimation
- 말 그대로, 이 방식은 data에 weight를 가해주는 방법입니다.
- Random forest를 통해서 해당 feature가 얼마나 training데이터 또는 test 데이터와 관련있는지 확인할 수 있습니다. 이 때 계산할 수 있는, training 데이터에 속할 확률 p(Train)과 test 데이터에 속할 확률 p(Test)를 이용합니다. 각 feature의 weight는 p(Train)/p(Test)로 설정해서 각 feature에 적용해줍니다.
=> 실제 상황에서는 Test 데이터를 미리 확보하기 어려울 수 있으므로, validation set으로 대체해서 적용하면 될 듯.
참고)
https://towardsdatascience.com/how-dis-similar-are-my-train-and-test-data-56af3923de9b
https://www.kdnuggets.com/2018/06/how-dissimilar-train-test-data.html