2026년 8월 3일 | 개발 공부
Decision Curve Analysis(DCA, 결정 곡선 분석)는 예측 모델을 실제 의사결정에 썼을 때 임계확률별로 이득이 얼마나 남는지 평가하는 방법이다. AUC가 더 높은 모델을 골랐고 calibration도 확인했는데, 막상 누구에게 검사나 개입을 권할지 정하려니 답이 비어 있는 경우가 있다. DCA는 그 빈칸을 true positive의 이득과 false positive의 손해를 같은 단위로 바꾼 net benefit(순이익)으로 채운다.
나는 처음에 DCA를 ROC curve에서 최적 임계값을 찾는 또 다른 그래프로 생각했다. 둘은 출발점부터 다르다. ROC는 threshold가 바뀔 때 sensitivity와 specificity가 어떻게 교환되는지 보여 주지만, DCA는 그 threshold가 실제 행동을 시작할 만큼 의미 있는 위험도인가를 먼저 묻는다. 모델 성능표의 마지막 장식이 아니라, 예측을 행동으로 연결할 때 쓰는 평가 층에 가깝다.
그림에서 파란 모델 곡선이 빨간 ‘모두 개입’ 선과 0인 ‘아무도 개입하지 않음’ 선보다 높은 구간이 모델을 쓸 이유가 생기는 범위다. 파란선이 늘 가장 높아야 한다는 뜻은 아니다. 낮은 threshold에서는 거의 모두에게 개입하는 편이 낫고, 높은 threshold에서는 아무도 개입하지 않는 편이 나을 수 있다. 그래서 DCA 결과는 최고점 하나보다 현실적으로 사용할 threshold 범위에서 어떤 전략이 위에 있는지로 읽는다.
1. 임계확률은 모델이 고르는 숫자가 아니다
임계확률 p_t는 예측 위험이 이 값 이상이면 검사·치료·추가 검토를 시작하겠다는 행동 경계다. 예를 들어 심각한 질환을 놓치는 손해가 추가 검사 한 번의 부담보다 훨씬 크다면 낮은 threshold가 합리적일 수 있다. 반대로 개입의 부작용이나 비용이 크다면 더 높은 위험을 확인한 뒤 움직이게 된다.
이 값은 데이터에서 Youden's J가 최대가 되는 점을 자동으로 복사해 넣는 숫자가 아니다. Youden's J는 sensitivity와 specificity를 같은 비중으로 묶지만, 실제 업무에서는 false negative와 false positive의 무게가 다르다. DCA의 threshold 범위는 임상의, 운영자, 정책 담당자와 함께 “어느 위험도부터 행동할 것인가”를 정해 두어야 한다. 그 범위를 설명하지 못한다면 곡선을 0%부터 100%까지 그려도 의사결정 근거는 약하다.
2. 순이익은 true positive에서 가중된 false positive를 뺀다
가장 많이 쓰는 순이익 식은 아래처럼 짧다. N은 평가 대상 수이고, false positive에는 threshold odds인 p_t / (1 - p_t)가 가중치로 붙는다.
Net Benefit = TP / N - FP / N × p_t / (1 - p_t)
평가 대상 1,000명 중 실제 사건이 150건이고, threshold 20%에서 모델이 true positive 120건과 false positive 80건을 만들었다고 해 보자. false positive 가중치는 0.20 / 0.80 = 0.25다. 순이익은 0.120 - 0.080 × 0.25 = 0.10이 된다. 이는 해당 손익 교환비율에서 100명당 순수하게 true positive 10명을 찾아낸 것과 동등한 효용으로 해석할 수 있다.
여기서 0.10은 정확도 10%도, 치료 효과 10%도 아니다. 특정 대상 집단과 threshold에서 true positive의 이득을 기준 단위로 바꾼 값이다. 집단의 사건률이 달라지거나 threshold가 바뀌면 같은 모델도 다른 순이익을 낸다. 서로 다른 연구의 DCA 곡선을 높이만 보고 바로 비교하기 어려운 이유다.
3. 모델은 두 기본 전략을 모두 넘어야 한다
Treat none은 아무에게도 개입하지 않는 전략이라 순이익이 0이다. Treat all은 모두에게 개입하므로 모든 사건을 잡는 대신 비사건 전체가 false positive 비용을 만든다. 앞의 예시에서 사건률이 15%이고 threshold가 20%라면 treat all의 순이익은 0.15 - 0.85 × 0.25 = -0.0625다. 모델의 0.10은 두 기본 전략보다 높다.
하지만 threshold가 아주 낮아지면 false positive 가중치도 작아져 treat all이 강한 기준선이 된다. 모델 곡선이 0보다 높다는 사실만으로는 충분하지 않고, 그 구간의 treat all보다도 높아야 한다. 반대로 현재 관행이 전원 검사라면 결과를 ‘불필요한 개입 감소 수’로 바꿔 쓰는 편이 더 직관적일 수 있다. 기준 전략을 숨기면 모델이 실제 관행보다 나은지 판단할 수 없다.
4. AUC와 calibration을 대체하지 않는다
AUC는 임의의 양성 한 건이 임의의 음성 한 건보다 높은 점수를 받을 확률을 요약한다. Calibration intercept와 slope, reliability diagram은 예측한 20%가 실제로도 20%쯤 발생하는지 본다. DCA는 그 확률을 행동 경계에 넣었을 때 이득과 손해가 어떻게 합쳐지는지 묻는다. 판별력, 확률 보정, 의사결정 효용은 서로 다른 질문이다.
특히 calibration이 어긋나면 DCA도 흔들린다. 실제 위험 20%인 집단에 10%를 주는 모델은 순위가 좋아 AUC가 유지돼도, 15% threshold에서 필요한 사람을 개입 대상 밖으로 밀어낼 수 있다. 외부 검증 집단에서 사건률과 진료 흐름이 달라졌다면 calibration을 다시 보고 DCA도 같은 집단에서 다시 계산해야 한다. DCA가 다른 평가를 생략해 주는 지름길은 아니다.
5. 곡선의 작은 차이를 과장하지 않기
두 모델 곡선이 근소하게 갈리면 먼저 표본 불확실성을 봐야 한다. bootstrap으로 threshold별 신뢰구간을 구할 수 있지만, 인접 threshold의 점들은 서로 독립이 아니므로 점마다 유의성 검정을 붙이는 방식은 해석을 더 복잡하게 만든다. 내가 원하는 것은 “17%에서만 이겼다”는 문장이 아니라, 사전에 정한 유효 범위에서 우위가 안정적으로 이어지는지와 그 차이가 운영상 의미 있는 크기인지다.
검사 자체의 비용, 개입 후 치료 효과, 접근성 차이도 자동으로 곡선에 들어가지는 않는다. threshold에 그 손익이 충분히 반영됐다는 가정이 필요하고, 별도 검사가 침습적이거나 비싸다면 test harm을 추가로 고려해야 한다. 편향된 표본이나 잘못 정의한 outcome도 DCA가 고쳐 주지 못한다. 좋은 곡선은 잘못된 검증 설계를 면제하는 증거가 아니다.
6. 평가 로그에 남길 최소 항목
내가 DCA를 다시 재현할 수 있게 남길 항목은 평가 split, 대상 수, 사건 수와 사건률, 예측 확률의 생성 시점, threshold 범위와 간격, 각 threshold의 TP·FP·순이익, treat all·treat none 값이다. 내부 검증인지 외부 검증인지, bootstrap 반복 수와 신뢰구간 방식, missing data 처리, calibration을 같은 split에서 확인했는지도 함께 기록한다.
그래프를 보고할 때는 유용한 threshold 구간과 그 구간을 선택한 업무 근거를 문장으로 적는다. 모델 A의 최고 순이익만 쓰거나 AUC 순위와 DCA 순위를 섞지 않는다. Vickers와 Elkin의 원 논문은 threshold probability에서 net benefit을 유도하고, BMJ의 실무 해설은 이를 treat all·treat none과 비교하는 방법을 풀어 설명한다. 내가 DCA에서 확인하려는 결론은 단순하다. 예측이 맞는가를 넘어서, 이 확률을 근거로 움직였을 때 기존 전략보다 나은가다.
'[개발 공부]' 카테고리의 다른 글
| Integrated Discrimination Improvement: 사건·비사건 평균 확률 간격의 변화 (0) | 2026.08.05 |
|---|---|
| Net Reclassification Improvement: 위험군 이동으로 보는 새 모델의 추가 가치 (0) | 2026.08.04 |
| Hosmer-Lemeshow 검정: 위험도 그룹별 관측·기대 빈도 비교 (0) | 2026.07.28 |
| Spiegelhalter's Z: Brier score로 보는 확률 보정 검정 (0) | 2026.07.27 |
| Tjur's D: 양성과 음성의 평균 예측 확률 차이 (0) | 2026.07.22 |