일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- LSTM
- 인공 신경망
- 머신러닝
- python
- CNN
- q-러닝
- rnn
- 인공지능
- 최적화
- 강화학습
- 분류
- 회귀
- 지도 학습
- 정규화
- GRU
- Deep learning
- 신경망
- 데이터 전처리
- reinforcement learning
- 강화 학습
- 자연어 처리
- 과적합
- 활성화 함수
- 딥러닝
- 머신 러닝
- AI
- 교차 검증
- 손실 함수
- Q-Learning
- Machine Learning
- Today
- Total
move84
머신러닝: 데이터 불균형 문제 해결 - 리샘플링 기법 본문
머신러닝 모델의 성능은 훈련 데이터의 품질에 크게 의존한다. 현실 세계의 데이터는 종종 불균형하게 분포되어 있으며, 특히 머신러닝 모델이 특정 클래스를 제대로 예측하지 못하는 '데이터 불균형 (Data Imbalance)' 문제는 매우 흔하게 발생한다. 이 글에서는 데이터 불균형 문제의 개념과 이를 해결하기 위한 리샘플링 기법(Resampling Techniques)에 대해 알아본다.
💡 데이터 불균형이란?
데이터 불균형은 머신러닝 데이터셋에서 각 클래스(또는 레이블)에 속하는 데이터의 양이 현저하게 차이가 나는 현상을 의미한다. 예를 들어, 사기 거래 탐지 모델을 훈련한다고 가정해 보자. 대부분의 거래는 정상 거래이지만, 소수의 거래가 사기 거래일 것이다. 이 경우 정상 거래 데이터는 압도적으로 많고, 사기 거래 데이터는 매우 적을 것이다. 이러한 상황을 데이터 불균형이라고 한다. 데이터 불균형은 모델이 소수 클래스(사기 거래)를 제대로 학습하지 못하게 하여, 해당 클래스에 대한 예측 성능을 저하시킬 수 있다.
🧐 데이터 불균형이 미치는 영향
데이터 불균형은 다음과 같은 부정적인 영향을 미칠 수 있다.
- 모델 편향 (Model Bias): 모델은 다수 클래스에 편향되어 소수 클래스를 무시하는 경향이 있다.
- 낮은 소수 클래스 정확도: 소수 클래스에 대한 예측 정확도가 낮아져, 중요한 데이터를 놓칠 수 있다. 예를 들어, 질병 진단 모델에서 드문 질병을 놓치면 심각한 결과를 초래할 수 있다.
- 부적절한 평가 지표: 정확도(Accuracy)와 같은 일반적인 평가 지표는 데이터 불균형 상황에서 모델의 성능을 제대로 반영하지 못할 수 있다. 예를 들어, 99%가 정상 거래이고 1%가 사기 거래인 데이터셋에서 모든 거래를 정상으로 예측하는 모델은 99%의 정확도를 얻을 수 있지만, 이는 실제로는 매우 나쁜 모델이다.
✨ 리샘플링 기법 (Resampling Techniques) 소개
데이터 불균형 문제를 해결하기 위한 가장 일반적인 방법 중 하나는 리샘플링 기법이다. 리샘플링은 데이터의 균형을 맞추기 위해 데이터셋을 수정하는 기법을 의미한다. 크게 과소표집(Under-sampling)과 과대표집(Over-sampling) 두 가지 방법으로 나뉜다.
과소표집 (Under-sampling)
과소표집은 다수 클래스의 데이터를 줄여 데이터의 균형을 맞추는 방법이다. 다수 클래스에서 무작위로 데이터를 제거하거나, 특정 기준에 따라 데이터를 선택적으로 제거하는 방식을 사용한다. 과소표집은 계산 비용을 줄일 수 있지만, 중요한 정보를 잃을 수 있다는 단점이 있다.
- 무작위 과소표집 (Random Under-sampling): 다수 클래스에서 무작위로 데이터를 선택하여 제거한다. 구현이 간단하지만, 정보 손실의 위험이 크다.
- Tomek Links: Tomek Links는 서로 다른 클래스에 속하는 두 개의 인스턴스가 가장 가까운 이웃인 경우를 의미한다. Tomek Links에 속하는 다수 클래스의 인스턴스를 제거하여 클래스 간의 경계를 더 명확하게 한다.
- Edited Nearest Neighbors (ENN): ENN은 k-NN (k-Nearest Neighbors) 알고리즘을 사용하여 소수 클래스에 잘못 분류된 다수 클래스 인스턴스를 제거한다.
from imblearn.under_sampling import RandomUnderSampler # 데이터셋 생성 (예시) X = [[1, 2], [1, 3], [2, 2], [2, 3], [3, 3], [4, 4]] y = [0, 0, 0, 0, 1, 1] # 0: 다수 클래스, 1: 소수 클래스 # RandomUnderSampler 객체 생성 rus = RandomUnderSampler(random_state=42) # 데이터 리샘플링 X_resampled, y_resampled = rus.fit_resample(X, y) print("Resampled X:", X_resampled) print("Resampled y:", y_resampled)
설명:
imblearn
라이브러리를 사용하여RandomUnderSampler
를 불러온다.RandomUnderSampler
객체를 생성하고,random_state
를 설정하여 결과를 재현 가능하게 한다.fit_resample()
메서드를 사용하여 데이터를 리샘플링한다.- 리샘플링된 데이터의
X
와y
를 출력한다. 이 예시에서는 다수 클래스(0)의 데이터가 줄어들어 소수 클래스(1)와 균형을 이루도록 조정된다.
주의: 과소표집은 정보 손실의 위험이 있으므로, 신중하게 적용해야 한다.
과대표집 (Over-sampling)
과대표집은 소수 클래스의 데이터를 늘려 데이터의 균형을 맞추는 방법이다. 소수 클래스의 데이터를 복제하거나, 새로운 데이터를 생성하는 방식을 사용한다. 과대표집은 정보 손실의 위험이 적지만, 과적합(Overfitting)의 위험이 있다.
- 무작위 과대표집 (Random Over-sampling): 소수 클래스의 데이터를 무작위로 복제한다. 구현이 간단하지만, 과적합의 위험이 높다.
- SMOTE (Synthetic Minority Over-sampling Technique): SMOTE는 소수 클래스에 속하는 데이터 포인트를 기반으로 새로운 데이터를 생성한다. 각 데이터 포인트와 k-최근접 이웃(k-NN)에 속하는 다른 소수 클래스 포인트 사이의 선을 따라 새로운 데이터를 생성한다.
- ADASYN (Adaptive Synthetic Sampling Approach): ADASYN은 SMOTE와 유사하지만, 데이터 분포에 따라 더 많은 데이터를 생성한다. 소수 클래스 데이터가 밀집된 영역에서는 더 적은 데이터를 생성하고, 희소한 영역에서는 더 많은 데이터를 생성한다.
from imblearn.over_sampling import SMOTE # 데이터셋 생성 (예시) X = [[1, 2], [1, 3], [2, 2], [2, 3], [3, 3], [4, 4]] y = [0, 0, 0, 0, 1, 1] # 0: 다수 클래스, 1: 소수 클래스 # SMOTE 객체 생성 smote = SMOTE(random_state=42) # 데이터 리샘플링 X_resampled, y_resampled = smote.fit_resample(X, y) print("Resampled X:", X_resampled) print("Resampled y:", y_resampled)
설명:
imblearn
라이브러리를 사용하여SMOTE
를 불러온다.SMOTE
객체를 생성하고,random_state
를 설정하여 결과를 재현 가능하게 한다.fit_resample()
메서드를 사용하여 데이터를 리샘플링한다.- 리샘플링된 데이터의
X
와y
를 출력한다. 이 예시에서는 소수 클래스(1)의 데이터가 SMOTE 알고리즘에 의해 생성되어 늘어난다.
주의: 과대표집은 과적합의 위험이 있으므로, 검증 데이터(Validation set)를 사용하여 모델의 성능을 꼼꼼히 평가해야 한다.
💡 리샘플링 기법 선택 가이드
어떤 리샘플링 기법을 선택할지는 데이터셋의 특성과 모델의 종류에 따라 다르다. 다음은 기법 선택에 대한 몇 가지 팁이다.
- 데이터셋의 크기: 데이터셋이 작을 경우, 과소표집은 정보 손실을 심화시킬 수 있으므로, 과대표집을 고려하는 것이 좋다. 데이터셋이 클 경우, 과소표집을 통해 계산 비용을 줄일 수 있다.
- 데이터 분포: 소수 클래스 데이터가 밀집되어 있는 경우, SMOTE와 같은 기법을 사용하여 새로운 데이터를 생성하는 것이 효과적일 수 있다. 소수 클래스 데이터가 희소하게 분포되어 있는 경우, ADASYN을 사용하는 것이 더 적합할 수 있다.
- 모델 종류: 일부 모델은 데이터 불균형에 덜 민감하다. 예를 들어, 트리 기반 모델(Decision Tree, Random Forest)은 데이터 불균형에 비교적 강하다. 하지만, 신경망(Neural Networks)과 같은 모델은 데이터 불균형에 더 취약할 수 있다.
- 실험: 다양한 리샘플링 기법을 시도해 보고, 교차 검증(Cross-validation)을 통해 각 기법의 성능을 비교하여 최적의 기법을 선택하는 것이 가장 좋다.
🔑 핵심 용어 정리
- 데이터 불균형 (Data Imbalance): 각 클래스에 속하는 데이터의 양이 현저하게 차이가 나는 현상.
- 소수 클래스 (Minority Class): 데이터 수가 적은 클래스.
- 다수 클래스 (Majority Class): 데이터 수가 많은 클래스.
- 리샘플링 (Resampling): 데이터의 균형을 맞추기 위해 데이터셋을 수정하는 기법 (과소표집, 과대표집).
- 과소표집 (Under-sampling): 다수 클래스의 데이터를 줄여 데이터의 균형을 맞추는 기법.
- 과대표집 (Over-sampling): 소수 클래스의 데이터를 늘려 데이터의 균형을 맞추는 기법.
- SMOTE (Synthetic Minority Over-sampling Technique): 소수 클래스의 데이터를 기반으로 새로운 데이터를 생성하는 과대표집 기법.
- ADASYN (Adaptive Synthetic Sampling Approach): SMOTE와 유사하지만, 데이터 분포에 따라 더 많은 데이터를 생성하는 과대표집 기법.
- Tomek Links: 서로 다른 클래스에 속하는 두 개의 인스턴스가 가장 가까운 이웃인 경우.
- ENN (Edited Nearest Neighbors): k-NN 알고리즘을 사용하여 소수 클래스에 잘못 분류된 다수 클래스 인스턴스를 제거하는 기법.
'머신러닝' 카테고리의 다른 글
머신러닝: 비용 민감 학습 접근법 (0) | 2025.03.03 |
---|---|
머신러닝: SMOTE를 활용한 합성 데이터 생성 (0) | 2025.03.03 |
기계 학습 기본 - DBSCAN 군집화 방법 (0) | 2025.03.03 |
머신러닝 기본 - 클러스터링: 계층적 클러스터링 (0) | 2025.03.03 |
머신러닝 기초 - 클러스터링: K-평균 알고리즘 (0) | 2025.03.03 |