인프런 커뮤니티 질문&답변

녕나님의 프로필 이미지
녕나

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

교차검증 - K-Fold와 Stratified K-Fold의 이해 - 01

stratified k-fold 질문입니다

해결된 질문

작성

·

383

1

안녕하세요, 강의 잘 보고 있습니다.

궁금한 점이 생겼는데, stratified k-fold가 데이터의 label(target) 값의 분포도를 보고 그에 맞게 검증 세트를 나눈다고 하셨는데, stratified k-fold가 데이터 label 값의 분포도를 확인할 때 "전체 데이터"(train/test로 나누기 전)에서 확인을 하나요 아니면 "학습데이터"(train에서만)에서 확인을 하나요??? 

만약 전체데이터를 써서 검증을 하는거라면, 검증을 마쳤을때 좋은 결과가 나왔다면. 다시 "전체 데이터"에서 random 하게 "학습데이터"와 "시험데이터"를 나눠서 "학습데이터"로 학습하고 "시험데이터"로 다시 평가하는건가요??? 

만약 "학습데이터"로만 이용해서 검증을 하는거라면, 애초에 stratified k-fold가 학습데이터에서 데이터 편중을 막으려고 하는건데,  "전체 데이터"에서 "학습데이터" "시험데이터" 나눌때 label 분포별로 고르게 안나누어질 확률이 있으니까, 고르게 안나누어진 학습데이터로 검증을 해봤자 소용이 없는거 아닌가요??

답변 2

1

좋은 질문보고 저도 하나 여쭤보고 공부해 가려 합니다.
권철민 선생님 말씀을 정리하면
1. 전체 데이터를  나눌때도 비율을 맞추어 train/test나눕니다.
2. train 데이터를 stratified K-fold를 사용하여 train/validation 데이터로 바꾸는것을 조언해주시는 건가요?

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

stratified k-fold가 학습데이터, 전체 데이터를 가려 가면서 나누지는 않습니다. split(X, y)에 인자값으로 들어온 X를 target 값 y에 균등하게 나눌 뿐입니다.

다만 테스트 데이트는 별도로 분리하고, 학습 데이터를 기반으로 학습/검증 stratified fold 셋트를 만드는 것이 일반적인 방식입니다.

그리고 지적해주신 바와 같이 학습 데이터와 테스트 데이터가 label 별로 고르게 안나누어 질경우에는 실제로 테스트 데이터로 테스트를 수행할 때 학습/검증 데이터와 다른 성능 수치를 나타 낼 수 있습니다.

cross-validation은 여러번 검증 프로세스를 수행하면서 보다 안정적인 모델을 구축하고 성능을 평가하고자 하는 목적이 있습니다. 그리고 테스트 세트는 실제 업무에 사용되는 데이터의 형태와 분포도에 맞게 데이터를 구축해 주실 필요가 있습니다. 그래서 실제 업무에 테스트 데이터를 구축할 때 실제 데이터의 트랜젝션대로 구현하려 많은 노력을 합니다.

요약하자면 학습/검증 데이터를 포함하여 테스트 데이터 역시 전체 데이터의 target 값 데이터 분포를 유지하면서 분리해 주는게 좋습니다.  먼저 학습/테스트 데이터 세트를 target 값 데이터 분포를 유지하며 분리해주고 학습 데이터의 경우 Cross-validation을 위해서는 stratified k-fold로 수행해주는 게 좋습니다. 

좋은 질문 감사합니다.

녕나님의 프로필 이미지
녕나

작성한 질문수

질문하기