18강 / 20강
이상 탐지 — 수상한 주문 걸러내기
규칙 점수화 · 임계값 · 오탐과 미탐 사이의 줄타기
새벽 3시. 한 계정에서 10분 만에 주문 40건이 들어왔습니다. 전부 같은 고가 상품, 배송지는 전부 다르고, 카드는 모두 처음 보는 번호입니다.
도난 카드일 확률이 높습니다. 그런데 자동으로 막아도 될까요? 진짜 손님이 명절 선물을 40군데 보내는 걸 수도 있는데요.
이것이 이상 탐지(anomaly detection)의 본질적인 딜레마입니다.
점수와 이유를 함께 남기는 것이 핵심입니다. 나중에 설명할 수 있어야 해요.
Python
브라우저에서 실행
임계값 — 어디에 선을 그을 것인가
임계값을 낮추면 더 많이 잡지만 억울한 사람도 늘어납니다. 높이면 억울한 사람은 줄지만 진짜 사기를 놓칩니다.
이 두 종류의 실수에는 이름이 있습니다.
| 실제로 사기 | 실제로 정상 | |
|---|---|---|
| 사기로 판정 | ✅ 정탐 (TP) | ⚠️ 오탐 (FP) 억울한 손님 |
| 정상으로 판정 | 🚨 미탐 (FN) 돈이 나감 | ✅ 정상 통과 (TN) |
- 정밀도(precision) = 사기라고 한 것 중 진짜 사기 비율 → 억울함이 적은가
- 재현율(recall) = 진짜 사기 중 잡아낸 비율 → 얼마나 놓치지 않는가
둘은 동시에 올릴 수 없습니다. 하나를 올리면 다른 하나가 내려가요. 이 줄타기가 이상 탐지 운영의 전부입니다.
차단 말고 다른 선택지
"통과 아니면 차단" 두 가지만 있는 게 아닙니다. 중간 단계를 두면 오탐의 고통이 크게 줄어요.
| 점수 | 조치 | 손님 경험 |
|---|---|---|
| 0–39 | 그냥 통과 | 아무 일 없음 |
| 40–59 | 추가 인증 (문자 인증) | 살짝 번거로움. 진짜 손님은 통과. |
| 60–79 | 수동 검토 큐로 (11강!) | 배송이 몇 시간 늦어짐 |
| 80+ | 자동 차단 + 알림 | 거절. 고객센터 문의 안내. |
"의심스러우면 막지 말고 확인시켜라"가 좋은 원칙입니다.
고객마다 '평소'가 다릅니다. 절대 기준보다 개인 기준이 강력해요.
Python
브라우저에서 실행
🤔 확인 문제
오탐(False Positive)이 의미하는 것은?
해설 억울한 손님입니다. 오탐이 많으면 고객이 떠나요. 반대로 사기를 놓치는 것은 미탐(FN)입니다.
🤔 확인 문제
탐지 임계값을 낮추면 어떻게 될까요?
해설 임계값을 낮추면 재현율↑ 정밀도↓입니다. 둘은 동시에 올릴 수 없고, 어느 쪽 손해를 감수할지 사업이 결정해야 해요.
🤔 확인 문제
의심 점수가 중간 정도인 주문에 대한 가장 좋은 처리는?
해설 "의심스러우면 막지 말고 확인시켜라"가 원칙입니다. 중간 단계를 두면 오탐의 고통을 크게 줄일 수 있어요.