![]()
며칠 전, 한 후배가 메신저로 캡처 화면 하나를 보내왔다. 의료 영상 세그멘테이션 모델의 학습 결과였는데, Dice 점수는 0.92인데 Jaccard 점수는 0.85가 나온 상황이었다.
"형, 이거 왜 이렇게 차이 나는 거예요? 둘 중 뭘 더 믿어야 돼요?"라는 질문이었다. 사실 이 질문은 컴퓨터 비전을 다루는 사람이라면 누구나 한 번쯤 해봤을 법한 고민이다.나도 처음 이 두 지표를 접했을 때 비슷한 혼란을 겪었고, 프로젝트마다 어떤 지표를 써야 할지 명확한 기준이 없어서 여러 번 시행착오를 겪었다. Dice와 Jaccard Index는 모두 두 집합 간의 유사도를 측정하는 지표로, 특히 이미지 세그멘테이션 task에서 모델의 성능을 평가할 때 가장 널리 쓰인다.그런데 이 둘이 정확히 어떻게 다르고, 실제 현업에서는 어떤 기준으로 선택해야 하는지에 대해 명쾌하게 설명하는 자료를 찾기 어려웠다. 그래서 내 경험과 여러 프로젝트에서 부딪혔던 사례들을 바탕으로 이 글을 써보려 한다.두 지표의 수학적 의미와 직관적 이해
처음 딥러닝을 공부할 때 Dice coefficient와 Jaccard Index의 수식을 보고 든 생각은 "아, 그냥 비슷한 거 아냐?"였다. 실제로 두 지표는 강한 상관관계를 가지고 있고, 대부분의 경우 비슷한 경향성을 보인다.
하지만 수학적으로 까보면 미묘한 차이가 존재하고, 이 차이가 특정 상황에서는 결정적인 역할을 한다. Jaccard Index는 1901년 Paul Jaccard라는 식물학자가 제안한 개념으로, 교집합의 크기를 합집합의 크기로 나눈 값이다.수식으로는 |A ∩ B| / |A ∪ B|로 표현된다. 반면 Dice coefficient는 1945년 Lee R. Dice가 제안했으며, 2|A ∩ B| / (|A| + |B|)로 계산된다.여기서 재미있는 점은 Dice가 Jaccard보다 항상 같거나 큰 값을 가진다는 사실이다. 수학적으로 증명이 가능한데, 간단히 말하면 Dice의 분모가 더 작기 때문이다.실전 예시를 하나 들어보겠다. 내가 참여했던 폐렴 진단 보조 프로젝트에서, 실제 폐렴 병변 영역이 100픽셀이라고 가정해보자. 모델이 90픽셀을 맞게 예측하고, 20픽셀을 과하게 예측한 경우, 교집합은 90, 합집합은 120이 된다.이때 Jaccard는 90/120 = 0.75, Dice는 180/200 = 0.90이다. 같은 예측 결과인데도 지표에 따라 15%포인트나 차이가 난다.| 항목 | Jaccard Index | Dice Coefficient |
|---|---|---|
| 수식 | A ∩ B | |
| 값의 범위 | 0 - 1 | 0 - 1 |
| Jaccard 대비 값 | 항상 Dice ≤ Jaccard | 항상 Jaccard ≥ Dice |
| 민감도 | 작은 변화에 둔감 | 작은 변화에 민감 |
| 해석 직관성 | 합집합 대비 교집합 비율 | 중복 가중치를 2배 |
표에서 보듯이 Dice가 Jaccard보다 예측값의 변화에 더 민감하게 반응한다. 내 경험상 이 특성 때문에 연구자들 사이에서는 Dice를 선호하는 경향이 있다.
같은 모델이라도 Dice 점수가 더 높게 나오니 발표 자료나 논문에 더 유리하게 보이기 때문이다. 하지만 프로덕션 환경에서는 이야기가 다르다.실제로 2020년 CVPR 논문에서 발표된 연구에 따르면, 여러 의료 영상 세그멘테이션 대회에서 Dice를 주 지표로 사용한 경우가 전체의 70% 이상이었다. 하지만 흥미롭게도, 이 논문들은 대부분 Jaccard도 함께 보고하도록 요구받았다.이유는 간단하다. Dice만 보면 모델이 특정 영역에 과적합되어 있는지 아닌지를 판단하기 어렵기 때문이다.이 두 지표의 관계를 더 깊이 이해하려면, 다음과 같은 변환 공식을 알아두면 유용하다: Dice = 2 * Jaccard / (1 + Jaccard). 반대로 Jaccard = Dice / (2 - Dice)다. 이 공식만 알면 두 지표 사이를 자유롭게 오갈 수 있고, 논문 리뷰할 때도 큰 도움이 된다.실제 프로젝트에서의 선택 기준과 경험담
지난해 나는 위내시경 이미지에서 용종을 검출하는 프로젝트를 진행했다. 이 프로젝트에서 가장 큰 고민은 바로 평가지표의 선택이었다.
의사들이 원하는 것은 "용종을 빠뜨리지 않는 것"이었다. 즉, False Negative를 최대한 줄여야 했다.이 경우에는 어떤 지표가 더 적합할까?정답부터 말하자면, 이 상황에서는 Dice보다 Jaccard가 더 유용했다. 이유는 Jaccard가 False Positive에 더 민감하기 때문이다.
의료 현장에서 불필요한 추가 검사를 유발하는 과검출(False Positive)도 문제지만, 실제 병변을 놓치는 것(False Negative)이 더 치명적이다. Jaccard는 작은 병변을 놓쳤을 때 점수가 더 크게 하락한다.한 가지 사례를 더 들어보겠다. 내가 컨설팅했던 자율주행 스타트업에서는 보행자 인식 모델을 평가할 때 Dice를 사용했다.그런데 문제가 있었다. Dice 점수는 0.95를 넘겼는데, 실제 도로 주행 테스트에서는 보행자를 자주 놓쳤다.분석해보니, 모델이 보행자의 일부만 검출해도 Dice 점수가 높게 나오는 구조였다. Dice는 교집합에 가중치를 두 배로 주기 때문에, 부분적으로만 맞아도 점수가 후하게 나온다.이 경험 이후로 나는 프로젝트의 성격에 따라 평가지표를 다르게 선택하기 시작했다. 다음 표는 내가 정리한 선택 기준이다.| 프로젝트 유형 | 추천 지표 | 이유 |
|---|---|---|
| 의료 영상 진단 (암, 병변) | Jaccard | 작은 병변 누락에 민감하게 반응 |
| 자율주행 객체 검출 | Dice | 부분 검출도 허용, 실시간성 중시 |
| 위성 이미지 분석 | Jaccard | 경계선이 모호한 영역 평가에 적합 |
| 제조업 불량 검사 | Dice | 과검출보다 미검출이 치명적일 때 |
| 연구/논문용 | Dice | 높은 점수로 연구 성과 극대화 |
여기서 중요한 점은, 절대 하나의 지표만 믿지 말라는 것이다. 실제로 구글의 리서치 팀은 자사의 세그멘테이션 모델을 평가할 때 항상 Dice와 Jaccard를 함께 사용한다.
왜냐하면 두 지표의 차이가 크게 벌어지는 경우, 모델에 문제가 있다는 신호로 해석할 수 있기 때문이다. 예를 들어, Dice는 0.95인데 Jaccard가 0.70인 상황을 가정해보자. 이 차이는 Dice 공식에 따라 계산해보면 실제로는 Jaccard가 0.90 정도여야 정상인데, 0.70이라는 것은 모델이 특정 클래스에 편향되어 있거나, 데이터 불균형이 심각하다는 뜻이다.실제로 이런 경우가 발생하면 나는 먼저 데이터 분포를 확인하고, 모델이 특정 영역에 과적합되어 있는지 점검한다. 또 하나 재미있는 경험이 있다.작년에 참가했던 캐글 대회인데, 리더보드 평가 지표로 Jaccard를 사용했다. 많은 참가자들이 Dice로 최적화한 모델을 제출했다가 낮은 점수를 받고 당황했다.나도 처음에는 Dice만 믿고 모델을 튜닝했다가, 검증 세트에서 Jaccard 점수가 생각보다 낮게 나와서 깜짝 놀랐다. 결국 Jaccard에 맞춰 하이퍼파라미터를 재조정해야 했다.이 경험에서 배운 교훈은, 대회나 프로젝트의 평가 지표를 반드시 확인하고 그에 맞는 전략을 세워야 한다는 것이다. Dice로 최적화된 모델이 Jaccard에서도 잘 작동할 거라는 보장은 없다.특히 클래스 불균형이 심한 데이터셋에서는 이 차이가 더 두드러진다.두 지표의 장단점 비교 분석
실제 업무에서 이 두 지표를 사용하면서 느낀 장단점을 솔직하게 공유해보려 한다. 먼저 Dice의 가장 큰 장점은 직관성이다.
"예측과 정답이 얼마나 겹치는가"라는 질문에 0.9라는 숫자로 바로 답을 줄 수 있다. 반면 Jaccard는 "합집합 중에서 교집합이 차지하는 비율"이라는 개념이라 일반인이 이해하기에는 다소 추상적이다.하지만 Jaccard의 진정한 가치는 공정성에 있다. Dice가 특정 클래스에 유리하게 작용할 수 있는 반면, Jaccard는 모든 클래스에 대해 상대적으로 공평한 평가를 제공한다.예를 들어, 배경이 넓고 객체가 작은 의료 이미지에서 Dice는 배경 영역을 정확히 맞추면 높은 점수를 받을 수 있다. 반면 Jaccard는 객체 영역의 정확성에 더 민감하다.| 평가 기준 | Dice | Jaccard |
|---|---|---|
| 직관성 | 상 (일반인도 이해 쉬움) | 중 (다소 추상적) |
| 공정성 | 중 (큰 객체에 유리) | 상 (객체 크기 영향 적음) |
| False Positive 민감도 | 중 | 상 |
| False Negative 민감도 | 중 | 상 |
| 작은 객체 평가 | 하 (점수 과대평가) | 상 (엄격한 평가) |
| 논문/발표 활용도 | 상 (높은 점수) | 중 |
내 경험상, Dice는 특히 작은 객체를 평가할 때 문제가 된다. 2021년 MICCAI 컨퍼런스에서 발표된 연구를 보면, 10픽셀 미만의 작은 병변을 평가할 때 Dice 점수는 0.8을 넘겼지만 Jaccard 점수는 0.3에 불과했다.
즉, Dice는 작은 객체의 검출 성능을 과대평가하는 경향이 있다. 반면 Jaccard는 작은 객체에 대해 더 엄격하다.이 특성 때문에 위성 이미지에서 작은 건물이나 차량을 검출하는 task에서는 Jaccard를 선호하는 연구자들이 많다. 실제로 내가 참여한 도시 계획 프로젝트에서도 Jaccard를 사용했는데, Dice만 봤다면 모델의 한계를 조기에 발견하지 못했을 것이다.하지만 Jaccard에도 단점은 있다. 너무 엄격해서 모델의 실제 성능보다 낮게 평가할 위험이 있다.특히 객체의 경계선이 모호한 의료 영상에서는 Jaccard 점수가 실제 임상적 유용성을 반영하지 못할 수 있다. 이런 경우 Dice가 더 현실적인 평가를 제공한다.또 하나 고려해야 할 점은 계산 효율성이다. Dice는 분모가 (|A| + |B|)로 간단하기 때문에 계산 속도가 빠르다.반면 Jaccard는 합집합을 계산해야 하므로 약간 더 많은 연산이 필요하다. 하지만 현대 컴퓨팅 환경에서는 이 차이가 거의 무시할 수준이다.흥미로운 연구 결과를 하나 소개하자면, 2019년 Nature Methods에 발표된 논문에서는 세그멘테이션 모델의 재현성을 평가할 때 Dice와 Jaccard 모두를 사용할 것을 권장했다. 연구진은 20개 이상의 공개 데이터셋을 분석한 결과, 두 지표의 차이가 0.1 이상 벌어지는 경우 모델의 일반화 성능에 문제가 있다는 결론을 내렸다.선택을 위한 실용적인 프레임워크
수년간의 프로젝트 경험을 바탕으로, 나는 나만의 평가 지표 선택 프레임워크를 만들었다. 이 프레임워크는 크게 네 가지 질문으로 구성된다.
첫 번째 질문: "데이터의 클래스 불균형이 심각한가?" 만약 특정 클래스가 전체 데이터의 90% 이상을 차지한다면, Dice보다 Jaccard를 선택하는 것이 좋다. 내 경험상 Dice는 다수 클래스에 유리하게 작용하여 소수 클래스의 검출 성능을 과대평가하는 경향이 있다.두 번째 질문: "객체의 크기가 일정한가?" 객체 크기가 다양하고 특히 작은 객체가 중요한 경우라면 Jaccard를 선택하라. 반면 모든 객체의 크기가 비슷하다면 Dice를 사용해도 무방하다. 세 번째 질문: "임상적/실용적 중요도가 어디에 있는가?" 의료 진단처럼 False Negative가 치명적인 경우에는 Jaccard가 더 적합하다.반면 제조업 불량 검사처럼 생산성을 중시한다면 Dice를 고려할 수 있다.| 상황 | 선택 | 근거 |
|---|---|---|
| 클래스 불균형 심각 | Jaccard | 소수 클래스 보호 |
| 작은 객체 중요 | Jaccard | 객관적 평가 가능 |
| 일반화 성능 확인 | 두 지표 모두 | 차이 분석으로 문제 발견 |
| 실시간 추론 평가 | Dice | 계산 효율성 |
| 연구 발표용 | Dice | 높은 점수로 가시성 확보 |
네 번째 질문: "모델의 일반화 성능을 확인해야 하는가?" 이 질문에 "예"라고 답한다면, 반드시 두 지표를 모두 계산하고 그 차이를 분석해보길 권한다. 내가 경험한 바로는, Dice와 Jaccard의 차이가 공식적인 변환값보다 0.05 이상 크게 나오면 데이터나 모델에 문제가 있을 가능성이 높다.
실제 사례를 하나 더 공유하자면, 작년에 진행한 피부 병변 분류 프로젝트에서 Dice는 0.93, Jaccard는 0.78이 나왔다. 공식에 따르면 Jaccard는 약 0.87이 나와야 정상인데, 실제보다 0.09나 낮았다.분석 결과, 모델이 멜라노마(악성)는 잘 검출했지만 정상 피부를 병변으로 잘못 분류하는 경우가 많았다. 즉, 모델이 False Positive에 취약했던 것이다.만약 Dice만 봤다면 이 문제를 놓칠 뻔했다. 결론적으로, 나는 프로젝트의 초기 단계에서는 반드시 두 지표를 모두 모니터링한다.그리고 일정 수준 이상의 성능이 확인되면, 그때 프로젝트의 목적에 맞는 지표를 선택한다. 이 과정에서 중요한 것은 "왜 이 지표를 선택했는가"에 대한 명확한 근거를 가지고 있어야 한다는 점이다.마지막으로 강조하고 싶은 점은, 어떤 지표를 선택하든 그것은 도구일 뿐이라는 것이다. 진짜 중요한 것은 모델이 실제 환경에서 얼마나 유용한지다.Dice와 Jaccard는 그 유용성을 정량화하는 여러 방법 중 하나일 뿐, 절대적인 진리를 담고 있지 않다. 다음 섹션에서는 이 두 지표를 실제 코드로 구현하고, 프로젝트에 적용하는 구체적인 방법을 다뤄보겠다.