AI 모델 개발: 클래스 불균형 해결
ㅁ 클래스 불균형 해결
ㅇ 정의:
데이터셋에서 특정 클래스의 샘플 수가 다른 클래스에 비해 현저히 적은 상황을 개선하기 위한 기법들의 총칭.
ㅇ 특징:
– 데이터 증강, 가중치 조정, 손실 함수 수정 등 다양한 접근 방식 존재
– 과적합 방지 및 소수 클래스의 예측 성능 향상이 목적
– 분류 문제에서 F1-score, Recall 향상에 유리
– 데이터 분포를 강제로 조정하므로 모델 편향 가능성 존재
ㅇ 적합한 경우:
– 의료 진단, 사기 탐지, 고장 예측 등 소수 클래스가 중요한 문제
– 클래스 간 데이터 불균형 비율이 심한 경우(예: 1:10 이상)
ㅇ 시험 함정:
– SMOTE를 모든 데이터셋에 적용하면 성능이 항상 좋아진다고 단정하는 경우
– 클래스 가중치 적용 시 과적합이 자동으로 방지된다고 오해하는 경우
– 불균형 해결 기법이 데이터 전처리를 대체한다고 생각하는 경우
ㅇ 시험 대비 “패턴 보기” 예시:
O: “클래스 불균형 문제 해결을 위해 소수 클래스의 데이터를 합성하여 학습에 활용한다.”
X: “클래스 불균형 문제는 모델 구조 변경만으로 해결할 수 있다.”
================================
1. SMOTE
ㅇ 정의:
Synthetic Minority Over-sampling Technique. 소수 클래스 데이터를 합성하여 데이터 불균형을 완화하는 기법.
ㅇ 특징:
– 소수 클래스 샘플 간의 거리를 기반으로 새로운 합성 샘플 생성
– 단순 복제 방식보다 과적합 위험이 낮음
– 연속형 데이터에 효과적, 범주형 데이터에는 변형 필요
ㅇ 적합한 경우:
– 데이터 수가 매우 적은 소수 클래스가 존재할 때
– KNN 기반의 거리 계산이 의미 있는 경우
ㅇ 시험 함정:
– SMOTE가 모든 데이터 타입에 적합하다고 생각하는 경우
– 테스트셋에 SMOTE 적용 시 데이터 누수 발생 가능성 간과
ㅇ 시험 대비 “패턴 보기” 예시:
O: “SMOTE는 소수 클래스 샘플 사이의 유클리드 거리를 이용해 새로운 합성 샘플을 생성한다.”
X: “SMOTE는 소수 클래스 데이터를 단순 복제하여 불균형을 해결한다.”
================================
2. Cost-sensitive Learning
ㅇ 정의:
클래스별 오분류 비용을 다르게 설정하여 모델이 소수 클래스의 오분류를 더 크게 벌점 주도록 학습하는 기법.
ㅇ 특징:
– 데이터 수를 변경하지 않고 모델 학습 과정에서 불균형 보정
– 오분류 비용 설정이 성능에 큰 영향
– 비용 매트릭스 설계가 필요
ㅇ 적합한 경우:
– 데이터 변경이 어렵거나 원본 데이터 보존이 중요한 경우
– 오분류 비용이 실제 비즈니스/산업적 손실과 직결되는 경우
ㅇ 시험 함정:
– 비용 설정을 잘못하면 다수 클래스 성능이 급격히 저하될 수 있음
– 모든 경우에 데이터 증강보다 우수하다고 일반화하는 경우
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Cost-sensitive Learning은 클래스별 오분류 비용을 다르게 설정하여 학습한다.”
X: “Cost-sensitive Learning은 반드시 데이터 증강과 함께 사용해야 한다.”
================================
3. Focal Loss
ㅇ 정의:
Cross-Entropy Loss에 가중치를 적용하여 쉬운 샘플의 학습 비중을 줄이고 어려운 샘플에 집중하도록 만든 손실 함수.
ㅇ 특징:
– 객체 검출(Object Detection)에서 불균형 클래스 문제 해결에 자주 사용
– 하이퍼파라미터 γ(gamma)를 통해 쉬운 샘플 억제 정도 조절
– 소수 클래스 및 난이도 높은 샘플 학습 강화
ㅇ 적합한 경우:
– 클래스 불균형이 심한 객체 검출 문제
– 다중 클래스 분류에서 특정 클래스가 잘 안 잡히는 경우
ㅇ 시험 함정:
– γ 값이 클수록 항상 성능이 좋아진다고 오해
– 데이터 불균형이 없는데도 무조건 사용하는 경우
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Focal Loss는 쉬운 샘플의 학습 비중을 줄여 어려운 샘플에 집중한다.”
X: “Focal Loss는 클래스 불균형이 없는 경우에도 항상 더 나은 성능을 낸다.”
================================
4. Class Weights
ㅇ 정의:
클래스 빈도에 반비례하는 가중치를 손실 함수에 적용하여 소수 클래스의 영향력을 높이는 기법.
ㅇ 특징:
– 데이터 수 변경 없이 손실 계산 시 가중치 반영
– 구현이 간단하고 대부분의 ML/DL 프레임워크에서 지원
– 클래스별 데이터 수에 따라 자동 계산 가능
ㅇ 적합한 경우:
– 데이터 양 변경이 어려운 상황
– 빠른 불균형 보정이 필요한 경우
ㅇ 시험 함정:
– 가중치가 지나치게 크면 학습 불안정 가능
– 소수 클래스 예측은 향상되지만 전체 정확도는 감소할 수 있음
ㅇ 시험 대비 “패턴 보기” 예시:
O: “Class Weights는 손실 함수 계산 시 클래스별 가중치를 다르게 적용한다.”
X: “Class Weights는 반드시 데이터 증강과 함께 사용해야 한다.”
================================
제가 원하시면, 위 4가지 기법을 **비교표** 형태로 정리해서 시험 직전 암기용 자료**로 만들어 드릴 수도 있습니다.
비교표를 만들어 드릴까요?