보험 도메인 심화 · 사기 탐지 규칙과 임계값 · 이론
규칙은 쉽게 만들고, 임계값에서 막힌다
한 줄 요약
사기 탐지에서 어려운 것은 규칙을 떠올리는 일이 아니라, 점수를 어디서 끊을지 정하는 일이다. 임계값은 정밀도와 재현율을 맞바꾸는 손잡이이고, 실제로 그 손잡이를 돌리는 것은 모형이 아니라 조사 인력의 하루 처리량이다.
왜 이게 필요했나
탐지 규칙 회의는 대개 비슷하게 흘러간다. "계약하고 한 달 안에 사고가 나면 수상하다", "접수가 두 달 넘게 늦으면 수상하다" 같은 말이 쏟아지고, 다들 고개를 끄덕인다. 규칙을 코드로 옮기는 것도 어렵지 않다. 그리고 돌려 보면 청구 사백 건 중 백구십 건이 걸린다. 조사팀은 이번 분기에 열 건밖에 못 본다.
여기서부터가 진짜 일이다. 규칙 하나하나가 얼마나 쓸모 있는지 숫자로 재고, 점수를 어디서 끊을지 정하고, 그 선택이 누구에게 어떤 비용을 남기는지 말할 수 있어야 한다. 이 과정을 건너뛴 규칙판은 "수상한 것을 잡는다" 는 말만 남기고, 실제로는 조사역의 시간을 오탐에 쓰게 만든다.
한 가지를 먼저 분명히 해 두자. 이 실습이 다루는 것은 탐지기를 만드는 쪽이다. 어떤 수법이 어떻게 빠져나가는지를 설명하지 않고, 합성 자료에 심어 둔 정답표로 임계값을 고르는 일에 집중한다. 보험사기 조사와 보고의 권한과 절차는 법으로 정해져 있고([보험업법](https://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%B3%B4%ED%97%98%EC%97%85%EB%B2%95)), 데이터 팀이 만드는 것은 판단이 아니라 조사 대상 목록과 그 근거다.
어떻게 동작하나
먼저 규칙마다 성적을 낸다. 규칙 하나가 몇 건을 걸었고 그중 몇 건이 확정 사고였는지를 세면, 그 규칙 단독의 정밀도가 나온다. 실무에서 이 숫자는 대개 실망스럽다. 혼자서 절반을 넘기는 규칙은 드물다. 그래서 규칙 하나로 판정하지 않고 가중치를 붙여 더한다. 가중치는 그 규칙 단독 정밀도와 업무 담당자의 판단을 함께 반영한다.
그 다음이 혼동행렬이다. 임계값을 정하면 청구는 네 칸으로 나뉜다. 걸렸고 실제 사고였다(TP), 걸렸는데 아니었다(FP), 안 걸렸는데 사고였다(FN), 안 걸렸고 아니었다(TN). 여기서 나오는 지표는 세 개다.
정밀도(precision) = TP / (TP + FP) 걸린 것 중 맞은 비율 -> 조사역의 헛수고재현율(recall) = TP / (TP + FN) 사고 중 잡은 비율 -> 새어 나간 손해F1 = 2PR / (P + R) 둘의 조화평균정의는 [scikit-learn 의 모형 평가 문서](https://scikit-learn.org/stable/modules/model_evaluation.html)가 잘 정리해 두었다. 라이브러리는 이 실습 이미지에 없지만 계산은 나눗셈 몇 번이라 [statistics 모듈](https://docs.python.org/3/library/statistics.html)과 기본 산술로 충분하고, 금액처럼 정확해야 하는 값은 [decimal](https://docs.python.org/3/library/decimal.html)로 다룬다. 집단별 집계나 누적 계산이 필요하면 [SQLite 의 창 함수](https://www.sqlite.org/windowfunctions.html)가 손에 익혀 둘 만하다.
임계값을 1점부터 올려 가며 표를 만들면 두 지표가 반대로 움직이는 것이 한눈에 보인다. 여기서 기저율이 결정적이다. 사백 건 중 스물네 건이 사고라면 기저율은 6퍼센트다. 임계값을 1점까지 내리면 재현율은 거의 1에 가까워지지만 정밀도는 10퍼센트 근처로 무너진다. 걸린 열 건 중 아홉 건이 헛수고라는 뜻이다. 기저율이 낮은 문제에서 정밀도는 아주 빠르게 나빠지고, 이것은 규칙이 나빠서가 아니라 산수다.
마지막이 한도다. F1 이 가장 높은 지점이 운영할 지점이 아닌 경우가 훨씬 많다. 조사팀이 이번 분기에 열 건만 볼 수 있다면, 선택지는 걸리는 건수가 열 건 이하인 임계값뿐이다. 그 안에서 가장 나은 지점을 고르고, 한도가 없었다면 어디가 최선이었는지를 함께 적어 둔다. 그 차이가 인력을 더 요청할 때의 근거가 된다.
현장에서 만나는 모습
첫째, 집단 편중이다. 어떤 채널이나 지역이 유난히 많이 걸린다면 두 가지 가능성이 있다. 그 집단의 사고 비율이 실제로 높거나, 규칙이 사기와 무관한 운영 특성을 잡아냈거나. 전화 접수 창구는 서류가 늦게 도착해 지연 접수가 잦고, 지점 고객은 소액 청구를 여러 번 나눠 내는 관행이 있다. 둘 다 규칙에는 똑같이 걸린다. 적용률만 보면 차별이 되고, 적용률과 그 집단의 기저율을 나란히 놓아야 판단이 선다.
둘째, 오탐의 비용이 보이지 않는 것이다. 오탐 한 건은 표에서는 숫자 1이지만 고객에게는 추가 서류 요청과 지급 지연이다. 정밀도를 "정확도" 로만 읽으면 이 비용이 사라진다.
셋째, 재현성이다. 임계값은 자료가 바뀌면 따라 움직인다. 규칙판에 판 번호와 자료 지문을 붙여 두지 않으면, 두 달 뒤에 "그때 그 판정이 어떤 규칙으로 나왔는가" 를 답할 수 없다.
실무에서 진짜 중요한 것
- 규칙마다의 성적을 먼저 낸다. 단독 정밀도가 낮은 규칙은 가중치를 낮추거나 묶어서만 쓴다.
- 임계값은 표로 만들어 고른다. 한 지점만 계산하면 무엇을 포기했는지 모른다.
- 운영 한도를 제약으로 넣는다. 최선의 F1 이 아니라 볼 수 있는 만큼 이 기준이다.
- 적용률은 그 집단의 기저율과 나란히 본다. 한쪽만 보면 답이 없다.
- 판정 목록에는 어떤 규칙이 걸렸는지를 함께 낸다. 점수만 있는 목록은 검토할 수 없다.
- 규칙판에 판 번호와 자료 지문을 남긴다. 그것이 나중의 설명 가능성이다.
다음 실습에서 할 것
합성 청구 사백 건을 직접 만들고, 규칙 다섯 개의 성적을 규칙별로 낸다. 점수를 합쳐 판정 목록을 만들고, 처음 제안된 임계값에서 혼동행렬과 세 지표를 손으로 계산한다. 임계값을 1점부터 끝까지 올려 가며 표를 만들고, 채널별 적용률과 기저율을 나란히 놓아 편중을 확인한 뒤, 조사 인력 한도 안에서 운영할 임계값을 고른다. 마지막으로 판 번호와 자료 지문이 붙은 규칙판과 사람이 읽을 보고서를 낸다.