-
[TIL][Imbalanced Data] Stratified Random Sampling, SMOTE전공&대외활동 이야기 2025. 3. 16. 12:54
불균형 데이터, Imbalanced Dataset에서는 다수의 클래스에 치우져서 모델이 학습할 가능성이 높고, 이에 따라 모델의 불안정한 성능이 유도될 수 있다.
위와 같은 문제를 해결하기 위해
1. sampling에서 소수의 클래스의 숫자를 증가시키는 오버샘플링(Over Sampling)과 다수의 클래스 숫자를 줄이는 언더샘플링(Under Sampling)이 있다.
2. Cost-sensitive learning approaches (algorithm-level): 알고리즘 단에서 cost를 중요 데이터에 더 많이 할당
본 글에서는 우선 기본적으로 Stratified Random Sampling에 관해 보고, 대표적인 Over sampling 방법인 SMOTE에 관해 알아본다.
Stratified Random Sampling
보통 일반적으로 dataset을 나눌때 균일한 데이터셋이면 모두 섞고 랜덤하게 7:3 혹은 유저가 원하는 비율로 tran과 test를 나누지만, Imbalanced한 경우 Original dataset의 비율을 맞추어 Train과 Test 또한 같은 비율로 유지하여 분할한다.
When dividing a dataset into training/test or training/test/validation sets, the original class distributions should be preserved.
SMOTE
출처: https://jaylala.tistory.com/entry/%EB%B6%88%EA%B7%A0%ED%98%95%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%B2%98%EB%A6%AC-%EC%98%A4%EB%B2%84%EC%83%98%ED%94%8C%EB%A7%81Oversampling-SMOTE SMOTE 알고리즘은 minority class의 데이터를 합성하여 샘플링하느 방법이다
알고리즘의 핵심 아니디어는 Minority class 샘플 중 하나를 선택한 뒤 그 주변 샘프과의 거리 차이를 계산하여 새로운 합성 샘플을 생성하는 방법이다. 즉, 기존 데이터 간의 선형 보간(interpolation)을 통해 새로운 데이터를 생성하는 방식이다.
위의 코드를 보면 더 쉽게 이해가 가능하다.
18번째 줄을 보면, 샘플 i에 대하여 k개의 인접이웃을 찾고 이 중 하나를 골라 nn이라고 하자(이는 모두 Minority class sample의 집합의 원소들에 관하여 이루어진다)
그럼 이 nn과 i 샘플에 관하여 거리차
dif=Sample[nn][attr]−Sample[i][attr]
Synthetic[newindex][attr]=Sample[i][attr]+gap∗dif를 계산하고, gap은 (0,1) 안에 랜덤한 값이다. 고로 새로운 샘플은 내가 고른 nn과 i 사이의 linear interpolation에 의해 생성된다.
SMOTE는 소수 클래스 데이터를 다룰 수 있는 단순하면서도 강력한 방법이지만,
아래의 단점을 가진다.
- 노이즈 데이터가 포함될 경우 오류를 증폭시킬 가능성이 있음.
- 복잡한 경계선을 가진 경우 잘못된 데이터 포인트가 생성될 수도 있음.
아래의 그림을 보면 k=150일때 우리가 예상한것과 다르게 소수 크래스의 본래 구조가 왜곡되는 것을 볼 수 있다. 원래의 3개로 구분되었던 original이나 k=5에서 클러스터들고 달리, 임의적인 구조로 데이터가 확산되는 왜곡이 일어났다.
즉. SMOTE 적용 시 데이터 분포를 확인하고, 적절한 하이퍼파라미터를 설정하는 것이 중요할 것이다.
'전공&대외활동 이야기' 카테고리의 다른 글
[Boosting] AdaBoost, AdaCost, AUC-Based Boosting (0) 2025.03.16