산불 발생 시 소셜 미디어를 모니터링하는 시스템을 구축한다고 상상해 보세요.
매시간 수천 개의 게시물이 올라옵니다. 대부분은 평범한 대화이지만, 소수의 게시물에 대피 정보, 폐쇄된 도로, 또는 발생하는 위험 요소에 대한 중요한 정보가 담겨 있을 수 있습니다.
당신의 분류기는 잠재적으로 관련성이 있는 게시물을 플래그 지정하여 추가 검토를 하도록 설계되었습니다.
이를 평가해 보니 ROC-AUC 값이 0.95로 나왔습니다.
정말 훌륭하게 들립니다.
하지만 알림을 자세히 살펴보니, 플래그가 지정된 게시물 대부분이 관련성이 없다는 것을 발견했습니다.
모델은 어떻게 높은 ROC-AUC를 가지면서도 이렇게 많은 오경보(false alarms)를 발생시킬 수 있을까요?
답변은 특히 양성 클래스가 희귀할 때, ROC-AUC와 정밀도-재현율 지표(precision-recall metrics)를 비교하면서 더욱 명확해집니다.
이 튜토리얼에서는 작고 재현 가능한 Python 예제를 구성하고, 두 가지 지표를 모두 계산하며, 이들이 동일한 분류기에 대해 우리에게 무엇을 알려주는지 탐구할 것입니다.
소셜 미디어 게시물 10,000개를 포함하는 데이터셋을 고려해 봅시다.
식별하고자 하는 이벤트가 포함된 것은 단 100개뿐입니다. 나머지 9,900개는 그렇지 않습니다.
| 클래스 | 게시물 수 | 비율 |
|---|
| 관련 이벤트 | 100 | 1% |
| ... | | |
| 이것은 불균형 분류 문제(imbalanced classification problem)입니다. | | |
양성 클래스는 우리가 감지하려는 이벤트입니다. 이는 데이터셋의 단 1%만을 차지합니다.
이러한 상황은 수많은 응용 분야에서 나타납니다:
- 사기 탐지: 사기 거래가 흔치 않은 경우.
- 보안 모니터링: 실제 공격이 희귀한 경우.
- 예측 유지보수: 장비 고장이 드물게 발생하는 경우.
- 위기 모니터링: 중요한 이벤트 보고서가 모든 게시물의 작은 부분을 차지하는 경우.
모델은 단순히 모든 게시물이 음성이라고 예측함으로써 99%의 정확도(accuracy)를 달성할 수 있습니다.
이 경우, 관련 이벤트 100개 중 어느 것도 식별하지 못합니다.
이는 중요한 교훈을 보여줍니다: 지표는 우리가 해결하려는 문제를 반영할 때만 유용하다.
- ROC-AUC와 PR-AUC가 측정하는 것은 무엇인가요?
코드를 작성하기 전에, 이 지표들을 구별해 봅시다.
ROC-AUC: 모델은 양성 예시를 얼마나 잘 순위화하는가?
수신자 작동 특성(Receiver Operating Characteristic, ROC) 곡선은 다음을 플롯합니다:
- 진양성률 (True Positive Rate, TPR): 올바르게 식별된 양성 예시의 비율.
- 위양성률 (False Positive Rate, FPR): 잘못 표시된 음성 예시의 비율.
진양성률은 재현율(recall) 또는 민감도(sensitivity)라고도 불립니다.
진양성률은 재현율 또는 민감도라고도 불립니다:
TPR = TP / (TP + FN)
FPR = FP / (FP + TN)
ROC-AUC는 분류 임계값(classification thresholds) 전반에 걸쳐 ROC 곡선을 요약합니다. 이는 모델이 양성 예시를 음성 예시보다 얼마나 잘 순위화하는지를 측정합니다.
1.0의 점수는 완벽한 순위화를 나타내며, 0.5에 가까운 점수는 일반적인 이진 분류 해석 하에서 무작위 순위화와 유사한 성능을 나타냅니다.
하지만 위양성률은 모든 음성 예시를 분모로 사용합니다. 수천 개의 음성 예시가 있는 경우, 겉보기에 작은 비율이라도 여전히 많은 수의 오경보(false alarms)를 발생시킬 수 있습니다.
정밀도-재현율 (Precision-recall): 양성 예측은 얼마나 유용한가?
정밀도-재현율(PR) 곡선은 다른 임계값에서 정밀도(precision)와 재현율(recall)을 플롯합니다.
정밀도는 다음 질문에 답합니다:
모델이 표시한 모든 게시물 중에서 실제로 관련성이 있는 것은 몇 개인가?
정밀도 (Precision) = TP / (TP + FP)
재현율은 다른 질문에 답합니다:
모든 관련성 높은 게시물 중에서 모델이 찾아낸 것은 몇 개인가?
재현율 (Recall) = TP / (TP + FN)
정밀도-재현율 곡선 아래의 면적(Area Under the Curve)은 이 두 양 사이의 상충 관계(trade-off)를 요약합니다.
scikit-learn에서는 PR 곡선의 요약으로 평균 정밀도(Average Precision, AP)를 사용할 것입니다. AP는 일반적인 PR 곡선 요약이지만, 곡선 아래의 사다리꼴 면적을 계산하는 것과는 같지 않습니다.
불균형 데이터셋(imbalanced datasets)의 경우, 정밀도-재현율 분석은 ROC 분석만 하는 것보다 위양성(false positives)의 실제적인 결과를 더 명확하게 보여주는 경우가 많습니다 (Saito & Rehmsmeier, 2015).
복잡한 모델을 학습시키는 대신, 알려진 결과값을 가진 합성 데이터셋을 구성해 봅시다.
이는 의도적인 과정입니다. 목표는 지표 자체의 동작 방식을 분리하여 보여주는 것이지, 우리가 실제 운영 가능한 탐지기를 만들었다고 주장하려는 것이 아닙니다.
저희 분류기는 다음과 같은 점수(score)를 할당합니다:
| 실제 클래스 | 점수 (Score) | 게시물 수 (Number of posts) |
|---|
| Negative | 0.90 | 495 |
| ... | | |
| 높은 점수는 모델이 해당 게시물이 양성일 가능성이 더 높다고 간주함을 의미합니다. | | |
흥미로운 점을 주목해 주세요. 가장 높은 점수를 받은 495개의 부정(negative) 게시물이 양성 게시물보다 순위가 앞서고 있습니다.
이는 낮은 위양성률(false positive rate)이 상당한 수의 오경보(false alerts)와 공존할 수 있음을 보여주는 유용한 교육적 예시입니다.
직접 구현해 봅시다.
import numpy as np
from sklearn.metrics import (
...
예상 출력은 다음과 같습니다:
ROC-AUC: 0.9500
Average Precision: 0.1449
Precision at threshold 0.5: 0.1681
...
대조적인 차이가 두드러집니다.
ROC-AUC는 0.95로, 이 합성 데이터셋에서 강력한 전반적 순위 성능을 나타냅니다. 하지만 평균 정밀도(average precision)는 약 0.145에 불과하며, 선택된 임계값(threshold)에서는 플래그가 지정된 게시물 중 실제로 양성인 비율이 17% 미만입니다.
이 예시는 왜 이 지표들이 서로 다른 질문에 답하는지를 보여줍니다.
| 예측 양성 (Predicted positive) | 예측 부정 (Predicted negative) |
|---|
| 실제 양성 (Actually positive) | 100 | 0 |
| 실제 부정 (Actually negative) | 495 | 9,405 |
우리는 모든 양성 사례를 찾아냈습니다.
이는 100% 재현율(recall)을 의미합니다.
하지만 495개의 부정 게시물도 플래그가 지정되었습니다.
저희의 정밀도는 다음과 같습니다:
정밀도 (Precision): = 100 / (100 + 495), 약 0.1681
다시 말해, 플래그가 지정된 595개의 게시물 중 양성인 것은 단지 100개에 불과합니다.
모델은 이 임계값에서 완벽한 재현율을 달성했지만, 경고 처리해야 할 작업량(alert workload)은 상당합니다.
모든 경보를 수동으로 조사해야 하는 위기 대응팀을 상상해 보세요. 595개의 게시물을 검토하여 관련 있는 100개를 찾는 것은 비용이 많이 들 수 있으며, 특히 시스템이 지속적으로 운영된다면 더욱 그렇습니다.
이것이 바로 지표의 운영적 측면입니다.
ROC-AUC는 임계값(thresholds) 전반에 걸친 순위(ranking) 성능을 알려줍니다. 정밀도(Precision)는 특정 임계값에서 생성된 양성 예측(positive predictions)에 얼마나 신뢰를 부여해야 하는지를 알려줍니다.
이 두 지표는 결코 독립적으로 해석되어서는 안 됩니다.
import matplotlib.pyplot as plt
from sklearn.metrics import (
...
ROC 곡선은 0.95의 ROC-AUC를 보이며 전반적으로 강력한 순위 성능을 보여줍니다.
하지만 이 지표는 데이터셋이 심하게 불균형할 때 거짓 양성(false positives)의 영향을 가릴 수 있습니다.
정밀도-재현율 곡선(precision-recall curve)은 이러한 문제를 강조합니다. 495개의 음성 게시물(negative posts)이 모든 양성 게시물보다 높은 점수를 받아, ROC-AUC가 높음에도 불구하고 정밀도를 떨어뜨립니다.
PR 플롯의 점선은 양성 클래스 유병률(positive-class prevalence)을 나타냅니다. 무작위 순위링(random rankings)의 경우 예상 평균 정밀도(expected Average Precision)는 이 유병률과 거의 같으며, 이 예시에서는 0.01 (1%)입니다.
주의할 점: 이 데이터셋은 의도적으로 구성된 점수 그룹을 사용합니다. 실제 모델들은 일반적으로 다른 점수 분포를 생성하므로, 그 곡선들의 모양이 다를 수 있습니다.
반드시 그렇지는 않습니다.
ROC-AUC는 임계값 전반에 걸친 순위 행동을 비교할 때 여전히 유용하며, 두 클래스 모두 작업에 중요한 경우 특히 가치가 있을 수 있습니다.
정밀도-재현율 지표(Precision-recall metrics)는 양성 클래스가 희귀하고 양성 예측의 품질이 운영적으로 중요할 때 특히 유익합니다. 이것이 바로 이들이 불균형 분류 연구에서 ROC 분석과 함께 널리 고려되는 이유입니다 (Davis & Goadrich, 2006; Saito & Rehmsmeier, 2015).
선택은 궁극적으로 오류의 비용에 달려 있습니다.
두 가지 시나리오를 고려해 보세요.
시나리오 A: 이벤트를 놓치는 것이 극도로 비용이 많이 드는 경우.
초기 위기 감지 단계에서는 가능한 한 많은 잠재적으로 중요한 게시물을 포착하기 위해 낮은 임계값(threshold)을 선호할 수 있습니다. 이는 재현율(recall)을 높이지만, 오경보(false alarm)의 수도 증가시킬 수 있습니다.
시나리오 B: 인간 검토 역량이 제한적일 때.
소규모 팀이 처리할 수 있는 게시물 수가 제한적이라면, 정밀도(precision)와 정밀도-재현율(precision-recall) 동작이 특히 중요해집니다. 너무 많은 관련 없는 게시물을 플래그 지정하는 모델은 이를 조사해야 하는 사람들을 압도할 수 있습니다.
따라서 임계값은 과제, 가용 자원, 그리고 오탐지(false positive)와 미탐지(false negative)의 상대적 비용을 반영해야 합니다.
AUC 값만으로는 임계값을 선택해주지 않습니다.
- 이것을 이상 탐지 및 사실 확인에 어떻게 적용해야 할까요?
이러한 구분은 특히 비상 상황 중 소셜 미디어 분석에서 중요합니다.
이상 감지기(anomaly detector)는 특이한 게시물 클러스터, 메시지 볼륨의 급격한 변화, 또는 일반적인 패턴과 다른 콘텐츠를 식별할 수 있습니다.
그 출력은 추가 조사를 위한 신호일 뿐입니다. 그것이 특정 게시물이 허위라는 증거는 아닙니다.
시스템은 여전히 주장을 검토하고, 사용 가능한 증거를 평가하며, 불확실성을 고려해야 합니다.
평가는 이러한 개별적인 책임을 반영해야 합니다. 이상 감지는 관련 사례를 우선순위화하는 능력에 대해 테스트되어야 하며, 반면 사실 확인(verification)은 적절한 참고 증거 및 레이블을 기준으로 평가되어야 합니다.
이것은 제가 위기 관리에서 소셜 미디어 데이터의 이상 탐지 및 사실 확인에 관한 석사 논문(MSc thesis)에서 탐구했던 설계 원칙 중 하나입니다. 즉, 특이한 콘텐츠는 자동적으로 허위 정보로 취급되지 않고 분석을 위해 우선순위가 지정되어야 한다는 것입니다.
탐지와 검증 사이의 구분은 단순히 철학적인 문제가 아닙니다. 이는 시스템이 측정하는 것, 그 출력이 해석되는 방식, 그리고 어떤 오류가 중요한지를 바꿉니다.
긍정 사례(positive cases)가 희귀할 때, 모델은 한 지표에서는 인상적으로 보일 수 있지만 다른 지표에서는 약점을 드러낼 수 있습니다.
ROC-AUC는 임계값(thresholds) 전반에 걸친 순위링 행동을 요약합니다. 정밀도-재현율 분석은 검색된 양성 사례와 오경보 사이의 관계를 더욱 명확하게 보여줍니다. 이후 정밀도(Precision), 재현율(Recall), 그리고 혼동 행렬(confusion matrix)은 우리가 실제로 사용하려는 작동 임계값에서 무슨 일이 발생하는지 이해하는 데 도움을 줍니다.
저의 실질적인 체크리스트는 다음과 같습니다:
-
클래스 분포를 확인하세요. 점수를 해석하기 전에 양성 클래스가 얼마나 희귀한지 파악해야 합니다.
-
정확도(accuracy)보다 더 많은 지표를 보고하세요. ROC-AUC, 평균 정밀도(average precision), 정밀도, 재현율, 그리고 혼동 행렬을 고려해 보세요.
-
결과에 기반하여 임계값을 선택하세요. 오탐지 양성 사례(false positives)가 야기하는 작업 부하와 놓친 이벤트(missed events)로 인한 피해를 생각해야 합니다.
-
대표적인 데이터셋으로 검증하세요. 통제된 데이터셋에서의 모델 성능이 라이브 환경에서 유용하다는 것을 자동으로 입증하지는 못합니다.
가장 중요한 것은, 모델을 의도한 작업에 맞춰 평가하는 것입니다.
AI 보조 의사결정(decision-making)에서 목표는 단순히 높은 점수를 산출하는 것이 아닙니다. 그 점수가 무엇을 확립하고—무엇이 여전히 불확실한지—를 이해하는 것입니다.
참고 문헌 및 추가 자료
이 분석이 유익하셨나요? 더 많은 머신러닝 가이드와 기사를 원하시면 제 웹사이트 ioannidis.dev를 방문해 주세요.