본문 바로가기
머신러닝/개념익히기

머신러닝 Stratified K 폴드

by ADELA_J 2023. 8. 22.

<Stratified K 폴드>

- 불균형한(imbalanced) 분포도를 가진 레이블(결정 클래스) 데이터 집합을 위한 K 폴드 방식

- 불균형한 분포도 : 특정 레이블 값이 특이하게 많거나 매우 적어서 분포가 한쪽으로 치우치는 것

ex. 대출사기데이터가 있음. 데이터 세트는 1억 건이고, 수십 개의 피처와 사기여부 O/X인 종속변수가 있음.

> 이런 경우에는 당연히 대출 사기가 아주아주 적겠지?

> 예를 들어 대출 사기건수가 1억 개중에 약 1000건이 있다고 한다면 0.0001%임. 

> 그래서 이걸로 K 폴드로 랜덤하게 학습 및 테스트 세트를 나눈다면 비율이 제대로 나눠지지 않는 경우가 생김

>> 즉, 사기 O 가 한쪽에 쏠릴 수도 있고, 아예 없을 수도 있음

> 하지만 대출 사기를 예측하기 위한 거니까 매우매우매우 중요한 세트라서 제외할 수도 없음.

▶ 이럴 때 원본 데이터와 유사한 대출 사기 레이블 값의 분포를 학습/테스트 세트에도 유지하는 것이 중요함.

▶▶ Stratified K 폴드는 K폴드가 학습/테스트 세트에 제대로 분배하지 못하는 경우의 문제를 해결해줌

▷ 원본 데이터의 레이블 분포를 먼저 고려하고 이 분포와 동일하게 학습/검증 데이터 세트를 분배함

 

▶ 붓꽃 데이터 세트를 간단하게 준비해봄

▷ 0,1,2 값 모두 50개로 동일함. 

▶ 일부러 이슈가 발생하는 현상을 만들기 위해서 3개의 폴드 세트를 KFold로 생성하고, 교차 검증할 때마다

생성되는 학습/검증 레이블 데이터 값의 분포도를 확인해봄

▶ 이렇게 되면 교차 검증할 때마다 학습/검증 레이블이 완전히 다른 값으로 추출됨.

그러니까.. 출력값을 보면 알 수 있듯이 고루 분포가 되어야 하는데 교차검증 1에서는 0만 학습이 되지 않고, 

교차검증 2에서는 1만 학습이 되지 않고, 교차검증 3에서는 2만 학습이 되지 않음.

그럼 학습하지 않은 레이블은 예측 정확도가 0이 될 수 밖에 없음.

▷ 이것을 해결해주는 것이 바로 StratifiedKFold

▷▷ KFold 사용법과 비슷한데, 여기는 split  메서드 인자로 피처는 물론 레이블 데이터 세트도 반드시 필요함.

▶ 오오오오 고르게 값의 분포도가 할당되는구만

이렇게 되면 레이블 0,1,2 모두 학습할 수 있고 테스트 할 수 있게 됨.

▶ Stratified K FOld 는 분포도 특성을 반영한 학습/검증 데이터 셋를 만들 수 있으므로 왜곡된 레이블 데이터 세트에서는 반드시 Stratified KFOld를 이용해서 교차 검증해야함. 

▶▶일반적으로 분류(Classification)에서의 교차 검증은 Stratified K 폴드 (회귀에서는 지원 xxx)

▷▷▷회귀는 레이블이 연속된 숫자값이기 때문에 결정값별로 분포를 정하는 의미가 없어서.