ROC Curve

 

이진 진단 테스트: 표·지표 쉽게 이해하기

3.1 컨셉 한 장 요약

  • 민감도(Se = TPR): 환자 중에서 양성으로 제대로 잡는 힘
  • 특이도(Sp = TNR): 건강한 사람 중에서 음성으로 제대로 거르는 힘
  • PPV: 양성 결과가 뜨면 진짜 환자일 확률
  • NPV: 음성 결과가 뜨면 정말 건강할 확률
  • 유병률(Prevalence): 내 환자군에서 환자 비율(사전확률)

기억 TIP

  • Se: “놓치지 말자(미스 최소)”
  • Sp: “헛양성 줄이자(오경보 최소)”
  • PPV/NPV현재 집단의 유병률에 크게 의존(베이즈!)

2×2 표(컨퓨전 매트릭스)

  실제 질병 (D) 실제 무질병 (D^{c})
검사 양성 (+) TP = (x_1) FP = (x_2)
검사 음성 (-) FN = (x_3) TN = (x_4)
  • 민감도(Se, TPR): (\displaystyle \frac{x_1}{x_1+x_3}=P(+\mid D))
  • 특이도(Sp, TNR): (\displaystyle \frac{x_4}{x_2+x_4}=P(-\mid D^{c}))
  • PPV: (\displaystyle \frac{x_1}{x_1+x_2}=P(D\mid +))
  • NPV: (\displaystyle \frac{x_4}{x_3+x_4}=P(D^{c}\mid -))
  • 유병률(Prev): (\displaystyle P(D))

왜 PPV/NPV는 유병률에 민감할까? (베이즈 직관)

[ PPV=\frac{Se\cdot Prev}{Se\cdot Prev+(1-Sp)(1-Prev)},\qquad NPV=\frac{Sp(1-Prev)}{(1-Se)Prev+Sp(1-Prev)}. ]

  • 희귀병(Prev↓)이면 FP의 영향이 상대적으로 커져서 PPV가 낮아짐
  • 반대로 NPV는 매우 높아지기 쉬움(거의 다 건강하니까 음성=정상일 확률↑)

1분 숫자 예시(감 잡기)
유병률 (0.01), 민감도 (0.99), 특이도 (0.98)

[ PPV \approx \frac{0.99\cdot 0.01}{0.99\cdot 0.01+0.02\cdot 0.99} \approx 0.33 ] → 양성 3명 중 1명만 진짜 환자

(NPV \approx 0.9999) → 음성은 거의 확실히 정상

큰 표로 더 직관적으로(인원 10,000명 가정)

  • 환자 100명, 건강 9,900명
    • TP = 99, FN = 1 (민감도 0.99)
    • TN = 9,702, FP = 198 (특이도 0.98)
  • PPV = (99/(99+198) \approx 0.333)
  • NPV = (9702/(9702+1) \approx 0.9999)

무엇을 언제 쓰나? (상황별 포인트)

  • Se를 키워야 할 때: 놓치면 큰 손해(암 스크리닝, 감염병 1차 선별)
    → 임계값 낮춰 민감도↑ → 2차(Sp 높은) 정밀검사로 FP 정리
  • Sp를 키워야 할 때: 양성 처리 비용/부작용 큼(침습 검사, 고가 치료)
    → 임계값 올려 특이도↑
  • PPV/NPV: 환자에게 설명하는 확률(“양성이면 실제 환자일 확률은 ~%”)
    내 환자군 유병률베이즈 재계산해야 현실적
  • 정확도(Accuracy) 단독 금지: 희귀질환은 “전부 음성”만 말해도 정확도 높아 보이는 왜곡 발생

임계값과 ROC(Receiver Operating Characteristic)

4.1 임계값이 뭐길래?

많은 검사/판독은 점수(연속/등급)를 내고,
임계값(컷오프)을 넘으면 양성, 아니면 음성으로 분류한다.

  • 임계값 Sp↑, Se↓ (보수적: 헛양성↓, 놓침↑)
  • 임계값 Se↑, Sp↓ (공격적: 놓침↓, 헛양성↑)

즉, Se와 Sp는 줄다리기. 한 값으로만 평가는 불공평.


ROC 곡선: 임계값을 쭉 훑어 그린 성능 지도

  • x축: FPR (= 1 - Sp) (헛양성 비율)
  • y축: TPR (= Se) (민감도)
  • 임계값을 바꾸며 ((\mathrm{FPR}, \mathrm{TPR})) 점들을 찍으면 ROC 곡선

AUC(곡선 아래 면적)

  • 1.0: 완벽 분리(이상적)
  • 0.5: 동전던지기(대각선)
  • 해석: “무작위로 뽑은 환자 점수가 건강인 점수보다 클 확률”

실무 해석: 임계값에 휘둘리지 않는 전반 성능 요약값.
둘의 AUC가 비슷해도, 관심 FPR/TPR 구간에서 더 좋은 쪽을 고르는 게 실전적.


경험적 ROC vs 모수적 ROC

  • 경험적 ROC: 각 임계값에서 (Se, Sp) 계산 → 점 잇기
  • 모수적 ROC: 두 분포(예: 정상/질병 점수의 정규분포) 적합 → AUC의 불확실성(신뢰구간)도 추정

현장 치트시트

  1. 목표 정하기: 놓침 최소(Se↑) vs 헛양성 최소(Sp↑)?
  2. 유병률 파악: 내 환자군의 Prior(문헌/레지스트리/자체 데이터).
  3. PPV/NPV는 베이즈 재계산: 내 유병률로 환자 설명용 수치 만들기.
  4. 임계값 하나에 집착 금지: ROC/AUC로 전반 성능 보고, 관심 구간에서 컷오프 설정.
  5. 2단계 전략: 1차(Se↑) 스크리닝 → 2차(Sp↑) 확증 검사 조합.

한 줄 정리

  • Se/Sp: 테스트 자체의 기본기(유병률 영향 적음)
  • PPV/NPV: 환자에게 말해줄 “진짜일 확률”(유병률에 크게 좌우)
  • ROC/AUC: 임계값을 벗어나 전반 성능을 공정하게 비교하는 도구

True Positive? False Positive?

False Positive Rate(FPR)와 True Positive Rate(TPR)은 ROC curve에서 각각 x, y축에 표시되는 값을 의미한다.

여기서 우리는 FPR과 TPR 모두 Positive라는 공통적인 단어가 있음을 발견할 수 있다.

“Positive”의 의미는 판단자가 “그렇다”라고 판별했다는 의미이다.

가령 병원에 환자가 암 검사를 받기 위해 내원했고, 의사(즉, 여기서 판단자)가 “환자가 암에 걸렸다”라고 판단한 것이다.

그렇다면 True와 False는 무슨 의미일까?

True와 False는 각각 ‘판단을 올바르게 했다’는 것과 ‘판단을 틀리게 했다’는 것을 표현한다.

즉, 다시 말해 True Positive는 실제로 이 사람은 암에 걸려있고, 판단을 암에 걸렸다고 판단한 것이며, False Positive는 실제로는 암에 걸리지 않았는데도 암에 걸렸다고 ‘잘못’ 판단한 것을 의미한다.

TPR과 FPR의 관계

이제 의사(즉, 이진 분류기의 역할)의 성격과 실력에 대해 집중해보자.

의사 A는 겁이 없고 성격이 급해서 모든 환자들을 다 암환자라고 판단한다고 하자.

그러면 어떻게 될까? 실제로 암이 걸린 환자들도 모두 암 환자로 판정되면서 (즉, True Positive Rate은 높아지고)

동시에 암이 걸리지 않았던 내원 환자들도 모두 암 환자로 판정된다. (즉, False Positive Rate도 동시에 높아지게 된다)

그 내용을 그림으로 표현하면 아래와 같다. 모든 내원자들을 다 환자로 판정한다는 것은 threshold가 낮다는 뜻이다.

한편, 의사 B는 겁이 많아서 모든 환자들이 암환자가 아니라고 판단한다고 하자. 다시 말해 의사 B는 암이 걸리지 않은 내원자들 뿐만 아니라

실제로는 암에 걸린 내원자들도 모두 정상인으로 판정하면서 True Positive Rate과 False Positive Rate 모두 낮아지게 된다.

그 내용을 그림으로 표현하자면 아래와 같다. 모든 내원자들을 다 정상인으로 판정한다는 것은 threshold가 높다는 뜻이다.

TPR과 FPR은 동시에 높아지게 되며, 훌륭한 이진 분류기는 TPR은 높되 FPR은 낮은 상태이다.


References

  • 원문/출처: [https://angeloyeo.github.io/2020/08/05/ROC.html]