본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 05. 30. 03:08

정형 데이터 증강 part12: MWMOTE

요약

MWMOTE는 SMOTE의 단점인 다수 클래스 영역 침해 문제를 해결하기 위해 클러스터링과 가중치를 결합한 정형 데이터 증강 기법입니다. k-nn을 활용해 결정 경계 근처의 데이터를 식별하고, 안전한 영역 내에서 소수 클래스 데이터를 효과적으로 생성합니다.

핵심 포인트

  • SMOTE의 다수 클래스 영역 침해 방지 목적
  • k-nn을 3회 실행하여 결정 경계 데이터 식별
  • 클러스터링과 가중치를 결합한 안전한 데이터 생성
  • 결정 경계 근처의 소수 클래스 샘플 중점 오버샘플링

TL; DR

  • MWMOTE는 SMOTE에서 발생하는 다수 클래스(Majority Class) 데이터 영역 침해를 방지하기 위한 클러스터 기반(Cluster-based) 기법이다.
  • $k$-nn을 3회 실행함으로써 결정 경계(Decision Boundary)에 가까운 데이터를 식별하고, 이를 바탕으로 데이터를 증강한다.
  • 다수 클래스 데이터에 얼마나 가까운지 등을 고려하여 각 소수 클래스(Minority Class) 샘플의 선택 확률을 가중치로 부여하며, 여기에 클러스터링(Clustering)을 결합함으로써 경계 근처이면서도 안전한 데이터 생성을 실현한다.

기본 정보

SMOTE 기사에서 설명했듯이, 폭넓은 분야에서 사용되는 정형 데이터(Tabular Data)에는 클래스 불균형(Class Imbalance)이라는 큰 과제가 있습니다. 이를 해결하기 위해 사용되는 것이 정형 데이터 증강(Tabular Data Augmentation)이며, 그 대표격이 SMOTE입니다.

그 단순함과 강력함 덕분에 SMOTE에는 많은 변종이 있습니다. 실제로 제가 지금까지 설명해 온 12가지 기법 중, ROSE를 제외한 11가지 기법이 SMOTE를 기반으로 한 것입니다 (어째서인지 ROSE를 SMOTE 기반 기법이라고 소개하는 논문이 있습니다만, 이는 명백한 오류입니다). 이들은 주로 SMOTE의 단점을 해소하는 것을 목적으로 설계되었습니다.

각 기법의 독창적인 점은 각 기법별 기사를 읽어주시길 바라며, 이러한 기법들의 개선 방향으로 자주 언급되는 것 중 하나는 다수 클래스 영역의 침해를 회피하여 분류기(Classifier)에 미치는 악영향을 경감하는 것이 있습니다. 이는 SMOTE가 다수 클래스 분포를 고려하지 않기 때문에, 다수 클래스 영역에 데이터를 생성해 버릴 가능성이 있는 점에 대한 개선입니다. 예를 들어, Safe-Level-SMOTE에서는 주변의 다수 클래스 데이터 개수에 따라 안전한 영역에 데이터를 생성한다는 접근 방식을 취하고 있습니다.

본 기사에서 소개할 Majority Weighted Minority Oversampling TEchnique (MWMOTE) 도 그러한 목적으로 설계된 기법입니다. 저자들은 Borderline-SMOTE나 Safe-Level-SMOTE와 같은...

이제부터 MWMOTE에 대한 설명을 시작하려 합니다만, 사전에 주의를 드립니다. 이 기법은 상당히 복잡하기 때문에, 처음으로 정형 데이터 증강을 접하는 분들에게 갑자기 이 기법을 이해하려고 하는 것은 추천하지 않습니다. 최대한 알기 쉽게 설명하도록 노력하겠지만, 저작권 문제로 논문의 그림을 인용해도 될지 확실치 않은 상황이라 문장 기반의 설명이 될 수밖에 없습니다. 만약 원문을 읽을 수 있는 환경이라면 그 그림을 보면서 이 글을 읽으시는 것을 추천합니다.

또한, 쓰다 보니 역시 너무 길다는 생각이 들어 TL; DR 섹션을 넣어둡니다. 전부 읽는 것이 귀찮은 분은 그 부분을 봐주세요.

MWMOTE 알고리즘 소개

알고리즘을 소개하려 합니다만, 매우 길기 때문에 일단 전체적인 모습을 보여드린 후 각 단계의 내용에 대해 자세히 설명하는 방식으로 진행하겠습니다. 이때 의식해 주셨으면 하는 점은, MWMOTE는 Borderline-SMOTE와 마찬가지로 결정 경계에 가까운 점일수록 분류에 중요하기 때문에, 그 부분을 중점적으로 오버샘플링(Oversampling)한다는 사고방식 아래 설계되었다는 점입니다. 이 분야뿐만 아니라 기법을 이해할 때는 작성자가 어떤 사상(Philosophy)을 바탕으로 설계했는지를 고려하는 것이 이해에 도움이 될 것입니다. 그럼 시작하겠습니다.

전체 흐름

먼저 사용하는 용어에 대해 설명하겠습니다.

  • 소수 클래스 데이터에 대한 $k$-nn

각 소수 클래스 데이터에 대해, 유클리드 거리(Euclidean Distance)를 사용하여 모든 데이터 중에서 $k_1$개의 근방점(Neighbor points)을 탐색한다. 이때 중심이 되는 소수 클래스 데이터를 $x_i$라고 하고, 그 근방점을 $x_i$의 근방점으로 한다. 이때 $NN(x_i)$에는 소수 클래스 데이터와 다수 클래스 데이터가 포함된다.

  • 소수 클래스 데이터의 필터링

소수 클래스 데이터 중, 근방점 $x_i$에 소수 클래스 데이터가 포함되지 않는 것을 노이즈 데이터로 간주하여 삭제한, 필터링 후의 소수 클래스 데이터 집합 $S_{minf}$를 구축한다.

  • 다수 클래스 데이터 근방점 탐색

$S_{minf}$에 속하는 각 소수 클래스 데이터에 대해, 다수 클래스 데이터 중에서 $k_2$개의 근방점을 탐색한다. 이를 $k_2$라고 한다. 이 집합에는 다수 클래스 데이터만 포함된다. $N_{maj}(x_i)$

  • 보더라인 다수 클래스 데이터 집합 구축

을 포함하는 다수 클래스 데이터를 결합하여, 보더라인 다수 클래스 데이터 집합 $N_{maj}(x_i)$를 구축한다. $S_{bmaj}$

  • 보더라인 소수 클래스 데이터 탐색

$S_{bmaj}$에 포함된 다수 클래스 데이터에 대하여, 소수 클래스 데이터 중에서 $y_i$개의 근접점(neighbor points)을 탐색한다. 이를 $k_3$라고 한다. 이 집합에는 소수 클래스 데이터만 포함된다. $N_{min}(y_i) -$
보더라인 소수 클래스 데이터 집합의 구축

$S_{imin}$에 포함된 소수 클래스 데이터를 결합하여, 보더라인 소수 클래스 데이터 집합 $N_{min}(y_i)$를 구축한다. $S_{imin} -$
소수 클래스 데이터에 대한 정보 가중치 계산

$S_{bmaj}$에 포함된 각 다수 클래스 데이터와 $y_i$에 포함된 각 소수 클래스 데이터 $S_{imin}$에 대하여, 정보 가중치 $x_i$를 계산한다. 참고로, 이 가중치의 정의는 나중에 설명한다. $I_w(y_i, x_i) -$
소수 클래스 데이터에 대한 선택 가중치 계산

7단계에서 계산한 정보 가중치를 사용하여, 각 소수 클래스 데이터에 대한 선택 가중치 $I_w(y_i, x_i)$를 $S_w(x_i)$

$S_w(x_i) = \sum_{y_i \in S_{bmaj}} I_w(y_i, x_i)$

와 같이 계산한다. $-
소수 클래스 데이터에 대한 선택 확률 계산

방금 계산한 선택 가중치를 사용하여 선택 확률 $S_w(x_i)$를 $S_p(x_i)$

$S_p(x_i) = S_w(x_i) / \sum_{z_i \in S_{imin}} S_w(z_i)$

와 같이 계산한다. $-
소수 클래스 데이터의 클러스터링 (Clustering)

소수 클래스 데이터 집합(소수 클래스 데이터 전체이며, 필터링 후의 집합 $S_{minf}$가 아니라는 점에 주의)을 클러스터링한다. $S_{minf} -$
확장 데이터의 합성

소수 클래스 데이터 선택 확률 $S_p(x_i)$에 기반하여 소수 클래스 샘플 $x$를 $S_{imin}$에서 선택한다. 해당 소수 클래스 샘플이 속한 클러스터에서 자신 이외의 샘플을 선택하여, SMOTE와 같이 두 점 사이에서 데이터를 생성한다. 단, 클러스터에 데이터가 하나만 있는 경우에는 자신을 복제한다 (랜덤 오버샘플링 (Random Oversampling)). $S_{imin}$

어떠신가요. 원문 논문에 맞춰 단계를 상당히 잘게 나누어 설명하고 있기 때문에 약간 이해하기 어려울 수도 있습니다. 또한, 지금까지 설명해 온 기법들과 비교하면 기본적으로 조작(operation)이 상당히 많다는 것도 특징입니다. 여기서부터는 동작을 크게 3단계로 나누어, 각 단계에서의 의도를 포함하여 자세히 설명하겠습니다.

$S_{imin}$의 구축

단계 1~6: MWMOTE의 전반부에서는 소수 클래스 데이터 중 결정 경계 (Decision Boundary)에 가까운 샘플이 분류에 중요하다고 생각한다는 점입니다. 즉,

그렇다면 결정 경계에 가까운 샘플은 어떻게 특정하면 좋을까요? 2차원이라면 플롯(plot)하여 육안으로 특정할 수 있지만, 고차원이 되면 불가능합니다. 결정 경계에 가까운 샘플을 이용한 확장 데이터를 생성한다는 MWMOTE와 유사한 접근 방식을 취하는 Borderline-SMOTE에서는, 소수 클래스 데이터의 근접점을 탐색하고 그중 다수 클래스 데이터가 몇 개 있는지를 바탕으로 특정합니다. 이 접근 방식은 타당성이 있다고 생각됩니다. 주변에 다수 클래스 데이터가 어느 정도 있다는 것은 여러 클래스의 데이터가 혼재되어 있는 상태라고 볼 수 있기 때문입니다. 그렇다면 MWMOTE는 왜 이 접근 방식을 채택하지 않았을까요?

답은 간단합니다. 저자들은

다만, 어떤 데이터든 상관없는 것은 아닙니다. 예를 들어 완전히 다수 클래스 데이터에 둘러싸인 소수 클래스 데이터는 다수 클래스 데이터 입장에서 근접점으로 선택될 가능성이 높지만, 실제로는 이것이 노이즈 데이터일 가능성이 있습니다. 또한, 소수 클래스 데이터로부터 매우 멀리 떨어진 다수 클래스 데이터로부터 소수 클래스 데이터의 근접점을 탐색한다 하더라도, 그 다수 클래스 데이터가 분류에 영향을 미칠 가능성은 낮습니다. 즉, 결정 경계에 가까운 다수 클래스 데이터가 바라본, 노이즈 데이터를 제외한 소수 클래스 데이터의 근접점이야말로 결정 경계에 가까운 소수 클래스 데이터이다라고 저자들은 주장하고 있는 것입니다.

즉, 흐름은 노이즈 데이터 삭제 $\rightarrow$ 결정 경계에 가까운 다수 클래스 데이터 결정 $\rightarrow$ 결정 경계에 가까운 소수 클래스 데이터 특정 순으로 진행됩니다. 알고리즘의 단계 1~6을 살펴보면 확실히 그러한 흐름으로 되어 있습니다. 먼저 다수 클래스 데이터에 둘러싸인 소수 클래스 데이터를 노이즈 데이터로서 삭제하고, 남은 소수 클래스 데이터에 가까운 다수 클래스 데이터를 결정 경계에 가까운 다수 클래스 데이터로 결정하며, 마지막으로 이들과 가까운 소수 클래스 데이터를 결정 경계에 가까운 소수 클래스 데이터로 간주하고 있습니다.

$S_p(x_i)$의 계산

단계 7~9: 선택 확률

자, 앞부분에서는 분류에 중요하다고 판단되는 결정 경계 (Decision Boundary) 근처의 소수 클래스 데이터를 특정했습니다. 하지만 저자들은 이를 사용하여 단순히 오버샘플링 (Oversampling)을 하는 것이 아니라, 이러한 데이터들 사이에서도 중요도가 다르다고 주장합니다. 그 중요도는 다음 세 가지 요소에 의해 결정됩니다.

  • 결정 경계로부터의 근접성 (가까울수록 중요하며, 멀수록 중요하지 않음)
  • 소수 클래스 샘플이 속한 클러스터 (Cluster)의 밀도 (희소할수록 중요하며, 밀집될수록 중요하지 않음)
  • 소수 클래스 샘플 근처의 다수 클래스 데이터 주변 밀도 (밀집될수록 중요하며, 희소할수록 중요하지 않음)

1번은 이 기법의 근간을 이루는 '결정 경계에 가까운 소수 클래스 데이터야말로 중요하다'는 사상에 부합합니다. 2번의 경우, 원래 밀집된 클러스터에는 충분한 정보량이 있다고 판단하여, 희소한 클러스터에 샘플을 많이 생성함으로써 정보량을 보충하려는 생각입니다. 3번의 경우, 근처의 다수 클래스 밀도가 높으면 결정 경계가 밀려날 가능성이 있기 때문에 이를 방지하려는 생각입니다. 이러한 개념을 바탕으로 각 소수 클래스 샘플에 가중치를 부여하게 됩니다.

이제 구체적인 식에 대한 설명으로 넘어가겠습니다만, 솔직히 이 부분은 이해하지 못해도 괜찮다고 생각합니다. 어디까지나 위의 세 가지 요소에 기반하여 소수 클래스 샘플에 가중치가 할당된다는 점만 이해하고 있다면 아무런 문제가 없습니다. 본 기사의 목적은 기법 해설이므로 식 자체는 설명하겠지만, 어디까지나 사상을 실현하기 위한 수단으로서 설정되어 있다고 생각하면 충분합니다.

이 가중치와 관련하여, 우선 결정 경계에 가까운 다수 클래스 데이터 집합 $M_{near}$가 있습니다. 근접 계수 (Proximity Coefficient)는 위의 요소 중 1번인 결정 경계로부터의 근접성을 반영하며, 밀도 계수 (Density Coefficient)는 2번인 소수 클래스 샘플 클러스터의 밀도를 반영합니다. 먼저, 근접 계수 $w_{prox}$는

여기서 컷오프 함수 (Cut-off Function) $ ext{cut}(d)$는

다음으로 밀도 계수 $w_{dens}$는

이것이 무엇을 의미하는지 설명하겠습니다. 우선 주의해야 할 점은,

분모 부분은 다수 클래스 샘플을

이에 반해,

이렇게 계산된 $w_{dens}$는

이와 같이 각 샘플에 대한 선택 가중치 $w_i$는

단계 11~12: 확장 데이터 생성

선택 확률을 구했으므로 드디어 확장 데이터를 생성할 차례입니다만, 단순히 선택하여 근처의 샘플 사이에 생성하는 것은 아닙니다. 가장 먼저 소수 클래스 데이터 전체 (필터링 전)를 클러스터링 (Clustering)합니다. 여기서의 클러스터링에는 average-linkage agglomerative clustering이라는 클러스터링 기법을 사용하는 것으로 보입니다. 이 클러스터링 기법은 MWMOTE의 본질과는 관계가 없으므로 자세한 설명은 생략하겠습니다만, 가까운 거리에 있는 샘플을 계속해서 결합해 나가는 방식의 클러스터링이라고 합니다.

클러스터링이 끝난 후, 앞서 계산한 선택 확률에 기반하여

만약 클러스터에 속한 데이터가 1개뿐인 경우에는 해당 데이터의 복제가 이루어집니다. 이를 통해 다수 클래스 데이터 영역으로의 침범을 방지하고 있습니다.

Python을 이용한 사용 예시

아래에 DBSMOTE를 이용한 Python 코드를 보여드립니다. 참고로 이 코드는 Gemini를 사용하여 생성한 것입니다. 동일한 클러스터 기반 기법인 K-means SMOTE와 나란히 배치하였습니다.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_blobs
...

다음은 실행 결과 도표입니다.

각 기법에 따른 데이터 분포 비교. 왼쪽부터 원본 데이터, SMOTE 확장 후 데이터, K-means SMOTE 후 데이터, MWMOTE 후 데이터

그림을 보면 동일한 클러스터 기반이라도 데이터가 생성되는 위치가 상당히 다릅니다. 이는 아마도 MWMOTE에서의 클러스터링이 K-means SMOTE에 의한 클러스터링에 비해 매우 세밀하게 이루어졌기 때문인 것으로 생각됩니다. 참고로, F1-Score 비교는

Original F1: 0.5455
SMOTE F1: 0.3200
KMeans-SMOTE F1: 0.6667
...

와 같이 나타납니다.

인용

Barua, Sukarna, et al. "MWMOTE--majority weighted minority oversampling technique for imbalanced data set learning." IEEE Transactions on knowledge and data engineering 26.2 (2012): 405-425.

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0