도구스학업·수학

ROC 곡선·AUC 계산기

점수와 실제 라벨 목록을 넣으면 ROC 곡선을 그리고 AUC를 계산합니다. 사다리꼴 적분과 맨-휘트니 U 두 경로로 따로 구해 서로 대조하며, 유덴 J가 가장 큰 임계값도 함께 냅니다.

20줄을 읽었습니다. 라벨은 1/0, 양성/음성, y/n을 받습니다. 입력한 값은 서버로 전송되지 않습니다.

AUC (곡선 아래 넓이)

0.68

약함 · 아무 양성 하나와 아무 음성 하나를 뽑았을 때 양성의 점수가 더 높을 확률이 68%로 추정됩니다

가로축은 위양성률(1 − 특이도), 세로축은 민감도입니다. 점선은 아무 정보가 없는 무작위 판정선이고 곡선이 왼쪽 위로 붙을수록 좋습니다. 찍힌 점은 유덴 J가 가장 큰 자리입니다.

표본20
양성 / 음성10 / 10
AUC (사다리꼴 적분)0.68
AUC (맨-휘트니 U/n₁n₂)0.68
맨-휘트니 U₁68
95% 신뢰구간 (Hanley–McNeil 근사)0.4411 ~ 0.9189

유덴 J가 가장 큰 임계값

임계값 (이 점수 이상이면 양성)0.54
민감도50%
특이도90%
유덴 J0.4
맞힌 것 / 놓친 것5 / 5
헛짚은 것 / 바로 걸러낸 것1 / 9

이 점수 이상이면 양성으로 판정합니다.

실제 양성실제 음성
양성으로 판정64
음성으로 판정46

민감도 60% · 특이도 60% · 유덴 J 0.2

AUC를 두 경로로 계산해 대조합니다. 하나는 곡선 아래를 사다리꼴로 적분한 값이고, 다른 하나는 맨-휘트니 U를 n₁n₂로 나눈 값입니다. 둘은 근사가 아니라 항등적으로 같아야 하며, 지금 자료에서 차이는 0입니다.AUC = U₁/(n₁n₂), U₁ = R₁ − n₁(n₁+1)/2 = 68/(10×10)
같은 점수가 섞여 있으면 곡선이 계단이 아닙니다. 같은 점수를 받은 양성과 음성이 함께 있으면 그 임계값에서 TP와 FP가 동시에 올라가 곡선이 비스듬한 선분이 됩니다. 그 구간을 사각형으로 세면 AUC가 어긋나므로 사다리꼴로 적분해야 하고, 맨-휘트니 쪽에서 동점을 0.5개로 세는 것이 정확히 여기에 대응합니다. 다른 계산기와 값이 다르다면 대개 이 처리 때문입니다.
유덴 J가 최대인 점이 늘 정답은 아닙니다. J = 민감도 + 특이도 − 1은 «놓치는 것과 헛짚는 것의 비용이 같다»는 전제를 깔고 있습니다. 암 검진처럼 놓치는 쪽이 훨씬 비싼 자리에서는 민감도를 먼저 정해 놓고(예: 95% 이상) 그 조건에서 특이도가 가장 높은 점을 고르는 편이 맞습니다. 위 «직접 정한 임계값» 칸으로 그렇게 훑어볼 수 있습니다.
AUC는 유병률과 무관합니다. 순위만 보는 값이라 양성이 1%든 50%든 같은 AUC가 나옵니다. 장점이기도 하고 함정이기도 합니다 — 유병률이 아주 낮은 자리에서는 AUC가 높아도 실제로 양성이라고 판정한 것 중 진짜가 몇 %인지(양성예측도)는 낮을 수 있습니다. 그 값이 궁금하면 혼동행렬 표를 직접 보아야 합니다.신뢰구간은 Hanley–McNeil(1982) 근사이며 점수가 지수분포라는 가정을 깔고 있어 보수적인 편입니다. DeLong 방법과는 값이 다를 수 있으므로 논문에 실을 값이라면 통계 패키지로 다시 확인하는 편이 좋습니다.

계산 방법

  1. 1한 줄에 «점수 라벨» 하나씩 붙여 넣습니다. 라벨은 1/0, 양성/음성, y/n을 받습니다.
  2. 2ROC 곡선과 AUC가 바로 나옵니다.
  3. 3두 경로로 계산한 AUC가 같은지 아래 표에서 확인합니다.
  4. 4유덴 J가 가장 큰 임계값과 그때의 민감도·특이도를 봅니다.
  5. 5기준선을 직접 정하고 싶으면 아래 칸에 임계값을 넣어 혼동행렬을 확인합니다.

자주 묻는 질문

아무 양성 하나와 아무 음성 하나를 뽑았을 때 양성의 점수가 더 높을 확률입니다. AUC 0.8이면 그런 쌍 100개 중 80개에서 양성이 더 높은 점수를 받는다는 뜻입니다. 넓이라는 기하학적 뜻과 이 확률이 정확히 같은 값이라는 점이 AUC를 쓰는 이유입니다.

한쪽만 구현하면 틀려도 알 수 없기 때문입니다. 곡선 아래를 사다리꼴로 적분한 값과 맨-휘트니 U를 n₁n₂로 나눈 값은 근사가 아니라 항등적으로 같아야 합니다. 이 계산기는 둘을 따로 구해 함께 보여 주므로, 값이 어긋나면 그 자리에서 드러납니다.

그 임계값에서 곡선이 비스듬한 선분이 됩니다. 같은 점수를 받은 양성과 음성이 함께 있으면 TP와 FP가 동시에 올라가기 때문입니다. 그래서 계단으로 처리하지 않고 사다리꼴로 적분해야 하며, 맨-휘트니 쪽에서 동점을 0.5개로 세는 것이 정확히 여기에 대응합니다. 다른 계산기와 값이 다르다면 대개 이 처리 때문입니다.

민감도 + 특이도 − 1이며, ROC 곡선에서 무작위 판정선과 가장 멀리 떨어진 점을 찾는 값입니다. 0이면 무작위와 다르지 않고 1이면 완벽하게 갈립니다. 다만 J를 최대로 하는 임계값은 «놓치는 것과 헛짚는 것의 비용이 같다»는 전제를 깔고 있어, 놓치는 쪽이 훨씬 비싼 자리에서는 답이 아닙니다.

점수의 방향이 뒤집혀 있을 가능성이 큽니다. 점수가 낮을수록 양성인 지표라면 부호를 바꾸어 다시 넣으면 되고, 그러면 AUC는 1에서 지금 값을 뺀 값이 됩니다. 실제로 무작위보다 못한 분류기는 드물고, 대개는 라벨이나 부호를 잘못 붙인 것입니다.

유병률에 따라 다릅니다. AUC는 순위만 보는 값이라 양성이 1%든 50%든 같은 값이 나옵니다. 유병률이 아주 낮은 자리에서는 AUC가 높아도 양성이라고 판정한 것 중 진짜가 몇 %인지(양성예측도)는 낮을 수 있으므로, 실제로 쓸지는 혼동행렬을 직접 보고 판단해야 합니다.

Hanley–McNeil(1982) 근사를 씁니다. 점수가 지수분포라는 가정을 깔고 있어 보수적인 편이며, 널리 쓰이는 DeLong 방법과는 값이 다를 수 있습니다. 논문에 실을 값이라면 통계 패키지로 다시 확인하는 편이 좋습니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이루어지며 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • AUC와 ROC 좌표는 scikit-learn 1.9의 roc_auc_score·roc_curve(drop_intermediate=False)와, 맨-휘트니 U는 scipy의 mannwhitneyu와 대조해 검증했습니다. 동점·완전분리·역전·전부동점 같은 경계 사례도 함께 확인했습니다.
  • 동점 처리가 두 계산 경로 사이에서 어긋나지 않는지 무작위 자료 200벌로 확인합니다.
  • 임계값은 «그 점수 이상이면 양성»으로 잡습니다. 초과로 잡는 구현과는 경계에서 한 칸 차이가 납니다.
  • 신뢰구간은 Hanley–McNeil 근사이며 DeLong 방법과 다를 수 있습니다.
  • 이 계산기는 분류 성능을 재는 것이지 어떤 임계값을 써야 하는지 정해 주지 않습니다. 놓치는 것과 헛짚는 것의 비용은 상황마다 다릅니다.
  • 입력한 값은 브라우저 안에서만 계산되며 서버로 전송되지 않습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 8월 31일 · 결과는 참고용 추정치입니다.