전공&대외활동 이야기

[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]+gapdif

 

를 계산하고, gap은 (0,1) 안에 랜덤한 값이다. 고로 새로운 샘플은 내가 고른 nn과 i 사이의 linear interpolation에 의해 생성된다. 

 

SMOTE는 소수 클래스 데이터를 다룰 수 있는 단순하면서도 강력한 방법이지만, 

 

아래의 단점을 가진다. 

  • 노이즈 데이터가 포함될 경우 오류를 증폭시킬 가능성이 있음.
  • 복잡한 경계선을 가진 경우 잘못된 데이터 포인트가 생성될 수도 있음.

아래의 그림을 보면 k=150일때 우리가 예상한것과 다르게 소수 크래스의 본래 구조가 왜곡되는 것을 볼 수 있다. 원래의 3개로 구분되었던 original이나 k=5에서 클러스터들고 달리, 임의적인 구조로 데이터가 확산되는 왜곡이 일어났다. 

 

 

즉. SMOTE 적용 시 데이터 분포를 확인하고, 적절한 하이퍼파라미터를 설정하는 것이 중요할 것이다.