[개발 공부] / Expected Calibration Error: 확률 구간별 과신.md

Expected Calibration Error: 확률 구간별 과신

조회

2026년 6월 30일 | 개발 공부


Expected Calibration Error는 confidence bin별 평균 확신과 실제 정답률의 간격을 샘플 비율로 가중해 읽는다는 설명 도식
Figure 1. ECE는 전체 평균 점수 하나가 아니라 confidence bin별 간격을 먼저 보게 만든다.

확률 예측이 0.8이라고 찍혔는데 실제 정답률이 0.6 근처라면, 모델은 맞고 틀림의 문제가 아니라 자기 확신을 과하게 말하는 문제를 갖고 있다. Expected Calibration Error, 줄여서 ECE는 이런 간격을 confidence 구간별로 쪼개서 보는 지표다. 이름은 조금 딱딱하지만, 내가 실험 로그에서 쓰는 감각은 단순하다. “80%라고 말한 샘플 묶음은 정말 80%쯤 맞았나?”를 묻는 표다.

전날 정리한 Brier score는 확률 예측과 실제 결과 사이의 거리로 읽기 좋았다. 다만 Brier score 하나만 보고 있으면 어디서 틀어졌는지가 늦게 보일 때가 있다. 평균 점수는 괜찮아 보이는데, 높은 confidence 구간에서만 계속 과신하는 모델이 있다. 실제 배포에서는 이쪽이 더 무섭다. 낮은 확률을 낮게 말하는 모델보다, 높은 확률을 너무 쉽게 말하는 모델이 사람의 결정을 더 세게 밀어 버리기 때문이다.

정확도와 보정은 같은 말이 아니다

모델 A와 B의 accuracy가 둘 다 80%라고 해도, 둘의 확률 예측 품질은 완전히 다를 수 있다. A는 맞힐 때 0.6 근처로 조심스럽게 말하고, 틀릴 때도 0.55 정도로 흔들릴 수 있다. B는 맞힐 때도 틀릴 때도 0.95를 자주 찍을 수 있다. accuracy 표에서는 둘이 비슷해 보이지만, 후속 의사결정에서는 B가 훨씬 위험한 신호를 낸다.

ECE는 이 차이를 보정, 즉 calibration 관점에서 본다. confidence 0.8~1.0 구간에 들어간 샘플만 모아서 평균 confidence와 실제 accuracy를 비교한다. 그 간격이 크면 “이 구간에서 모델이 자기 능력을 잘못 보고 있다”고 해석한다. 그래서 ECE는 분류 모델뿐 아니라 LLM judge score, retrieval answer confidence, ensemble vote ratio 같은 곳에도 꽤 잘 붙는다. 숫자가 확률처럼 쓰이는 순간, 그 숫자가 실제 빈도와 맞는지 확인해야 하기 때문이다.

bin을 나누면 과신 위치가 보인다

계산 자체는 어렵지 않다. confidence를 몇 개의 bin으로 나눈다. 예를 들어 0.0~0.2, 0.2~0.4처럼 다섯 칸으로 자를 수 있다. 각 칸에서 평균 confidence와 실제 accuracy를 구하고, 둘의 절대 차이에 그 칸의 샘플 비율을 곱한다. 이 값을 모든 bin에 대해 더하면 ECE가 된다.

여기서 내가 자주 보는 실패는 높은 confidence bin만 따로 무너지는 경우다. 전체 ECE는 작아 보여도 0.8~1.0 구간의 gap이 크면, 모델은 “모를 때도 안다고 말하는” 쪽으로 기울어져 있을 수 있다. 특히 의료 triage, fraud alert, 검색 결과 자동 승인처럼 threshold 이후에 행동이 붙는 시스템에서는 이 구간을 따로 봐야 한다. 평균 지표 하나로 뭉개면 사람이 가장 믿고 싶은 구간의 실패가 사라진다.

샘플 수가 적은 bin은 더 조심해서 본다. 0.9 이상 구간에 샘플이 12개뿐인데 gap이 크다면, 바로 모델을 버리기보다 그 12개가 어떤 조건에서 나온 것인지 먼저 본다. 그래도 같은 패턴이 다음 validation slice에서도 반복되면, 그때는 threshold나 abstention rule을 따로 잡는 편이 낫다.

confidence bin 평균 confidence 실제 accuracy 읽는 포인트
0.4~0.6 0.52 0.45 애매한 구간에서 약간 과신
0.6~0.8 0.70 0.58 threshold 근처 decision risk
0.8~1.0 0.88 0.71 가장 믿고 싶은 구간의 과신

Brier score와 같이 봐야 덜 속는다

ECE를 단독으로 쓰면 또 다른 함정이 생긴다. bin을 어떻게 자르느냐에 따라 값이 달라지고, 샘플이 적은 bin은 흔들림이 커진다. confidence가 특정 구간에 몰린 모델은 빈 bin이 많아져서 표가 허술해질 수도 있다. 그래서 나는 ECE를 볼 때 Brier score, accuracy, AUC, 그리고 bin별 샘플 수를 같이 둔다.

Brier score가 “개별 예측이 결과에서 얼마나 멀었나”를 묻는다면, ECE는 “확률로 말한 집단이 실제 빈도와 맞나”를 묻는다. 둘은 비슷해 보이지만 역할이 다르다. Brier가 좋아졌는데 ECE의 high-confidence gap이 커졌다면, 평균 거리 개선 뒤에 위험한 과신이 숨어 있을 수 있다. 반대로 ECE가 낮아졌지만 Brier가 나빠졌다면, 모델이 너무 보수적으로 말해서 확률 신호의 해상도가 줄어든 것일 수도 있다.

작은 실험표에 남기는 기준

내가 작은 모델 비교표에 ECE를 넣는다면, 숫자 하나만 적지 않는다. 최소한 bin 개수, bin별 샘플 수, 평균 confidence, 실제 accuracy, gap을 같이 남긴다. 그리고 validation에서 정한 binning과 calibration method를 test에서 다시 고르지 않는다. test 결과를 보면서 bin 경계를 바꾸면, 보정 평가가 아니라 결과를 예쁘게 접는 작업이 된다.

LLM 평가에서도 비슷하다. judge model이 “이 답은 0.9로 맞다”고 점수를 내거나, 여러 샘플 중 8개가 같은 답을 골라 0.8 confidence처럼 쓰일 때가 있다. 이때도 그 confidence가 실제 정답 빈도와 맞는지 봐야 한다. 특히 “모르면 검색 요청” 같은 정책을 넣었다면, 높은 confidence 오답과 낮은 confidence 정답을 따로 세어야 한다. ECE는 그 분리를 시작하게 해 주는 작은 경고등에 가깝다.

결론보다 먼저 볼 것

ECE가 낮다는 말만으로 모델을 믿지는 않는다. 나는 먼저 reliability diagram이나 bin 표를 보고, 어느 구간에서 간격이 벌어지는지 확인한다. 그다음 그 구간의 샘플을 몇 개 직접 읽는다. 숫자가 말해 주는 것은 “어딘가 어긋났다”까지이고, 왜 어긋났는지는 샘플이 알려 주는 경우가 많았다.

결국 ECE는 멋진 최종 점수라기보다 확률을 행동으로 바꾸기 전의 안전 점검에 가깝다. 0.9라는 숫자를 사람이 그대로 믿어도 되는지, threshold를 넘긴 샘플이 실제로 그만큼 안정적인지, high-confidence 오답이 특정 데이터 조각에 몰려 있는지 확인하게 만든다. 확률 예측을 로그에 남긴다면, 평균 accuracy 옆에 ECE와 bin 표를 같이 두는 것만으로도 나중에 덜 후회한다.

댓글

홈으로 돌아가기

검색 결과

"" 검색 결과입니다.