해밍 손실(Hamming Loss)이란? AI에서 여러 라벨의 개별 판정 오류를 세는 지표
TL;DR
해밍 손실은 정답과 예측을 라벨별로 비교해 틀린 판정이 전체 판정 칸에서 차지하는 비율을 계산하는 평가 지표입니다. 한 문서에 여러 태그를 붙이는 다중 라벨 분류에서 일부만 틀린 결과를 구별합니다. 0에 가까울수록 좋지만 붙지 않는 라벨이 많으면 모두 제외한 예측도 낮은 손실을 받을 수 있습니다. 문서 전체의 완전 일치율·라벨별 재현율과 함께 읽어야 합니다.
핵심 3줄 요약
- 핵심 1
개별 판정 칸을 셉니다. 다중 라벨에서는 문서 수와 고정된 라벨 수를 곱한 전체 칸 중 잘못 판정한 비율을 구합니다. - 핵심 2
부분적으로 맞힌 결과를 구분합니다. 태그 하나를 놓친 문서와 여러 태그를 틀린 문서의 기여가 다릅니다. 문서 전체 일치율과는 별개입니다. - 핵심 3
낮은 손실도 놓침을 숨길 수 있습니다. 대부분 비어 있는 라벨을 맞힌 효과가 섞입니다. 양성 비율과 실제 놓친 태그를 함께 확인합니다.
이 글에서 다룰 내용
- 해밍 손실의 한 문장 정의
- 문서 세 건과 네 태그로 보는 계산 예시
- 다중 클래스와 다중 라벨의 분모 차이
- 입력 행렬·표본 가중치·반환값의 뜻
- 정확도·F1·해밍 거리와의 구분
- 문서 태깅과 AI 평가의 실전 체크리스트
- 라벨 희소성·미확인 정답과 평가의 주의점
해밍 손실을 한 문장으로 정의하면 무엇인가요?
해밍 손실은 같은 표본의 정답 라벨과 예측 라벨 사이에서 불일치한 판정의 비율을 평균한 분류 평가 지표입니다.
영문명은 Hamming Loss입니다. 이 글의 중심인 다중 라벨 분류는 문서 하나에 배송·환불 같은 태그를 동시에 붙이는 문제입니다. 여러 후보 중 하나만 고르는 다중 클래스 분류와 구분합니다. 라벨의 존재 여부를 각각 1과 0으로 놓고 비교합니다.
scikit-learn의 공식 API는 손실을 잘못 예측한 라벨의 비율로 설명합니다. 여기서 손실은 모델을 평가하는 계산 결과입니다. 이 함수를 호출했다고 모델이 학습되거나, 잘못 붙인 태그를 자동으로 고치는 것은 아닙니다.
한 줄 정리: 다중 라벨 해밍 손실은 태그별 예·아니요 판정 중 틀린 칸의 비율입니다. 틀린 문서의 비율과는 분모가 다릅니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 문의 문서 세 건에 배송·환불·불만·계정 태그를 붙인다고 가정하겠습니다. 태그 순서는 네 가지로 고정하고 해당하면 1, 해당하지 않으면 0을 기록합니다. 한 문의에 태그가 여러 개 붙어도 됩니다.
- 첫 문서: 정답
[1, 1, 0, 0], 예측[1, 0, 0, 0]입니다. 환불을 놓쳐 한 칸을 틀렸습니다. - 둘째 문서: 정답
[0, 1, 1, 0], 예측[0, 1, 0, 1]입니다. 불만을 놓치고 계정을 잘못 붙여 두 칸을 틀렸습니다. - 셋째 문서: 정답과 예측이 모두
[0, 0, 0, 1]입니다. 네 칸을 모두 맞혔습니다.
전체 판정은 세 문서에 네 태그씩, 총 12칸입니다. 틀린 칸은 3개이므로 해밍 손실은
3 ÷ 12 = 0.25
입니다. 문서 단위로 전부 맞힌 것은 셋째 문서뿐이므로 완전 일치율은
1 ÷ 3
입니다. 두 숫자는 서로 다른 결과를 요약합니다.
이 예시는 Python 표준 라이브러리의 정확한 분수 계산으로 검산한 설명용 자료입니다. scikit-learn이나 SciPy 함수를 실행한 측정값, 실제 문의 모델의 성능 수치로 제시한 것은 아닙니다.
쉬운 예시: 해밍 손실 0.25는 이 자료의 판정 칸 중 25%가 틀렸다는 뜻입니다. 문서의 75%를 완벽하게 처리했다는 뜻으로 바꾸지 않습니다.
왜 AI에서 해밍 손실이 중요한가요?
문서 안의 부분 오류를 구별합니다
문서 전체가 한 번이라도 틀리면 모두 실패로 세는 평가에서는 태그 하나 누락과 여러 태그 오류가 같은 실패 한 건입니다. 해밍 손실은 잘못된 칸을 각각 세므로 어떤 수정으로 개별 판정 오류가 줄었는지 살필 수 있습니다.
동시에 붙는 여러 라벨을 평가합니다
한 이미지에 여러 사물이 있거나 한 글에 여러 주제가 있으면 정답을 하나로 줄이기 어렵습니다. 라벨별 존재 여부를 같은 규칙으로 배열하면 여러 결과를 한 숫자로 요약합니다. 계산상 라벨별로 센다고 모델이 라벨 사이 관계를 독립적으로 학습해야 하는 것은 아닙니다.
평가 기준이 세는 단위를 분명히 합니다
낮은 손실과 높은 문서 일치율은 항상 함께 움직이지 않습니다. 보고서에 문서 수, 라벨 목록과 양성 판정 수를 남기면 점수 차이의 원인을 구분하기 쉽습니다. 업무에서 문서 전체의 무수정 처리가 목표라면 완전 일치율을 따로 둡니다.
해밍 손실은 어떤 순서로 계산하나요?
1. 같은 문서와 라벨의 위치를 맞춥니다
행은 평가 문서이고 열은 태그입니다. 정답과 예측의 문서 순서·태그 순서·행렬 크기를 동일하게 맞춥니다. 배송 열과 환불 열이 바뀌면 모델이 맞혔어도 다른 판정끼리 비교해 오류가 생깁니다.
2. 각 칸에서 일치 여부를 확인합니다
정답 1을 0으로 예측한 누락과 정답 0을 1로 예측한 오탐은 각각 오류 한 칸입니다. 정답과 예측이 같으면 기여는 0입니다. 기본 계산은 누락과 오탐의 비용을 다르게 정하지 않습니다.
3. 전체 판정 칸으로 나누어 평균합니다
공식 평가 안내의 다중 라벨 계산은 불일치 수를 표본 수와 라벨 수의 곱으로 나눕니다. 모든 문서가 동일한 라벨 목록을 쓴다는 조건입니다. 정답이 일부만 알려진 자료를 임의로 같은 완전 행렬로 간주하지 않습니다.
4. 한 라벨만 고르는 문제는 별도로 읽습니다
이진·다중 클래스의 일차원 라벨 배열에서는 각 문서의 예측 클래스가 맞는지 비교합니다. 손실은 오분류한 문서의 비율입니다. 틀린 클래스 하나를 누락과 오탐 두 개로 세거나 가능한 클래스 수로 한 번 더 나누지 않습니다.
실전 팁: 평가 전에 입력이 단일 라벨 목록인지 다중 라벨 표시 행렬인지 적어 두세요. 같은 함수 이름이라도 입력 표현을 바꾸면 세는 단위가 달라집니다.
주요 설정과 결과는 어떻게 읽나요?
입력은 확률이 아닌 예측 라벨입니다
hamming_loss(y_true, y_pred, sample_weight=None)
에서 두 입력은 정답과 최종 예측입니다. 다중 라벨은 같은 크기의 0·1 표시 행렬을 사용하며 희소 행렬도 지원합니다. 모델의 연속 확률을 그대로 넣어 확률 품질을 측정하는 함수가 아닙니다.
확률을 태그로 바꾸는 임계값은 평가 전에 정합니다. 확인한 API에는
average
나
normalize
인수가 없습니다. 다른 지표의 매크로 평균 설정이나 오류 개수 반환 옵션을 그대로 옮겨 넣지 않습니다.
sample_weight는 문서의 비중입니다
표본 가중치는 문서마다 적용합니다. 앞의 세 문서에
[1, 2, 1]
을 주면 둘째 문서의 오류 두 칸을 두 배로 반영합니다. 가중 오류는 5, 가중 판정 칸은 16이므로 손실은
5 ÷ 16 = 0.3125
입니다. 라벨별 중요도나 누락 비용을 지정한 것은 아닙니다.
버전을 고정한 공식 구현은 다중 라벨의 가중 불일치를 라벨 수와 표본 가중치 합으로 나누고, 단일 라벨에서는 불일치 여부를 가중평균합니다. 일반 안내의 행렬식만 보고 모든 입력에 같은 분모를 적용하지 않습니다.
결과 범위와 보완 지표를 함께 봅니다
일반적인 음수가 아닌 가중치와 양수인 가중치 합 아래에서 손실은 0부터 1 사이이고 낮을수록 좋습니다. 0은 평가한 모든 칸이 맞았다는 뜻이며 미래 자료의 완벽함을 보장하지 않습니다. 원본 예시에서 하나라도 틀린 문서의 비율은
2 ÷ 3
으로 해밍 손실보다 큽니다.
해밍 손실과 헷갈리는 용어는 무엇이 다른가요?
정확도·부분집합 일치율과의 차이
기존 정확도는 전체 예측의 정답률을 설명합니다. accuracy_score 공식 문서는 다중 라벨 입력에서 모든 라벨이 일치해야 문서 한 건을 맞힌 것으로 셉니다. 따라서 다중 라벨 해밍 손실을 단순히 그 정확도의 반대값으로 읽으면 틀립니다.
정밀도·재현율·F1과의 차이
F1 점수는 정밀도와 재현율을 조합합니다. 해밍 손실은 붙지 않은 라벨을 올바르게 제외한 칸까지 분모에 포함합니다. 드문 태그를 계속 놓쳐도 전체 불일치 비율이 작게 보일 수 있어 라벨별 정밀도와 재현율을 함께 봅니다.
해밍 거리·확률 손실과의 차이
해밍 거리는 같은 길이의 두 표현에서 다른 위치를 비교하는 개념이며 개수와 정규화된 비율을 구별해야 합니다. SciPy의 hamming 함수는 일차원 배열의 불일치 비율을 반환합니다. 여기의
w
는 벡터 위치 가중치이므로 scikit-learn의 문서별
sample_weight
와 적용 축이 다릅니다.
해밍 손실은 이미 정한 라벨을 평가합니다. 브라이어 점수와 로그 손실은 예측 확률을 평가하므로 최종 태그가 같아도 다르게 나옵니다. 낮은 해밍 손실만으로 확률이 잘 보정됐다고 판단하지 않습니다.
비교 정리: 해밍 손실은 개별 라벨 오류, 부분집합 일치율은 문서 전체 일치, F1은 양성 판정의 정밀도·재현율을 요약합니다. 확률 품질은 별도로 평가합니다.
실전에서는 어디에 쓰이나요?
문서·이미지의 여러 태그를 비교합니다
문의 유형, 문서 주제나 사진 속 사물의 존재 여부처럼 여러 태그가 동시에 참인 작업에 씁니다. 같은 자료와 라벨 목록을 유지한 채 모델·프롬프트·임계값의 변경 전후를 비교합니다. 모든 업무에 통하는 합격 수치가 정해진 것은 아닙니다.
LLM 평가의 이진 항목을 점검합니다
사람이 검수한 정답과 모델의 고정된 예·아니요 항목을 비교하는 용도로 검토합니다. 다만 답변의 사실성·안전성·문체 전체를 자동으로 한 점수로 바꾸지는 않습니다. 적용되지 않는 항목과 미확인 답을 먼저 분리하고, 각 항목의 오류가 만드는 피해도 따로 기록합니다.
해밍 손실을 적용할 때 어떤 순서로 확인하나요?
1. 평가 범위와 라벨 목록을 고정합니다
한 행이 문의인지 문서인지 정하고 태그의 정의·순서·전체 개수를 보관합니다. 한 문서에 태그 여러 개를 허용하는지도 명시합니다. 같은 고객의 거의 같은 문서가 훈련과 테스트에 함께 들어가지 않도록 자료를 나눕니다.
2. 정답과 예측을 작은 배열로 확인합니다
누락 하나, 오탐 하나, 전부 일치하는 예시를 손으로 읽고 계산 결과와 대조합니다. 모델이 반환한 태그 집합을 같은 열 순서로 변환하며 없는 태그와 아직 검수하지 않은 태그를 구별합니다. 행렬 크기가 맞는지만으로 의미까지 맞는 것은 아닙니다.
3. 기준 모델과 중요한 오류를 함께 남깁니다
모든 태그를 제외하는 단순 예측과 비교하고 라벨별 양성 수·재현율·정밀도, 문서 완전 일치율을 함께 저장합니다. 임계값은 검증 자료에서 고른 뒤 독립 테스트에 적용합니다. 평가표에 유리하도록 테스트 결과를 보며 계속 기준을 바꾸지 않습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 라벨의 희소성을 확인합니다. 100칸 중 실제 양성이 한 칸뿐인데 모두 0으로 예측하면 해밍 손실은 0.01입니다. 유일한 양성을 놓쳤어도 낮은 값이 나옵니다. 이 설명용 계산처럼 음성 칸이 많은 효과를 실제 탐지 성공과 구분합니다.
둘째, 라벨 수를 바꾼 점수를 바로 비교하지 않습니다. 앞의 예시에 항상 0이고 정확히 예측한 태그 열을 하나 추가하면 오류는 그대로여도 손실은
3 ÷ 15 = 0.2
로 낮아집니다. 서로 다른 태그 목록의 점수 차이를 모델 개선으로 주장하면 안 됩니다.
셋째, 미확인 정답을 0으로 채우지 않습니다. 모르는 태그를 실제 음성처럼 넣으면 올바른 예측을 오탐으로 세거나 놓침을 숨깁니다. 확인한 hamming_loss API에는 미확인 칸을 지정하는 마스크 인수가 없습니다. 평가 범위와 결측 처리 규칙을 별도로 설계합니다.
넷째, 오류의 위험과 표본 수를 함께 봅니다. 기본 손실은 중요한 태그의 누락과 가벼운 오탐을 같은 한 칸으로 셉니다. 문서 수가 적으면 평균도 흔들립니다. 중요한 라벨은 원본 사례를 검수하고 사람 승인·재검토 경로를 유지합니다.
주의: 손실이 낮다는 이유만으로 자동 처리를 승인하지 않습니다. 드문 태그의 놓침, 문서 전체의 실패와 평가 자료가 실제 운영을 대표하는지를 따로 확인합니다.
자주 묻는 질문
Q1. 해밍 손실은 높을수록 좋은가요?
아닙니다. 같은 자료와 라벨 체계에서는 0에 가까울수록 불일치가 적습니다. 낮은 숫자도 대부분의 태그를 제외한 결과일 수 있으므로 양성 태그의 재현율을 같이 봅니다.
Q2. 1에서 정확도를 빼면 해밍 손실인가요?
단일 라벨 이진·다중 클래스에서는 같은 자료와 가중치의 정규화된 정확도에 대해 그렇습니다. 다중 라벨 accuracy_score는 문서 전체 일치를 세므로 해밍 손실과 일반적으로 그 관계가 성립하지 않습니다.
Q3. 확률 행렬을 그대로 넣어도 되나요?
이 함수의 예측 입력은 최종 라벨입니다. 확률은 미리 정한 규칙으로 0·1 판정으로 바꿉니다. 확률 자체의 품질이 목적이라면 확률 손실을 별도로 선택합니다.
Q4. sample_weight로 중요한 태그를 강조하나요?
이 인수는 문서별 비중입니다. 한 문서의 태그 열마다 다른 중요도를 주거나 누락과 오탐에 별도 비용을 주는 설정은 아닙니다. 평가 함수와 업무 비용을 구분합니다.
Q5. 다중 클래스를 원-핫으로 바꿔도 같은 값인가요?
같다고 가정하면 안 됩니다. 세 클래스에서 세 문서 중 하나를 틀리면 일차원 라벨의 손실은 1/3입니다. 같은 결과를 세 열의 원-핫으로 비교하면 두 칸이 달라 2/9입니다. 입력 표현이 분모와 단위를 바꿉니다.
Q6. 손실이 0이면 라벨링과 모델 모두 완벽한가요?
평가에 넣은 칸의 예측이 주어진 정답과 같다는 뜻입니다. 정답의 오류나 미확인 항목, 새로운 자료의 실패까지 검증한 것은 아닙니다. 별도 정답 검수와 독립 평가가 남습니다.
출처
마무리
해밍 손실은 정답과 예측이 다른 개별 판정의 비율을 계산합니다. 다중 라벨의 부분 오류를 읽는 데 유용하며, 단일 라벨의 오분류율과 다중 라벨의 문서 완전 일치율을 구분하는 것이 핵심입니다.
감자나라ai님이 평가표에 넣는다면 문서 수·태그 목록·양성 비율·임계값부터 기록해 보세요. 같은 조건의 기준 모델과 비교하고 라벨별 놓침과 문서 전체 실패를 함께 남기면 낮은 평균에 가려진 오류를 찾기 쉽습니다.
