ROC·AUC 완전 입문 — 처음부터 끝까지 따라 읽는 한 권

ROC 곡선이란

목차

학습목표 — 이 장을 마치면 다음을 할 수 있다.

  • ROC 평면(x = FPR, y = TPR)과 그 네 모서리·대각선이 무엇을 뜻하는지 해석한다.
  • 임계값을 높음에서 낮음으로 스윕하며 각 임계값을 하나의 (FPR, TPR) 점으로 바꾼다.
  • 점수 분포 위의 한 임계값과 ROC 평면 위의 한 점을 1:1로 짝지어 읽는다(2-패널 읽기).
  • 곡선이 좌상단에 가까울수록 좋은 분류기임을 설명한다.

ROC 곡선은 "임계값을 다 써 본 한 장의 지도"다

0장에서 우리는 모델이 매기는 점수와, 그 점수를 양/음으로 가르는 임계값을 구분했다. 1장에서는 임계값을 한 칸씩 옮길 때마다 혼동행렬의 네 칸(TP·FP·FN·TN)이 시소처럼 재분배되는 것을 보았다. 임계값을 낮추면 더 많은 사례를 양성으로 부르니 TP도 늘고 FP도 따라 늘었다 — 공짜 점심은 없었다.

그렇다면 자연스러운 질문이 생긴다. 임계값을 하나만 고를 게 아니라, 가능한 임계값을 전부 시험해 보면 어떨까? 임계값마다 모델의 "재현율(놓치지 않는 능력)"과 "거짓경보율(헛다리 짚는 정도)"이 한 쌍으로 정해진다. 이 쌍들을 전부 모아 한 장의 그림에 찍으면, 그것이 바로 ROC 곡선이다.

비유하자면 ROC 곡선은 카메라의 감도(ISO) 다이얼을 처음부터 끝까지 돌려보며 찍은 결과를 한 장에 겹쳐 둔 것과 같다. 다이얼을 어디에 두느냐에 따라 사진이 달라지듯, 임계값을 어디에 두느냐에 따라 분류 성능이 달라진다. ROC 곡선은 "이 다이얼로 만들 수 있는 모든 결과"를 한눈에 보여 주는 지도다. 이 장에서는 그 지도를 읽는 법그리는 법을 차례로 익힌다.

광고 · Advertisements

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는 이 "지도 읽기"를 관계도로 정리한 것이다.

가까울수록 좋음

아래로 떨어지면

(0,1) 좌상단
= 완벽 분류

대각선 y=x
= 랜덤(동전)

대각선 아래
= 역분류(AUC<0.5)

좌표계를 읽을 수 있게 되었으니, 이제 어떻게 이 평면 위에 점이 찍히는지 — 즉 곡선을 그리는 원리로 넘어가자.

광고 · Advertisements

작도 원리 — 한 임계값 → 한 점

ROC 곡선이 그려지는 핵심 원리는 한 문장으로 요약된다.

하나의 임계값 → 하나의 혼동행렬 → 하나의 (FPR, TPR) 점.

1장에서 이미 본 사실을 떠올리자. 임계값을 정하면 그 순간 모든 사례가 양/음으로 갈리고, 혼동행렬 한 개가 확정되며, 거기서 TPR과 FPR이 각각 하나의 숫자로 나온다. 그러므로 임계값 한 개는 ROC 평면 위의 점 한 개가 된다.

이제 임계값을 가장 높은 점수보다도 위(+∞)에서 시작해 가장 낮은 점수보다도 아래(−∞)까지 천천히 내려 보자. 임계값을 내릴 때마다 점수가 그 문턱을 넘는 사례가 하나둘 양성 쪽으로 넘어오고, 그때마다 새로운 (FPR, TPR) 점이 찍힌다. 이 점들을 순서대로 이으면 계단 모양의 ROC 곡선이 된다.

계단일까? 임계값을 내려 한 사례가 새로 양성으로 넘어올 때, 그 사례가

  • 실제 양성이면 → TP가 1 늘어 TPR만 위로 올라간다(점이 수직으로 한 칸 상승).
  • 실제 음성이면 → FP가 1 늘어 FPR만 오른쪽으로 간다(점이 수평으로 한 칸 이동).

이렇게 한 번에 세로 또는 가로로만 움직이니 곡선이 계단처럼 꺾인다. 좋은 분류기는 높은 점수 구간에 양성이 몰려 있어서 처음에는 세로로 쭉 올라간 뒤(거짓경보 없이 양성을 먼저 다 맞힘), 나중에 가로로 가는 모양이 된다 — 즉 좌상단에 붙는다. 점의 개수는 대략 서로 다른 점수의 개수 + 1(시작점 포함)이다.

다음 Mermaid는 이 스윕 → 점 → 곡선의 흐름이다.

임계값 스윕
(+∞ → −∞)

각 임계값마다
혼동행렬 1개

(FPR, TPR) 점 1개

점들을 이으면
ROC 곡선

원리는 알았으니, 이번엔 분포 그림과 ROC 평면을 나란히 놓고 둘이 어떻게 맞물리는지 직접 보자. 이것이 ROC를 몸으로 이해하는 가장 빠른 길이다.

분포 ↔ ROC 2-패널로 같이 읽기

ROC를 처음 배울 때 가장 강력한 직관은 두 그림을 동시에 보는 것이다. 왼쪽에는 점수 위에 임계값 수직선을 그은 분포 그림을, 오른쪽에는 그 임계값에 대응하는 ROC 평면 위의 점 하나를 둔다. 임계값을 움직이면 두 그림이 연동되어 변한다.

  • 왼쪽(분포): 임계값 수직선의 오른쪽에 있는 사례가 "양성 예측"이다. 그 안의 진짜 양성이 TP, 진짜 음성이 FP다. 임계값을 왼쪽으로 밀수록 오른쪽(양성예측) 영역이 넓어진다.
  • 오른쪽(ROC): 그 임계값에 해당하는 (FPR, TPR) 점 하나가 강조된다. 임계값을 내릴수록 이 점은 (0,0)에서 출발해 (1,1) 쪽으로 이동한다.

세 개의 임계값에서 이 짝을 직접 보자. 아래 세 그림은 같은 데이터(04장에서 손계산할 표준 예제데이터 — 양성 5개, 음성 5개)에서 임계값을 높음·중간·낮음으로 바꾼 모습이다.

높은 임계값(=85): 보수적이라 거짓경보 0, 재현율 낮음
그림 1. 높은 임계값(=85): 보수적이라 거짓경보 0, 재현율 낮음
임계값을 높게(85) 두면 점수 95·90인 양성 둘만 양성으로 불러 거짓경보가 0이지만(FPR=0) 재현율은 0.4에 그친다 — ROC 점 (0.0, 0.4).

중간 임계값(=60): 재현율이 오르며 거짓경보가 일부 발생
그림 2. 중간 임계값(=60): 재현율이 오르며 거짓경보가 일부 발생
임계값을 중간(60)으로 내리면 양성 넷을 맞혀 재현율이 0.8로 오르지만 음성 둘을 잘못 부르며 거짓경보가 생긴다 — ROC 점 (0.4, 0.8).

낮은 임계값(=30): 모든 양성을 포착하지만 거짓경보가 많음
그림 3. 낮은 임계값(=30): 모든 양성을 포착하지만 거짓경보가 많음
임계값을 낮게(30) 두면 모든 양성을 다 잡아 재현율이 1.0이 되지만 음성을 대거 잘못 부른다 — ROC 점 (0.8, 1.0).

세 그림에서 같은 패턴이 보인다. 임계값을 내릴수록 분포의 수직선은 왼쪽으로 가고, ROC의 점은 좌하단에서 우상단으로 기어 올라간다. 즉 1장에서 본 "임계값↓ → TP↑·FP↑"가 ROC 평면에서는 "점이 (0,0)에서 (1,1) 쪽으로 이동"으로 그대로 나타난다. 두 그림은 같은 사건의 두 얼굴이다.

이제 임계값을 모든 값에 대해 찍어 점들을 이으면, 비로소 곡선 한 줄이 완성된다.

점들을 이어 곡선 한 줄로

앞 절에서는 임계값 세 개의 점만 보았다. 표준 예제데이터에서 임계값을 +∞부터 20까지 모든 점수에 걸쳐 내리면, ROC 평면 위에 점이 11개(시작점 (0,0) 포함) 찍힌다. 이 점들을 순서대로 이으면 계단형 ROC 곡선이 완성된다.

임계값 스윕이 점을 만들고 이으면 ROC 곡선이 된다
그림 4. 임계값 스윕이 점을 만들고 이으면 ROC 곡선이 된다
임계값을 높음에서 낮음으로 내리며 (FPR, TPR) 점 11개를 순차로 찍고 계단선으로 이은 ROC 곡선이다 — 점은 (0,0)에서 시작해 (1,1)에서 끝난다.

이 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다.
광고 · Advertisements
이 시리즈 전체 챕터

학습경로 의존맵 보기 →