균형 정확도(Balanced Accuracy)란? AI에서 클래스별 재현율을 같은 비중으로 평가하는 지표
TL;DR
균형 정확도는 각 클래스의 재현율을 먼저 구한 뒤 같은 비중으로 평균내는 분류 평가 지표입니다. 흔한 클래스가 전체 정확도를 지배하는 문제를 줄입니다. 이진 분류에서는 양성 재현율과 음성 재현율인 특이도의 산술평균입니다. 데이터 수를 맞추는 학습 기법이나 정밀도와 재현율의 평균은 아닙니다. 클래스별 건수·오류와 우연 보정 여부를 함께 기록하며 점수 하나로 실제 운영 품질을 확정하지 않습니다.
핵심 3줄 요약
- 핵심 1
클래스마다 한 표를 줍니다. 각 클래스의 정답 수가 달라도 클래스별 재현율을 같은 비중으로 합칩니다. - 핵심 2
다수 클래스만 맞히는 착시를 줄입니다. 이진 문제에서 한 클래스만 계속 예측하면 기본 균형 정확도는 50%입니다. - 핵심 3
평가와 학습을 나누어 봅니다. 점수를 바꿔도 학습 데이터나 모델은 저절로 바뀌지 않습니다. 건수·임계값·보정 설정을 함께 확인합니다.
이 글에서 다룰 내용
- 균형 정확도의 한 문장 정의
- 일반·긴급 문의로 비교하는 쉬운 계산 예시
- 클래스별 재현율과 다중 분류의 작동 원리
- 우연 보정·표본 가중치·입력 라벨의 뜻
- 정확도·F1·매크로 재현율·클래스 가중치와의 차이
- 실전 사용처와 평가 데이터 체크리스트
- 클래스 누락·표본 부족·오류 비용의 주의점
균형 정확도를 한 문장으로 정의하면 무엇인가요?
균형 정확도는 정답 클래스별로 맞게 찾은 비율을 계산하고 그 비율들을 동일한 비중으로 평균내는 분류 평가 지표입니다.
영문명은 Balanced Accuracy입니다. 균형정확도 또는 균형 잡힌 정확도라고도 부릅니다. 여기서는 scikit-learn의 balanced_accuracy_score 정의를 기준으로 설명합니다. 문헌에는 다른 확장 정의도 있으므로 같은 이름의 지표라고 모두 같은 계산은 아닙니다.
분류는 문의를 일반·긴급처럼 범주로 나누는 작업입니다. 재현율은 실제로 그 범주에 속한 사례 중 모델이 그 범주로 맞게 분류한 비율입니다. 균형 정확도는 특정 양성 범주만 보지 않고 평가에 포함된 정답 클래스들을 차례로 같은 방식으로 살핍니다.
한 줄 정리: 전체 표본을 한꺼번에 평균내기 전에 클래스별 정답률을 먼저 구하는 지표입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 고객 문의 100건을 일반·긴급으로 나누는 AI를 비교한다고 가정해 보겠습니다. 정답은 일반 90건과 긴급 10건입니다. 아래 숫자는 설명용으로 정한 예측 결과이며 실제 서비스의 측정값이 아닙니다.
- 모델 A는 모든 문의를 일반으로 예측합니다. 일반 90건을 맞히고 긴급 10건을 전부 놓칩니다.
- 모델 B는 일반 90건 중 81건, 긴급 10건 중 8건을 맞힙니다. 일반 9건을 긴급으로 잘못 보내고 긴급 2건을 놓칩니다.
모델 A의 전체 정확도는 90%입니다. 그러나 일반 클래스 재현율은 100%, 긴급 클래스 재현율은 0%이므로 균형 정확도는 두 비율의 평균인 50%입니다. 일반 문의가 많다는 이유만으로 얻은 높은 정답률이 드러납니다.
모델 B의 전체 정확도는 89%입니다. 일반 클래스 재현율은 81 ÷ 90 = 90%, 긴급 클래스 재현율은 8 ÷ 10 = 80%입니다. 균형 정확도는 (90% + 80%) ÷ 2 = 85%입니다. 전체 정확도만 보면 A가 앞서지만 두 클래스를 같은 비중으로 평가하면 B가 앞섭니다.
이 계산은 Python 표준 라이브러리의 분수 연산으로 확인했습니다. scikit-learn 모델을 학습하거나 지표 함수를 실행한 결과로 제시하는 것은 아닙니다. 예시가 보여 주는 것은 평가 기준이 바뀌면 모델의 비교 순서도 달라진다는 점입니다.
쉬운 예시: 많이 접수된 일반 문의와 적게 접수된 긴급 문의에 각각 같은 크기의 평가 몫을 주는 방식입니다.
왜 AI에서 균형 정확도가 중요한가요?
전체 정확도는 표본 하나마다 같은 비중을 줍니다. 일반 문의가 훨씬 많으면 일반 문의의 좋은 성능이 긴급 문의의 실패를 가리기 쉽습니다. 균형 정확도는 각 클래스의 재현율을 따로 평균내므로 빈도가 적다는 이유만으로 그 클래스의 평가 몫이 작아지지 않습니다. 공식 사용자 가이드는 이를 클래스별 재현율의 매크로 평균으로 설명합니다.
여러 유형의 문서를 분류할 때도 쓸 수 있습니다. 자주 들어오는 문서 유형을 잘 맞히는지와 드문 유형도 구분하는지는 다른 질문입니다. 두 모델의 전체 정확도가 비슷하다면 클래스별 재현율과 균형 정확도를 나란히 놓고 차이를 살펴봅니다.
다만 같은 비중은 평가자가 선택한 기준입니다. 긴급 문의를 놓치는 피해와 일반 문의를 잘못 긴급으로 보내는 부담이 실제로 같다는 뜻은 아닙니다. 운영 기준을 정할 때는 점수와 함께 놓친 건수, 불필요한 알림, 사람의 검토 가능량을 봅니다.
핵심 인사이트: 균형 정확도는 클래스 개수 차이로 생긴 평가 착시를 보완하지만 업무의 오류 비용을 대신 정하지 않습니다.
균형 정확도는 어떤 순서로 계산하나요?
정답 클래스마다 맞힌 비율을 구합니다
정답 라벨과 예측 라벨을 같은 사례 순서로 연결합니다. 각 정답 클래스에 속한 전체 건수를 분모로, 그중 같은 클래스로 예측한 건수를 분자로 둡니다. 이진 분류에서 긴급을 양성으로 정하면 긴급 쪽은 TP ÷ (TP + FN), 일반 쪽은 TN ÷ (TN + FP)입니다.
클래스별 재현율을 산술평균합니다
이진 균형 정확도는 양성 재현율과 특이도의 합을 2로 나눕니다. 특이도는 음성을 음성으로 맞힌 비율입니다. 다중 분류에서는 각 클래스의 재현율을 모두 더하고 평가한 클래스 수로 나눕니다. 정밀도와의 조화평균을 계산하는 F1과는 다릅니다.
다중 분류에서도 클래스별 분모를 유지합니다
설명용으로 세 클래스의 정답 건수를 60·30·10건, 맞힌 건수를 54·21·5건으로 정해 보겠습니다. 클래스별 재현율은 90%·70%·50%이고 균형 정확도는 70%입니다. 전체 정확도는 맞힌 80건을 전체 100건으로 나눈 80%입니다. 가장 많은 클래스에 더 높은 성능이 몰렸기 때문에 두 평균이 다르게 나옵니다.
실전 팁: 평균 숫자 옆에 각 클래스의 전체 건수와 맞힌 건수를 남기면 계산을 되짚기 쉽습니다.
주요 설정과 결과는 어떻게 읽나요?
입력은 확률이 아니라 정답과 예측 라벨입니다
공식 함수는
y_true
와
y_pred
를 받습니다. 기본 설정은
adjusted=False
이며 점수 범위는 0부터 1까지입니다. 분류 확률을 직접 넣는 함수가 아니므로 확률 기반 모델에서는 임계값이나 최종 판정 규칙으로 만든 예측 라벨을 사용합니다. 같은 모델이라도 그 규칙이 바뀌면 결과가 달라집니다.
우연 보정은 기준점과 점수 범위를 바꿉니다
adjusted=True
는 우연 수준을 0, 완벽한 분류를 1로 맞추는 보정입니다. 클래스 수가 K이면
(기본 점수 - 1/K) ÷ (1 - 1/K)
로 계산합니다. 모델 B의 이진 기본 점수 0.85는 보정 뒤 0.70입니다. 우연 수준보다 못하면 음수도 나오므로 보정하지 않은 0~1 점수와 섞어 비교하지 않습니다.
표본 가중치는 클래스 내부의 계산에도 쓰입니다
sample_weight
를 사용하면 각 클래스에서 가중치를 합한 전체량과 맞힌 가중치량으로 재현율을 구합니다. 클래스별 결과를 같은 비중으로 평균내는 원리는 유지합니다. 공식 구현도 혼동 행렬의 행별 합과 대각 원소를 사용합니다. 표본 가중치를 바꿨다면 이유와 값을 기록합니다.
가중치 없는 기본 정의는 정답 클래스 빈도의 역수로 표본을 가중한 정확도와 같습니다. 이 관계는 평가 계산의 등가성입니다. 모델의 학습 손실에 클래스 가중치를 넣었다는 뜻은 아니며 새로운 분류기를 자동으로 만드는 절차도 아닙니다.
균형 정확도와 헷갈리는 용어는 무엇이 다른가요?
전체 정확도와 분모가 다릅니다
accuracy_score의 일반적인 단일 라벨 정확도는 전체에서 맞힌 비율입니다. 균형 정확도는 클래스별 비율을 먼저 구합니다. 클래스별 정답 건수가 같고 표본 가중치가 없다면 두 값은 같습니다. 데이터가 불균형해도 클래스별 재현율이 모두 같으면 두 평균이 같을 수 있습니다.
매크로 재현율과 가중 재현율을 구별합니다
recall_score 문서에서 매크로 평균은 클래스별 재현율의 단순 평균이고 가중 평균은 정답 건수로 가중합니다. 평가 클래스 범위와 표본 가중치가 같고 각 클래스가 정답에 존재하면 매크로 재현율은 기본 균형 정확도와 같습니다. 단일 라벨 전체 클래스를 평가하는 가중 재현율은 전체 정확도와 같아 소수 클래스의 평가 몫이 다시 작아집니다.
F1과 확률 품질은 별도 질문입니다
F1은 정밀도와 재현율의 조화평균입니다. 균형 정확도는 정밀도를 평균하는 지표가 아닙니다. 둘 다 예측 라벨을 평가하지만 같은 숫자가 되거나 같은 모델을 선호한다고 보장하지 않습니다. Google 분류 지표 안내처럼 어떤 오류를 줄이려는지에 맞춰 함께 읽습니다. 예측 확률 자체가 믿을 만한지도 별도 검증이 필요합니다.
클래스 가중치와 재표본화는 학습을 바꿉니다
클래스 가중치는 학습 손실의 비중을 조정하고 재표본화는 훈련에 쓰는 사례 구성을 바꿉니다. 균형 정확도는 이미 나온 분류 결과의 평가 기준입니다. 평가 지표를 선택했다고 훈련 데이터의 클래스 수나 모델 계수가 바뀌지는 않습니다.
비교 정리: 정확도는 표본별 평균, 균형 정확도는 클래스별 재현율 평균, F1은 정밀도와 재현율의 결합, 학습 가중치는 훈련 조정입니다.
실전에서는 어디에 쓰이나요?
문의와 문서의 드문 유형을 점검합니다
일반 문의·긴급 문의 또는 여러 문서 유형을 분류할 때 전체 정확도와 함께 확인합니다. 평균이 높아져도 어느 유형이 낮아졌는지 보이도록 클래스별 재현율을 붙입니다. 긴급 문의의 실패가 줄었는지는 놓친 실제 건수로 다시 확인합니다.
분류 모델과 판정 규칙을 비교합니다
같은 평가 사례에 대한 모델 버전이나 임계값 후보를 비교할 때 사용합니다. 지표를 최적화할 검증 자료와 최종 성능을 보고할 테스트 자료를 나눕니다. 테스트 결과를 반복 확인하며 임계값을 고르면 독립 평가의 의미가 약해집니다.
AI 자동화의 분류 부분을 평가합니다
LLM이 문서를 정해진 라벨로 분류하거나 검토 대기열로 보내는 작업에도 적용할 수 있습니다. 자유로운 글쓰기의 완성도, 사실성, 보안과 사용자 경험 전체를 이 지표로 대신하지 않습니다. 정답 라벨을 일관되게 붙일 수 있는 부분 과제로 평가 범위를 한정합니다.
균형 정확도를 적용할 때 어떤 순서로 확인하나요?
1. 정답 라벨과 평가 범위를 고정합니다
각 클래스의 뜻과 포함할 사례를 정하고 사람이 확인한 정답을 준비합니다. 한 사례에 하나의 라벨을 붙이는 이진·다중 분류인지 확인합니다. 여러 라벨을 동시에 붙이는 문제에는 같은 함수를 그대로 적용한다고 가정하지 않습니다.
2. 클래스별 평가 건수를 확인합니다
전체와 분할별 정답 분포를 셉니다. StratifiedKFold는 이진·다중 분류에서 클래스 비율을 가능한 한 유지하도록 나눕니다. 이것만으로 통계적 신뢰도가 보장되지는 않습니다. 소수 사례가 너무 적다면 나누는 횟수와 평가 설계를 먼저 검토합니다.
3. 같은 조건에서 예측을 생성합니다
모델 버전, 전처리, 라벨 코드표와 임계값을 기록합니다. 예측과 정답의 사례 ID 및 순서를 맞춥니다. 누락된 예측을 조용히 빼거나 라벨 이름만 다른 값을 같은 범주로 착각하면 평가 대상과 계산이 달라집니다.
4. 평균과 원본 오류를 함께 저장합니다
균형 정확도와 전체 정확도, 클래스별 재현율·건수·혼동 행렬을 같은 평가 결과에서 남깁니다. 우연 보정과 표본 가중치 사용 여부도 적습니다. 숫자가 좋아진 모델에서 실제 오탐과 미탐이 어느 쪽으로 옮겨갔는지 확인합니다.
5. 독립 자료와 운영 조건에서 검증합니다
튜닝에 쓰지 않은 자료에서 다시 평가합니다. 작은 점수 차이를 확정적인 우위로 해석하기 전에 클래스별 표본 수와 반복 평가의 변동을 살핍니다. 시간이나 사용자 집단이 다른 자료에서도 중요한 오류가 줄었는지 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 정답에 없는 클래스를 자동으로 0점 평가했다고 생각하지 않습니다. 공식 구현은 분모가 없는 클래스의 재현율을 평균에서 제외하며 예측에만 있는 클래스라면 경고합니다. 정답에 한 클래스만 들어간 평가에서 높은 점수가 나와도 두 클래스의 구분 능력을 확인한 결과는 아닙니다. 모든 필요한 클래스가 실제 평가 자료에 있는지 먼저 봅니다.
둘째, 소수 클래스의 적은 건수를 숨기지 않습니다. 같은 비중으로 평균내도 적은 표본의 정보가 늘어나는 것은 아닙니다. 소수 클래스에서 한 건만 맞거나 틀려도 비율이 크게 변할 수 있습니다. 점수와 함께 원본 건수 및 평가 변동을 보고합니다.
셋째, 평균이 좋아도 개별 클래스의 실패를 봅니다. 한 클래스가 매우 낮아도 다른 클래스가 높으면 평균이 이를 일부 가립니다. 중요한 클래스에는 별도 기준을 둡니다. 모든 클래스가 비슷하게 잘 작동하거나 모든 사용자 집단에 공정하다는 뜻으로 읽지 않습니다.
넷째, 운영 정밀도와 검토 부담을 함께 확인합니다. 클래스별 재현율을 같은 비중으로 평가해도 경고 중 실제 긴급 문의의 비율이 자동으로 정해지지는 않습니다. 운영의 클래스 비율과 오탐 건수에 따라 담당자의 검토 부담은 달라집니다.
다섯째, 점수를 보기 좋게 만들려고 평가 자료를 고치지 않습니다. 쉬운 소수 사례만 남기거나 실패한 예측을 빼면 비교의 의미가 없어집니다. 학습용 재표본화와 최종 평가 자료를 나누고 불편한 실패 사례도 같은 기준으로 포함합니다.
주의: 균형 정확도는 모델을 고치는 버튼도, 자동 조치의 안전성을 보장하는 점수도 아닙니다. 누락 클래스·작은 표본·실제 오류 비용을 함께 확인합니다.
자주 묻는 질문
Q1. 균형 정확도는 정확도보다 항상 좋은가요?
아닙니다. 클래스별 재현율에 같은 비중을 주고 싶은 평가에 유용합니다. 전체 사례의 정답률이나 다른 오류 비용이 더 중요한 업무라면 그 지표도 함께 봅니다. 어느 하나로 모든 평가를 대신하지 않습니다.
Q2. 두 클래스에서 50%는 무조건 형편없는 모델인가요?
기본 이진 균형 정확도에서 50%는 한 클래스만 계속 예측하는 기준 모델의 점수입니다. 양쪽 정답 클래스가 있는 평가를 전제로 합니다. 실제 오류 건수와 목적을 함께 비교하며 우연 보정 점수 0.50과 혼동하지 않습니다.
Q3. 여러 클래스에서도 사용할 수 있나요?
네. 여기서 설명한 정의는 각 클래스 재현율의 평균입니다. 모든 정답 클래스가 포함되고 표본 가중치를 쓰지 않는다면 한 클래스만 예측하는 기준은 1을 클래스 수로 나눈 값입니다. 클래스 수가 다른 문제의 점수를 곧바로 비교하지 않습니다.
Q4. 정밀도와 재현율을 평균하면 균형 정확도인가요?
아닙니다. 이진 균형 정확도는 양성 재현율과 특이도의 산술평균입니다. 정밀도와 재현율을 조화평균한 지표는 F1입니다. 계산에 사용하는 분모부터 구별하면 이름의 균형이라는 표현에 덜 혼동됩니다.
Q5. 점수를 계산하려면 평가 데이터를 50대 50으로 맞춰야 하나요?
그럴 필요는 없습니다. 원래 평가 자료에서 클래스별 비율을 계산한 뒤 동일한 비중으로 평균냅니다. 다만 모든 필요한 클래스가 포함되고 각 클래스에 평가 가능한 사례가 충분한지 확인합니다.
Q6. adjusted=True의 결과가 음수면 오류인가요?
반드시 오류는 아닙니다. 우연 보정은 우연 기준보다 낮은 성능을 음수로 나타낼 수 있습니다. 클래스가 하나뿐인 평가나 분모가 없는 계산은 따로 점검합니다. 보정 설정을 명시하고 같은 설정끼리 비교합니다.
출처
마무리
균형 정확도는 클래스별 재현율을 같은 비중으로 평균내는 분류 평가 지표입니다. 전체 정확도가 다수 클래스의 성능에 가려지는 상황을 보완하고 이진 분류에서는 양성 재현율과 특이도를 함께 봅니다.
감자나라ai님이 분류 결과를 검토한다면 전체 정답률과 클래스별 건수를 먼저 확인해 보세요. 그다음 균형 정확도의 계산 범위와 보정 설정을 맞추고 중요한 범주의 재현율·정밀도와 원본 오류를 함께 읽습니다. 같은 비중의 평균이 실제 업무의 좋은 판단으로 이어지는지는 별도 자료와 운영 조건에서 검증합니다.
