정밀도와 재현율
Precision and Recall
지표
모델이 맞다고 한 것 중 실제로 맞은 비율과 실제로 맞는 것 중 모델이 찾아낸 비율을 함께 보는 한 쌍입니다.
등장 배경
맞힌 비율 하나만 보면 아무 일도 하지 않는 모델이 높은 점수를 받습니다. 계정 가운데 스팸이 2퍼센트라면, 무엇이 들어오든 정상이라고 답하는 모델의 정확도가 98퍼센트입니다. 보고서에 98이라고 적히고 실제로 잡은 스팸은 0건입니다.
이 문제는 데이터가 한쪽으로 치우쳐 있을 때 늘 생깁니다. 찾으려는 것이 드물수록 정확도는 쉽게 높아지고, 드문 것을 찾는 일이 애초에 모델을 만든 이유입니다.
두 번째 문제는 틀림의 값이 서로 다르다는 것입니다. 정상 계정을 스팸으로 막으면 그 팀은 로그인을 못 하고 문의를 넣고 대개 떠납니다. 스팸을 놓치면 며칠 뒤에 지워도 됩니다. 두 방향의 틀림이 회사에 남기는 손해가 열 배쯤 차이 나는데, 정확도 하나에는 그 차이가 들어가지 않습니다.
그래서 틀림을 두 방향으로 나눠 보는 한 쌍이 자리를 잡았습니다. 한쪽은 잘못 잡은 것을, 다른 쪽은 놓친 것을 잽니다.
계산 방법
판정 결과를 네 칸으로 나눠 놓고 시작합니다. 실제로 스팸인지와 모델이 스팸이라고 했는지의 조합입니다.
- 스팸인데 스팸이라고 한 것. 제대로 잡은 것입니다.
- 스팸이 아닌데 스팸이라고 한 것. 잘못 잡은 것입니다.
- 스팸인데 아니라고 한 것. 놓친 것입니다.
- 스팸이 아니고 아니라고 한 것.
정밀도는 모델이 스팸이라고 한 것 전체에서 제대로 잡은 것의 비율입니다. 1번을 1번과 2번의 합으로 나눕니다. 스팸이라고 표시한 200건 가운데 실제 스팸이 150건이면 75퍼센트입니다.
재현율은 실제 스팸 전체에서 찾아낸 것의 비율입니다. 1번을 1번과 3번의 합으로 나눕니다. 실제 스팸이 500건이었다면 150을 500으로 나눠 30퍼센트입니다. 같은 모델의 두 숫자가 75와 30으로 갈리는 것이 이 한 쌍을 함께 보는 이유입니다.
둘은 판정 기준을 움직이면 반대로 갑니다. 모델은 대개 확률을 내놓고, 몇 퍼센트 이상을 스팸으로 볼지는 사람이 정합니다. 기준을 0.5에서 0.9로 올리면 확실한 것만 잡으니 잘못 잡는 일이 줄어 정밀도가 오르고, 애매한 것을 놓쳐 재현율이 내려갑니다. 그래서 둘을 동시에 올리는 방법은 기준 조정이 아니라 입력 값을 바꾸거나 데이터를 늘리는 쪽입니다.
하나의 숫자로 봐야 할 때는 두 값의 조화평균을 씁니다. 평범한 평균을 쓰지 않는 이유는 한쪽이 0에 가까울 때 그 사실이 가려지기 때문입니다. 정밀도 100퍼센트에 재현율 2퍼센트인 모델의 산술평균은 51이지만 조화평균은 4입니다.
재는 조건도 정해져 있습니다. 정답이 붙은 데이터가 있어야 하므로 지도 학습에서 쓰고, 학습에 쓰지 않은 데이터로 잽니다. 학습에 쓴 데이터로 재면 과적합된 모델이 두 값 모두 높게 나옵니다.
좋은 수준의 기준
절대 기준은 없습니다. 어느 쪽을 몇 퍼센트로 둘지는 두 방향의 틀림이 각각 얼마를 잃게 하는지로 정합니다.
놓치는 쪽이 비싼 일에서는 재현율을 앞세웁니다. 질병 선별 검사나 보안 탐지가 그렇습니다. 잘못 잡아 사람이 한 번 더 확인하는 비용은 작고, 놓친 한 건의 값이 큽니다.
잘못 잡는 쪽이 비싼 일에서는 정밀도를 앞세웁니다. 정상 계정을 차단하거나 자동으로 환불을 집행하는 판정이 여기입니다. 페이지덱의 스팸 판정이 이쪽이어서 정밀도를 95퍼센트 이상으로 요구하고 재현율은 60퍼센트에서 시작했습니다. 놓친 스팸은 신고로 들어오지만 잘못 막은 팀은 그냥 떠납니다.
둘 다 비싼 일에서는 구간을 나눕니다. 확률이 0.95를 넘는 것만 자동으로 처리하고, 0.6에서 0.95 사이는 사람이 확인하는 대기열로 보내고, 그 아래는 통과시킵니다. 자동 처리 구간에서는 정밀도가 높고 전체로는 재현율을 지킬 수 있습니다. 대기열의 크기가 사람이 감당할 양인지가 이 방식의 제약입니다. 하루 300건이 쌓이면 그 방식은 유지되지 않습니다.
기준을 정하는 순서는 숫자보다 비용이 먼저입니다. 잘못 잡은 한 건과 놓친 한 건이 각각 얼마를 잃게 하는지 금액이나 시간으로 환산한 뒤, 그 비율에 맞춰 판정 기준을 정합니다. 비교 대상은 업계 수치가 아니라 지난 모델과 사람의 판단입니다. 사람이 하던 검수의 정밀도가 88퍼센트였다면 그 값이 첫 기준입니다. 목표를 적을 때 판정 기준도 함께 적어 둡니다.
실무 용례
"정확도 98퍼센트는 아무 뜻이 없습니다. 스팸이 2퍼센트예요."
치우친 데이터에서 정확도가 쓸모없다는 지적입니다.
"정밀도를 95까지 올리고 재현율은 60에서 시작합시다."
두 방향의 틀림 비용을 근거로 목표를 나누는 판단입니다.
"기준을 올리면 재현율이 같이 내려갑니다. 피처를 손봐야 합니다."
기준 조정으로는 둘을 함께 올릴 수 없다는 말입니다.
페이지덱이 스팸 계정 판정을 붙일 때가 그랬습니다. 첫 보고는 정확도 97퍼센트였고, 태오가 두 값으로 나눠 보니 정밀도 62퍼센트에 재현율 41퍼센트였습니다. 스팸이라고 잡은 것 열 건 중 넷이 정상 계정이었습니다.
판정 기준을 올리자 정밀도가 94퍼센트가 됐고 재현율은 26퍼센트로 내려갔습니다. 규원이 그 상태로 자동 차단을 켜기로 정했습니다. 놓친 스팸은 신고로 들어오지만 잘못 막은 계정은 돌아오지 않기 때문입니다. 나머지 구간은 수아가 매일 아침 목록으로 확인하는 방식으로 두었습니다.
흔한 오해
정확도가 높으면 좋은 모델이라고 보는 경우가 가장 많습니다. 하나의 숫자로 요약되니 보고하기 쉽고 직관적입니다. 하지만 찾으려는 것이 드문 문제에서는 이 숫자가 모델의 성능보다 데이터의 치우침을 반영합니다. 전체의 2퍼센트를 찾는 일에서 98점은 출발선이지 성과가 아닙니다. 이 숫자로 판단하면 아무것도 잡지 않는 모델을 배포하고 두 달 뒤에 왜 스팸이 그대로인지 묻게 됩니다.
둘을 함께 올리면 된다고 보는 것도 흔합니다. 목표를 둘 다 90으로 적어 두면 되니 자연스러운 요구입니다. 하지만 같은 모델에서 판정 기준만 움직이는 한 둘은 반대로 갑니다. 함께 올리려면 입력으로 쓰는 값인 피처를 바꾸거나 학습 데이터를 늘려야 하고, 그것은 기준 조정과 달리 몇 주가 드는 일입니다. 목표를 두 값으로 적을 때는 어느 쪽을 먼저 지킬지도 함께 적습니다.
같이 보면 좋은 페이지
마지막 업데이트 2026-09-16