클래스 불균형(Class Imbalance)이란? AI가 드문 사례를 놓치는 이유
TL;DR
클래스 불균형은 분류 데이터에서 어떤 클래스의 사례가 다른 클래스보다 훨씬 많거나 적은 상태입니다. 사기 거래나 불량품처럼 드문 사례가 중요한 문제에서는 AI가 다수 클래스만 골라도 정확도가 높아 보일 수 있습니다. 클래스별 개수와 오류를 따로 보고, 정밀도·재현율 같은 지표와 재표본화·클래스 가중치를 실제 목적에 맞게 검증해야 합니다.
핵심 3줄 요약
- 핵심 1
개수 차이가 문제의 출발점입니다. 흔한 쪽은 다수 클래스, 드문 쪽은 소수 클래스라고 부릅니다. - 핵심 2
정확도 하나만 보면 착시가 생깁니다. 소수 클래스를 전부 놓쳐도 전체 정답률은 높게 나옵니다. - 핵심 3
무조건 50대 50으로 맞추지는 않습니다. 데이터 분포, 오류 비용과 운영 환경을 보고 방법과 지표를 정해야 합니다.
이 글에서 다룰 내용
- 클래스 불균형의 한 문장 정의
- 사기 거래로 보는 쉬운 예시
- 정확도가 높아도 쓸모없는 모델이 나오는 이유
- 데이터 편향, 과적합, 클래스 가중치와의 차이
- 분류 모델에서 확인할 지표와 실전 순서
- 재표본화와 평가 과정의 주의점
- AI 초보자가 자주 묻는 질문
클래스 불균형을 한 문장으로 정의하면 무엇인가요?
클래스 불균형(Class Imbalance)은 분류 데이터에서 클래스별 사례 수가 크게 달라 한쪽 클래스가 다른 쪽보다 훨씬 자주 나타나는 상태입니다.
Google 머신러닝 용어집은 클래스 불균형 데이터셋을 각 클래스의 라벨 수가 크게 다른 분류 데이터셋으로 설명합니다. 많이 나타나는 쪽은 다수 클래스, 적게 나타나는 쪽은 소수 클래스입니다. 어느 비율부터 불균형이라고 부르는지 가르는 보편적인 기준은 없습니다. 모델이 드문 클래스를 배울 사례가 충분하고 평가가 가능한지가 더 중요합니다.
한 줄 정리: 클래스 불균형은 모델의 종류가 아니라, 분류 데이터 안에서 정답 클래스의 개수가 한쪽으로 치우친 상태입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 거래 1,000건에서 사기를 찾는 AI를 만든다고 가정해 보겠습니다. 정상 거래가 990건, 사기 거래가 10건이라면 정상은 다수 클래스이고 사기는 소수 클래스입니다.
모델이 모든 거래를 정상이라고 답해도 990건을 맞히므로 정확도는 99%입니다. 숫자만 보면 훌륭해 보이지만 사기 거래 10건은 하나도 찾지 못했습니다. 사기 탐지가 목적이라면 이 모델은 쓸모가 없습니다.
이때는 전체 정확도와 함께 사기를 얼마나 놓치지 않았는지 보여 주는 재현율, 사기라고 경고한 거래 중 실제 사기의 비율인 정밀도, 두 지표를 함께 보는 F1 점수 등을 확인해야 합니다.
쉬운 예시: 클래스 불균형은 시험 100문제 중 99문제가 같은 답인 상황과 비슷합니다. 한 답만 반복해도 점수는 높지만 드문 문제를 이해했다고 볼 수 없습니다.
왜 AI 모델에서 중요한가요?
첫째, 학습할 기회가 다릅니다. 소수 클래스 사례가 너무 적으면 학습 배치에 드문 사례가 거의 들어오지 않습니다. Google 문서는 심한 불균형에서 모델이 소수 클래스를 제대로 구분하기 어려워진다고 설명합니다.
둘째, 평균 지표가 실패를 숨깁니다. 전체 정확도는 다수 클래스의 많은 정답에 크게 영향을 받습니다. 사기, 희귀 질환, 설비 고장처럼 드문 사례를 찾는 일에서는 소수 클래스 오류를 따로 봐야 합니다.
셋째, 실제 비율과 학습 비율을 구분해야 합니다. 학습을 돕기 위해 다수 사례를 줄이거나 소수 사례를 늘릴 수 있지만 실제 서비스의 발생 비율까지 바뀌는 것은 아닙니다. 평가 데이터에서는 운영 환경을 닮은 분포와 오류 비용을 확인해야 합니다.
넷째, 공정성 문제와도 이어집니다. 특정 사용자 집단의 사례가 적다면 전체 성능은 좋아도 그 집단에서 오류가 커질 수 있습니다. 클래스 비율뿐 아니라 중요한 집단별 데이터 수와 성능도 나눠 봐야 합니다.
핵심 인사이트: 클래스 불균형 문제의 목표는 숫자를 보기 좋게 맞추는 일이 아니라, 드문 사례에서 발생하는 중요한 오류를 발견하고 줄이는 일입니다.
클래스 불균형은 어떻게 확인하나요?
1. 클래스별 개수와 비율을 셉니다
정상·사기, 불량·정상처럼 각 라벨의 개수와 비율을 확인합니다. 다중 분류라면 모든 클래스의 분포를 봅니다. 전체 데이터뿐 아니라 학습·검증·테스트 데이터에서도 따로 셉니다.
2. 혼동 행렬로 오류를 나눕니다
모델이 다수 클래스만 예측하는지, 소수 클래스를 얼마나 놓치는지 확인합니다. 정확도만 보지 말고 정밀도, 재현율, F1 점수와 필요하면 PR-AUC를 함께 봅니다.
3. 실제 오류 비용을 적습니다
사기 거래를 놓치는 비용과 정상 거래를 잘못 막는 비용은 다릅니다. 어느 오류가 더 위험한지 정해야 지표와 분류 임계값을 고를 수 있습니다.
4. 시간과 집단별 분포를 확인합니다
전체 비율이 같아도 지역, 기기, 고객군이나 시기에 따라 소수 클래스 비율은 달라집니다. 배포 뒤 비율이 바뀌면 학습 때의 성능이 유지된다고 볼 수 없습니다.
헷갈리는 용어와 무엇이 다른가요?
클래스 불균형과 데이터 편향
클래스 불균형은 클래스별 개수 차이를 말합니다. 데이터 편향은 수집 방식, 표본 구성이나 라벨 기준 때문에 데이터가 현실을 체계적으로 잘못 나타내는 더 넓은 문제입니다. 클래스 수가 비슷해도 편향은 생깁니다.
클래스 불균형과 과적합
과적합은 모델이 학습 데이터에 지나치게 맞아 새 데이터에서 성능이 떨어지는 현상입니다. 클래스 불균형은 데이터 분포의 특징입니다. 불균형이 과적합을 키울 수는 있지만 같은 뜻은 아닙니다.
클래스 불균형과 클래스 가중치
클래스 가중치는 드문 클래스의 오류를 학습 과정에서 더 크게 반영하는 조정 방법입니다. 클래스 불균형은 해결해야 할 상태이고 클래스 가중치는 여러 대응책 중 하나입니다.
오버샘플링과 언더샘플링
오버샘플링은 소수 클래스 사례를 더 자주 사용하고, 언더샘플링은 다수 클래스 사례 일부를 줄입니다. 두 방법 모두 학습 비율을 바꾸지만 정보 손실, 중복 학습과 실제 분포 왜곡을 따로 점검해야 합니다.
비교 정리: 클래스 불균형은 데이터 상태, 데이터 편향은 대표성 문제, 과적합은 일반화 실패, 클래스 가중치와 재표본화는 학습 조정 방법입니다.
실전에서는 어디에서 만나나요?
- 사기·이상 거래 탐지: 정상 거래는 많고 사기 거래는 드뭅니다.
- 의료·안전 경보: 희귀 질환이나 위험 사건은 적지만 놓쳤을 때 비용이 큽니다.
- 제조 불량 탐지: 정상 제품이 대부분이라 불량 사례를 충분히 모으기 어렵습니다.
- 콘텐츠 모더레이션: 일반 콘텐츠에 비해 특정 유해 유형의 신고 사례가 적습니다.
- 고객 문의 분류: 긴급 장애 문의는 적어도 먼저 찾아야 합니다.
실전 팁: 첫 모델을 만들기 전에 클래스별 건수, 가장 위험한 오류, 주 평가 지표를 한 장에 적어 두세요. 모델을 바꾸기 전 데이터와 평가 기준의 문제가 먼저 보일 수 있습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 정확도만으로 모델을 고르지 않습니다. 소수 클래스를 모두 놓치는 모델도 높은 정확도를 얻을 수 있습니다. 정밀도·재현율과 혼동 행렬을 함께 봅니다.
둘째, 무조건 50대 50으로 맞추지 않습니다. Google 문서는 재표본화 비율을 하이퍼파라미터처럼 실험해야 한다고 설명합니다. 실제 발생 비율과 오류 비용에 따라 알맞은 비율이 달라집니다.
셋째, 데이터 분할 전에 중복과 누수를 확인합니다. 같은 사례가 학습과 테스트에 함께 들어가면 성능이 부풀려집니다. 시간 순서가 중요한 문제는 미래 정보가 학습에 섞이지 않게 나눕니다.
넷째, 재표본화는 학습 데이터 안에서 처리합니다. 검증·테스트 데이터까지 인위적으로 균형을 맞추면 실제 환경에서의 성능을 잘못 판단할 수 있습니다.
다섯째, 소수 클래스의 양과 품질을 함께 봅니다. 잘못 붙인 라벨 몇 개가 결과에 크게 영향을 줄 수 있습니다. 사례 수를 늘리는 것만큼 라벨 기준과 오류 검토가 중요합니다.
여섯째, 기법을 적용한 뒤 다시 평가합니다. TensorFlow 공식 예제는 클래스 가중치와 오버샘플링을 비교하고 정밀도·재현율 등 여러 지표를 봅니다. 한 방법이 모든 데이터에서 이긴다고 가정하면 안 됩니다.
주의: 클래스 가중치나 오버샘플링은 드문 사례를 자동으로 정확하게 만드는 버튼이 아닙니다. 별도 테스트 데이터와 실제 운영 조건에서 오류를 다시 확인해야 합니다.
초보자를 위한 확인 목록
- 클래스별 개수와 비율을 확인했나요?
- 학습·검증·테스트 데이터의 분포를 따로 봤나요?
- 소수 클래스를 놓쳤을 때의 비용을 적었나요?
- 정확도 외에 정밀도·재현율과 혼동 행렬을 봤나요?
- 재표본화나 클래스 가중치를 학습 데이터에만 적용했나요?
- 소수 클래스 라벨의 품질을 사람이 확인했나요?
- 실제 환경과 비슷한 데이터로 최종 평가했나요?
- 배포 뒤 클래스 비율과 집단별 오류를 모니터링하나요?
자주 묻는 질문
Q1. 몇 대 몇이면 클래스 불균형인가요?
모든 문제에 통하는 고정 비율은 없습니다. 클래스 수의 차이 때문에 소수 클래스를 충분히 학습·평가하지 못하거나 중요한 오류가 숨는지가 판단 기준입니다.
Q2. 정확도가 99%면 좋은 모델 아닌가요?
반드시 그렇지는 않습니다. 양성이 1%인 데이터에서 전부 음성이라고 예측해도 정확도는 99%입니다. 소수 클래스의 재현율과 정밀도, 실제 오류 비용을 함께 봐야 합니다.
Q3. 데이터를 50대 50으로 맞추면 해결되나요?
아닙니다. 학습에는 도움이 될 수 있지만 실제 발생 비율과 다른 데이터로만 평가하면 성능을 오해할 수 있습니다. 여러 비율과 방법을 검증 데이터에서 비교해야 합니다.
Q4. 클래스 가중치와 오버샘플링 중 무엇이 더 좋은가요?
데이터 양, 모델과 소수 클래스의 다양성에 따라 다릅니다. TensorFlow 예제처럼 기준 모델, 클래스 가중치와 오버샘플링을 같은 평가 기준으로 비교하는 편이 안전합니다.
Q5. 클래스 불균형은 생성형 AI에도 생기나요?
이 용어는 주로 분류 데이터의 라벨 분포를 설명할 때 씁니다. 생성형 AI도 드문 언어·주제·집단의 데이터가 적으면 품질 차이가 생길 수 있지만, 그 문제 전체를 클래스 불균형 하나로 설명할 수는 없습니다.
Q6. 챗GPT로 불균형 데이터를 바로 고칠 수 있나요?
챗GPT는 점검 코드나 실험 계획 초안을 만드는 데 도움을 줄 수 있습니다. 실제 라벨 분포, 개인정보, 재표본화 결과와 모델 성능은 승인된 분석 환경에서 검증해야 합니다.
출처
- Google for Developers, Machine Learning Glossary – Class-imbalanced dataset
- Google for Developers, Datasets – Class-imbalanced datasets
- Google for Developers, Classification – Accuracy, recall, precision, and related metrics
- TensorFlow Core, Classification on imbalanced data
- scikit-learn, compute_class_weight
마무리
클래스 불균형은 분류 데이터에서 특정 클래스가 지나치게 많거나 적은 상태입니다. 드문 사례가 중요한 문제에서는 높은 정확도보다 소수 클래스를 실제로 찾는지 확인하는 일이 먼저입니다.
감자나라ai님이 분류 모델을 검토한다면 클래스별 건수와 혼동 행렬부터 열어 보세요. 그다음 가장 위험한 오류를 정하고, 지표와 재표본화 방법을 같은 테스트 조건에서 비교해야 높은 점수의 착시를 피할 수 있습니다.
