25

클래스 불균형 처리: Focal Loss, SMOTE, Class Weights

Day 2: CNN 기반 불량 분류

학습 목표

클래스 불균형이 모델 성능에 미치는 영향을 이해한다 Focal Loss, 클래스 가중치, 오버샘플링 기법을 비교할 수 있다 제조 환경에 적합한 불균형 처리 전략을 선택할 수 있다

클래스 불균형: 제조 비전 AI의 가장 큰 적


문제의 심각성

[불균형 데이터의 함정]

데이터: 양품 9,500장, 불량 500장 (19:1)

모델 A: "전부 양품" → 정확도 95%!
→ 실제로는 쓸모없는 모델 (불량을 하나도 못 찾음)

정확도(Accuracy)는 불균형 데이터에서
거짓 안정감을 주는 지표다.

해결 전략 3가지

[전략 1: 클래스 가중치 (Class Weights)]

원리: 소수 클래스의 손실에 더 큰 가중치 부여

weight = 전체 샘플 수 / (클래스 수 × 해당 클래스 샘플 수)

예시:
  양품(9,500장): weight = 10000 / (2 × 9500) = 0.53
  불량(500장):   weight = 10000 / (2 × 500) = 10.0

→ 불량 1개를 틀리면 양품 19개를 틀린 것과 같은 페널티

PyTorch 구현:
criterion = nn.CrossEntropyLoss(
    weight=torch.tensor([0.53, 10.0]).to(device)
)
[전략 2: Focal Loss]

원리: 쉬운 샘플(잘 분류되는 양품)의 가중치를 줄이고
      어려운 샘플(불량)에 집중

Focal Loss = -alpha × (1 - p_t)^gamma × log(p_t)

  alpha: 클래스 가중치 (불균형 보정)
  gamma: 초점 파라미터 (보통 2.0)
    gamma=0: 일반 CrossEntropy
    gamma=2: 어려운 샘플에 집중

동작 예시:
  양품(확률 0.95): loss = -(1-0.95)^2 × log(0.95) = 매우 작음
  불량(확률 0.30): loss = -(1-0.30)^2 × log(0.30) = 큼
→ 자동으로 어려운 샘플에 집중!
[전략 3: 오버샘플링]

(a) 단순 오버샘플링
  불량 데이터를 복제하여 양 맞춤
  500장 → 9,500장 (19배 복제)
  단점: 과적합 위험

(b) SMOTE (Synthetic Minority Over-sampling)
  소수 클래스의 특징 벡터를 보간하여 합성 데이터 생성
  단점: 이미지에는 직접 적용 어려움 (특징 공간에서 적용)

(c) 데이터 증강 기반 오버샘플링 (추천!)
  불량 데이터에만 강한 증강 적용하여 다양한 변형 생성
  → 과적합 완화 + 데이터 균형

전략 비교

전략구현 난이도효과제조 추천
Class Weights쉬움중간첫 시도
Focal Loss중간높음강력 추천
오버샘플링쉬움중간보조 수단
증강 오버샘플링중간높음추천
조합 사용높음최고프로덕션

실무 추천: Focal Loss + 증강 오버샘플링 조합

AI로 학습하기 — 꿀팁
Focal Loss와 SMOTE 효과 주장 사실 확인AI 학습 팁

클래스 불균형 처리 기법의 효과는 데이터 분포와 모델 특성에 따라 크게 달라지므로, 무조건적 효과 주장을 검증하는 것이 중요하다.

제조 불량 검사에서 클래스 불균형(정상 99%, 불량 1%) 처리 기법에 대한 다음 주장들을 검증해줘: 1) 'Focal Loss는 항상 Cross-Entropy Loss보다 클래스 불균형 상황에서 Recall을 높인다', 2) 'SMOTE로 불량 이미지를 합성하면 실제 불량 데이터를 수집한 것과 동일한 효과가 있다', 3) '클래스 가중치(Class Weights)를 적용하면 모델 재학습 없이 불균형 문제를 해결할 수 있다', 4) '데이터 불균형이 심할수록 항상 Focal Loss γ 값을 크게 설정해야 한다'. 반도체 웨이퍼 불량 검사(불량률 0.1~0.5%)를 예시로 각 기법의 실제 적용 시 주의사항과 한계를 설명해줘.
이 팁이 도움이 됐나요?
핵심 포인트
  • 정확도(Accuracy)는 불균형 데이터에서 신뢰할 수 없는 지표
  • Focal Loss는 어려운 샘플에 자동 집중하여 불균형에 효과적
  • 클래스 가중치는 가장 간단한 구현으로 첫 시도에 적합
  • 실무에서는 Focal Loss + 증강 오버샘플링 조합이 최적