ROC 곡선이란
Contents
학습목표 — 이 장을 마치면 다음을 할 수 있다.
- ROC 평면(x = FPR, y = TPR)과 그 네 모서리·대각선이 무엇을 뜻하는지 해석한다.
- 임계값을 높음에서 낮음으로 스윕하며 각 임계값을 하나의 (FPR, TPR) 점으로 바꾼다.
- 점수 분포 위의 한 임계값과 ROC 평면 위의 한 점을 1:1로 짝지어 읽는다(2-패널 읽기).
- 곡선이 좌상단에 가까울수록 좋은 분류기임을 설명한다.
ROC 곡선은 "임계값을 다 써 본 한 장의 지도"다
0장에서 우리는 모델이 매기는 점수와, 그 점수를 양/음으로 가르는 임계값을 구분했다. 1장에서는 임계값을 한 칸씩 옮길 때마다 혼동행렬의 네 칸(TP·FP·FN·TN)이 시소처럼 재분배되는 것을 보았다. 임계값을 낮추면 더 많은 사례를 양성으로 부르니 TP도 늘고 FP도 따라 늘었다 — 공짜 점심은 없었다.
그렇다면 자연스러운 질문이 생긴다. 임계값을 하나만 고를 게 아니라, 가능한 임계값을 전부 시험해 보면 어떨까? 임계값마다 모델의 "재현율(놓치지 않는 능력)"과 "거짓경보율(헛다리 짚는 정도)"이 한 쌍으로 정해진다. 이 쌍들을 전부 모아 한 장의 그림에 찍으면, 그것이 바로 ROC 곡선이다.
비유하자면 ROC 곡선은 카메라의 감도(ISO) 다이얼을 처음부터 끝까지 돌려보며 찍은 결과를 한 장에 겹쳐 둔 것과 같다. 다이얼을 어디에 두느냐에 따라 사진이 달라지듯, 임계값을 어디에 두느냐에 따라 분류 성능이 달라진다. ROC 곡선은 "이 다이얼로 만들 수 있는 모든 결과"를 한눈에 보여 주는 지도다. 이 장에서는 그 지도를 읽는 법과 그리는 법을 차례로 익힌다.
ROC 평면 읽기 — 네 모서리와 대각선
먼저 지도의 좌표계부터 익히자. ROC 평면(Fawcett 2006)은 두 축으로 이루어진다.
- x축 = FPR (False Positive Rate, 거짓 양성률) — 0에서 1까지. 실제 음성을 양성이라 잘못 부른 비율. 0장에서 본 "거짓경보(false alarm)"의 비율이다.
- y축 = TPR (True Positive Rate, 참 양성률) — 0에서 1까지. 실제 양성을 양성이라 맞힌 비율.
동의어 못 박기: ROC의 y축 TPR = recall(재현율) = sensitivity(민감도) — 셋은 완전히 같은 값이다. 그리고 x축 FPR = 1 − specificity(특이도). 0장에서 본 이 관계를 여기서 한 번 더 새긴다. 즉 ROC 곡선은 "재현율(세로)을 올리려면 거짓경보(가로)를 얼마나 감수해야 하는가"를 그린 그림이다.
이 평면에서 특정 위치들이 분명한 뜻을 갖는다. 이것이 지도를 "읽는다"는 말의 핵심이다.
- (0, 1) 좌상단 = 완벽한 분류기. 거짓경보 0(FPR=0)인데 모든 양성을 맞힘(TPR=1). 양성과 음성이 점수상 완벽히 갈렸다는 뜻이다. 좋은 분류기일수록 곡선이 이 모서리에 바짝 붙는다.
- 대각선 y = x = 무작위 분류기(동전 던지기). 재현율을 올린 만큼 똑같이 거짓경보가 늘어, 양성·음성을 구별하는 힘이 전혀 없는 상태다. 점수에 정보가 없으면 곡선은 이 대각선을 따라간다.
- 대각선 위쪽 = 무작위보다 나음. 우리가 바라는 영역이다. 곡선이 대각선에서 위로 멀어질수록 분류력이 좋다.
- 대각선 아래쪽 = 무작위보다 나쁨(역분류). 점수의 방향이 거꾸로 붙은 경우다(이 의미는 03장에서 다시 다룬다).
- (0, 0)과 (1, 1) = 모든 곡선의 양 끝점. 1장에서 본 두 극단이다. 임계값을 +∞로 두면 아무도 양성이라 부르지 않으니 (FPR, TPR) = (0, 0)이고, 임계값을 −∞로 두면 모두 양성이라 부르니 (1, 1)이다. ROC 곡선은 언제나 좌하단 (0,0)에서 출발해 우상단 (1,1)에서 끝난다.
아래 Mermaid는 이 "지도 읽기"를 관계도로 정리한 것이다.
좌표계를 읽을 수 있게 되었으니, 이제 어떻게 이 평면 위에 점이 찍히는지 — 즉 곡선을 그리는 원리로 넘어가자.
작도 원리 — 한 임계값 → 한 점
ROC 곡선이 그려지는 핵심 원리는 한 문장으로 요약된다.
하나의 임계값 → 하나의 혼동행렬 → 하나의 (FPR, TPR) 점.
1장에서 이미 본 사실을 떠올리자. 임계값을 정하면 그 순간 모든 사례가 양/음으로 갈리고, 혼동행렬 한 개가 확정되며, 거기서 TPR과 FPR이 각각 하나의 숫자로 나온다. 그러므로 임계값 한 개는 ROC 평면 위의 점 한 개가 된다.
이제 임계값을 가장 높은 점수보다도 위(+∞)에서 시작해 가장 낮은 점수보다도 아래(−∞)까지 천천히 내려 보자. 임계값을 내릴 때마다 점수가 그 문턱을 넘는 사례가 하나둘 양성 쪽으로 넘어오고, 그때마다 새로운 (FPR, TPR) 점이 찍힌다. 이 점들을 순서대로 이으면 계단 모양의 ROC 곡선이 된다.
왜 계단일까? 임계값을 내려 한 사례가 새로 양성으로 넘어올 때, 그 사례가
- 실제 양성이면 → TP가 1 늘어 TPR만 위로 올라간다(점이 수직으로 한 칸 상승).
- 실제 음성이면 → FP가 1 늘어 FPR만 오른쪽으로 간다(점이 수평으로 한 칸 이동).
이렇게 한 번에 세로 또는 가로로만 움직이니 곡선이 계단처럼 꺾인다. 좋은 분류기는 높은 점수 구간에 양성이 몰려 있어서 처음에는 세로로 쭉 올라간 뒤(거짓경보 없이 양성을 먼저 다 맞힘), 나중에 가로로 가는 모양이 된다 — 즉 좌상단에 붙는다. 점의 개수는 대략 서로 다른 점수의 개수 + 1(시작점 포함)이다.
다음 Mermaid는 이 스윕 → 점 → 곡선의 흐름이다.
원리는 알았으니, 이번엔 분포 그림과 ROC 평면을 나란히 놓고 둘이 어떻게 맞물리는지 직접 보자. 이것이 ROC를 몸으로 이해하는 가장 빠른 길이다.
분포 ↔ ROC 2-패널로 같이 읽기
ROC를 처음 배울 때 가장 강력한 직관은 두 그림을 동시에 보는 것이다. 왼쪽에는 점수 위에 임계값 수직선을 그은 분포 그림을, 오른쪽에는 그 임계값에 대응하는 ROC 평면 위의 점 하나를 둔다. 임계값을 움직이면 두 그림이 연동되어 변한다.
- 왼쪽(분포): 임계값 수직선의 오른쪽에 있는 사례가 "양성 예측"이다. 그 안의 진짜 양성이 TP, 진짜 음성이 FP다. 임계값을 왼쪽으로 밀수록 오른쪽(양성예측) 영역이 넓어진다.
- 오른쪽(ROC): 그 임계값에 해당하는 (FPR, TPR) 점 하나가 강조된다. 임계값을 내릴수록 이 점은 (0,0)에서 출발해 (1,1) 쪽으로 이동한다.
세 개의 임계값에서 이 짝을 직접 보자. 아래 세 그림은 같은 데이터(04장에서 손계산할 표준 예제데이터 — 양성 5개, 음성 5개)에서 임계값을 높음·중간·낮음으로 바꾼 모습이다.
세 그림에서 같은 패턴이 보인다. 임계값을 내릴수록 분포의 수직선은 왼쪽으로 가고, ROC의 점은 좌하단에서 우상단으로 기어 올라간다. 즉 1장에서 본 "임계값↓ → TP↑·FP↑"가 ROC 평면에서는 "점이 (0,0)에서 (1,1) 쪽으로 이동"으로 그대로 나타난다. 두 그림은 같은 사건의 두 얼굴이다.
이제 임계값을 모든 값에 대해 찍어 점들을 이으면, 비로소 곡선 한 줄이 완성된다.
점들을 이어 곡선 한 줄로
앞 절에서는 임계값 세 개의 점만 보았다. 표준 예제데이터에서 임계값을 +∞부터 20까지 모든 점수에 걸쳐 내리면, ROC 평면 위에 점이 11개(시작점 (0,0) 포함) 찍힌다. 이 점들을 순서대로 이으면 계단형 ROC 곡선이 완성된다.
이 11개 점은 04장에서 한 칸씩 손으로 계산할 바로 그 점들이다(같은 데이터, 같은 그림). 미리 좌표만 적어 두면 다음과 같다.
(0, 0) → (0, 0.2) → (0, 0.4) → (0.2, 0.4) → (0.2, 0.6) → (0.4, 0.6) → (0.4, 0.8) → (0.6, 0.8) → (0.6, 1.0) → (0.8, 1.0) → (1.0, 1.0)
좌표를 따라가 보면 곡선의 모양에 사연이 담겨 있음을 알 수 있다. 처음 두 칸은 FPR이 0인 채로 TPR만 올라간다(가장 높은 점수의 두 양성을 거짓경보 없이 맞혔다는 뜻). 그러다 점수 80짜리 음성이 끼어드는 순간 곡선이 오른쪽으로 한 번 꺾인다(FPR이 0.2로). 이 작은 꺾임 때문에 곡선은 좌상단 모서리에 완전히 닿지 못한다 — 완벽한 분류기(AUC=1.0)가 아니게 된 것이다. 이렇게 곡선의 굴곡 하나하나가 "어느 임계값에서 양성을 맞혔고 어느 임계값에서 음성에 속았는지"를 기록한다.
핵심은, 이 한 줄의 곡선이 모든 임계값의 성능을 한꺼번에 담고 있다는 점이다. 임계값을 따로 고르지 않아도, 곡선은 "이 모델로 만들 수 있는 모든 (거짓경보, 재현율) 조합"을 전부 보여 준다. 좌상단에 가까울수록 — 즉 거짓경보를 적게 내면서도 재현율을 높게 유지할수록 — 좋은 분류기다.
이제 자연스러운 다음 질문이 떠오른다. "곡선이 좌상단에 얼마나 가까운지를 숫자 하나로 요약할 수 없을까?" 그 숫자가 바로 다음 장의 주제, 곡선 아래 면적(AUC)이다.
정리
- ROC 평면은 x = FPR, y = TPR이고, 좌상단 (0,1) = 완벽, 대각선 = 무작위, 대각선 아래 = 역분류, (0,0)·(1,1)은 모든 곡선의 양 끝점이다.
- TPR = recall = sensitivity, FPR = 1 − specificity — 같은 값을 다른 이름으로 부른 것뿐이다.
- 작도 원리는 "한 임계값 → 한 혼동행렬 → 한 (FPR, TPR) 점"이며, 임계값을 +∞에서 −∞로 스윕해 점들을 이으면 계단형 곡선이 된다(양성을 넘기면 세로↑, 음성을 넘기면 가로→).
- 분포 그림의 임계값 수직선과 ROC 점은 1:1로 연동된다. 임계값을 내리면 점은 (0,0)에서 (1,1) 쪽으로 이동한다.
- 표준 예제데이터의 ROC는 점 11개로 이루어지며, 곡선이 좌상단에 가까울수록 좋은 분류기다 — 이 "가까움"을 한 숫자로 요약한 것이 다음 장의 AUC다.