2026년 7월 16일 | 개발 공부
Integrated Calibration Index(ICI, 통합 보정 지수)는 모델이 낸 예측 확률과 평활 보정 곡선이 추정한 실제 빈도의 절대 차이를 샘플 전체에서 평균한 값이다. 쉽게 말하면 0.7이라고 말한 예측들이 실제로는 어느 정도의 빈도에 놓이는지 곡선으로 추정한 뒤, 이상적인 대각선과 벌어진 거리를 한 숫자로 접는다.
나는 calibration slope와 intercept를 본 다음에도 “그래서 평균적으로 몇 퍼센트포인트나 틀어진 것인가”가 남을 때 ICI를 확인한다. slope 0.8은 확률이 다소 과감하다는 방향을 알려 주지만, 실제 간격의 크기를 바로 말해 주지는 않는다. ICI가 0.04라면 관측된 예측 분포 안에서 평활 곡선과 예측 확률의 절대 간격이 평균 4퍼센트포인트였다고 읽을 수 있다.
면적처럼 보여도 예측 분포로 가중된다
ICI를 처음 보면 reliability diagram의 두 선 사이 면적이라고 외우기 쉽다. 중요한 차이는 모든 확률 구간을 같은 폭으로 적분하는 것이 아니라, 실제로 모델이 낸 예측값마다 절대 간격을 계산해 평균한다는 점이다. 예측이 0.2~0.4에 몰려 있다면 그 구간이 ICI에 더 많이 반영되고, 샘플이 거의 없는 0.9 부근은 곡선이 크게 어긋나도 평균에 미치는 영향이 작다.
계산 흐름은 세 단계로 정리된다. 먼저 각 샘플의 예측 확률과 0/1 결과로 calibration curve를 평활 추정한다. 다음으로 샘플 i의 예측 확률과 그 위치에서 곡선이 돌려준 빈도 사이의 절대값을 구한다. 마지막으로 이 값들을 평균한다. 코드로 적으면 mean(abs(smoothed_probability - predicted_probability))에 가깝다.
그래서 smoothing 방법은 부차적인 구현 옵션이 아니다. 표본이 적거나 양성이 드문 데이터에서 지나치게 유연한 곡선을 쓰면 국소 흔들림까지 오차처럼 따라갈 수 있고, 너무 단순한 곡선은 실제 굴곡을 펴 버린다. ICI를 비교표에 넣을 때는 모델 이름만 적지 않고 평가 split, sample 수, 양성 수, smoother와 bootstrap 조건을 같이 남겨야 값의 재현 범위가 생긴다.
평균 ICI 옆에 E50과 E90을 붙이는 이유
평균은 한 줄 비교에 편하지만 소수의 큰 간격과 넓게 퍼진 작은 간격을 구분하지 못한다. ICI와 함께 제안된 E50은 절대 간격의 중앙값이고, E90은 90번째 백분위수다. E90이 0.09라면 샘플의 90%는 절대 보정 간격이 9퍼센트포인트 이하였고, 나머지 10%는 그보다 컸다고 읽는다. Emax는 관측된 최대 간격이지만 표본 끝단과 smoother에 특히 민감하다.
그림의 합성 예시에서는 ICI가 0.068, E50이 0.064, E90이 0.137, Emax가 0.143이다. 평균만 보면 대략 6.8퍼센트포인트의 오차로 요약되지만, 상위 10% 구간에서는 13.7퍼센트포인트를 넘는다. 자동 승인이나 고위험 알림처럼 특정 확률대의 실수가 비싼 시스템이라면, 평균 ICI보다 그 구간의 signed gap과 support를 먼저 보는 편이 맞다.
절대값은 방향도 지운다. 0.8을 0.68로 과대예측한 경우와 0.8을 0.92로 과소예측한 경우는 모두 0.12다. 운영 대응은 서로 다르므로 ICI가 나빴다는 문장만 남기지 않고, reliability diagram에서 대각선 위·아래 방향을 확인하고 구간별 평균 예측과 실제 빈도를 표로 보존한다.
ECE와 비슷해 보여도 곡선을 만드는 방식이 다르다
Expected Calibration Error(ECE)는 예측을 여러 bin으로 나누고, 각 bin의 평균 confidence와 실제 빈도 차이를 샘플 비율로 가중한다. ICI는 고정 bin 대신 평활 calibration curve를 사용해 각 예측 위치의 간격을 계산한다. ECE는 bin 개수와 경계에 민감하고, ICI는 smoother의 형태와 끝단 데이터 밀도에 민감하다.
어느 쪽이 무조건 더 정확하다고 고르기보다 같은 평가 질문에서 역할을 나누는 편이 낫다. ECE는 기존 대시보드와 비교하기 쉽고 계산이 단순하다. ICI는 bin 경계에서 값이 갑자기 갈리는 문제를 줄이고 예측 분포를 따라 연속적인 간격을 보여 준다. 두 값의 순위가 다르면 숫자 하나를 택하기 전에 bin별 sample 수와 평활 곡선 모양부터 확인한다.
Brier score와 log loss는 또 다른 층이다. 이들은 예측 확률과 개별 정답 사이의 proper scoring rule이라 discrimination, calibration, outcome uncertainty가 함께 반영될 수 있다. ICI는 평활 곡선에서 보정 간격만 꺼내 보려는 진단값이다. 따라서 ICI가 낮은 모델이 반드시 모든 확률 품질 지표에서도 가장 좋다는 보장은 없다.
slope와 intercept가 원인을 두 축으로 압축한다
Calibration intercept는 평균 위험 수준이 전체적으로 위나 아래로 이동했는지 보고, slope는 예측 확률의 폭이 지나치게 벌어졌거나 눌렸는지 본다. ICI는 이 두 변형이 실제 예측 분포에서 만든 절대 간격의 평균 크기를 보여 준다. 같은 ICI 0.04라도 intercept 이동이 중심인 모델과 끝단 과신이 중심인 모델은 재보정 방법과 배포 경고가 달라진다.
내가 쓰는 순서는 diagram으로 모양을 보고, intercept와 slope로 전체 이동과 폭을 확인한 다음, ICI·E50·E90으로 간격의 크기와 꼬리를 요약하는 방식이다. 여기에 AUC나 PR-AUC를 유지해 순위 능력이 달라졌는지, threshold별 Precision·Recall을 붙여 실제 행동 수가 변했는지 확인한다. calibration 숫자가 좋아졌다는 이유로 분류 정책까지 자동으로 좋아졌다고 결론 내리지 않는다.
비교표에는 숫자보다 추정 조건을 먼저 고정한다
| 항목 | 남길 내용 | 빠졌을 때 생기는 오해 |
|---|---|---|
| 데이터 | split, n, 양성 수, 예측 범위 | 표본 밀도 차이를 모델 차이로 읽음 |
| 곡선 | smoother, 파라미터, 끝단 처리 | 추정 방식 차이를 ICI 변화로 읽음 |
| 요약 | ICI, E50, E90, 신뢰구간 | 평균이 가린 tail을 놓침 |
| 방향 | diagram, signed gap, intercept, slope | 과대·과소예측을 같은 오류로 처리 |
신뢰구간은 sample 단위 bootstrap으로 다시 curve를 적합하고 ICI를 계산하는 과정을 반복해 구할 수 있다. 같은 curve를 고정한 채 샘플만 평균 내면 smoother 추정의 불확실성이 빠진다. 여러 환자 기록이나 여러 query가 한 그룹에 묶인 데이터라면 독립 단위를 고려한 cluster bootstrap이 필요한지도 먼저 본다.
ICI는 calibration을 한 숫자로 정리하는 데 유용하지만, 숫자가 작다는 사실만으로 배포를 허가하는 지표는 아니다. 내가 이 값을 좋아하는 이유는 “확률이 좀 안 맞는다”를 평균 퍼센트포인트와 꼬리 간격으로 바꿔 주기 때문이다. 다만 그 숫자를 믿으려면 예측이 몰린 구간, 곡선을 만든 방법, 오차 방향을 같은 화면에 남겨야 한다.
'[개발 공부]' 카테고리의 다른 글
| Tjur's D: 양성과 음성의 평균 예측 확률 차이 (0) | 2026.07.22 |
|---|---|
| Brier score 분해: 같은 점수 안의 보정과 구분력 (1) | 2026.07.17 |
| Calibration slope와 intercept: 확률 오차의 방향을 나누는 두 값 (0) | 2026.07.15 |
| Youden's J: Sensitivity와 Specificity가 만나는 임계값 (1) | 2026.07.14 |
| F-beta score: Precision과 Recall의 무게를 바꾸는 지표 (0) | 2026.07.13 |