이 글은 누구를 위한 것인가
- 모델 정확도(accuracy)만 보고 평가가 끝난다고 느끼는 데이터 사이언티스트
- 추천·랭킹·예측 모델의 비용 대비 가치를 다시 정리하려는 ML 엔지니어
- "왜 우리 모델이 ROI가 안 나오는지"를 설명해야 하는 ML 리드
들어가며
AUC 0.85 모델은 좋은 모델인가. 정확도 92%면 배포해도 되나. 자주 받는 질문이고, 답은 같다. 모르겠다. 비교 대상이 없으면 수치는 수치일 뿐이다.
도박 산업이 이 문제를 일찍부터 풀어 두었다. 모든 상품이 한 단어로 자기 기댓값을 표현한다. 환수율(RTP)이다. 사용자가 1만 원 베팅하면 장기 평균 얼마가 돌아오는지 한 숫자로 적는다. 배당률은 내재 확률로 풀어 쓸 수 있고, 모델이 그보다 더 정확한 확률을 갖고 있어야 기댓값이 양수가 된다.
테이블플레이 블로그의 스포츠토토 vs 카지노 — 환수율과 하우스 엣지 수치 비교, 스포츠토토 배당률 읽는 법 — 오즈와 내재 확률 완전 이해 두 글이 이 사고법을 깔끔하게 정리한다. ML 모델 평가에 그대로 옮길 수 있다.

1. 베이스라인 = 환수율의 시장 평균
ML에서 가장 흔한 실수는 베이스라인 비교 없이 모델 성능을 보고하는 것이다. AUC 0.85는 무작위(0.5)와 비교해 좋은 숫자지만, 다음 베이스라인과 비교하면 다르다.
| 베이스라인 | AUC 가정 |
|---|---|
| 무작위 | 0.50 |
| 가장 인기 있는 항목 추천 | 0.65 |
| 사용자 직전 클릭 카테고리 추천 | 0.78 |
| 단순 협업 필터링 | 0.82 |
| 우리 모델 | 0.85 |
같은 0.85가 마지막 줄에 있느냐 첫 줄 위에 있느냐에 따라 의미가 다르다. 도박 산업의 환수율도 동일하다. 슬롯의 평균 RTP가 96%라는 사실을 알아야 우리 슬롯이 92%면 시장 평균보다 나쁨을 즉시 안다.
ML 평가 보고서에 다음 한 줄을 추가하는 것을 권한다.
모델 AUC: 0.85
베이스라인 (가장 인기): 0.65
베이스라인 (협업 필터링): 0.82
순수 리프트: +0.03 vs 협업 필터링
순수 리프트 0.03이 비즈니스적으로 의미 있는지 다시 평가한다. 0.03이 매출 +5%로 환산되면 가치가 있고, +0.5%면 모델 운영 비용이 더 클 수 있다.
2. 캘리브레이션 = 배당의 내재 확률
테이블플레이 배당률 읽는 법 글은 1.50배 배당이 내재 확률 약 66.7%를 의미한다고 푼다. 모델이 실제 확률 70%를 정확히 추정해야 베팅이 양수 기댓값이 된다.
ML 모델에서 같은 사고가 캘리브레이션이다. 모델이 0.7이라고 출력했을 때 실제 양성률이 0.7이어야 한다. 그렇지 않으면 정확도가 높아도 결정에 쓸 수 없다.
확인 방법은 단순하다.
import numpy as np
from sklearn.calibration import calibration_curve
prob_true, prob_pred = calibration_curve(y_true, y_pred, n_bins=10)
for p_pred, p_true in zip(prob_pred, prob_true):
print(f"모델 출력 {p_pred:.2f} → 실제 양성률 {p_true:.2f}")
출력에서 모델 출력 0.7 → 실제 양성률 0.45처럼 차이가 나면 해석 가능한 확률이 아니다. 임계값 기반 의사결정에 그대로 쓰면 비용 추정이 왜곡된다.
캘리브레이션이 깨졌을 때 후처리는 두 가지가 흔하다.
- Platt scaling: 출력에 시그모이드 보정
- Isotonic regression: 단조 증가 매핑
도박의 배당이 시장 메커니즘으로 자동 캘리브레이션되는 점은 흥미롭다. 사용자가 한쪽 결과에 몰리면 배당이 조정되고 내재 확률이 시장 합의에 가까워진다. ML에는 이 자동 메커니즘이 없으므로 주기적 재캘리브레이션을 운영 절차에 넣어야 한다.
3. 기댓값 = 환수율 × 한 회 베팅
도박의 한 회 기댓값은 다음으로 표현된다.
EV = 베팅액 × (RTP - 1)
RTP가 96%면 1만 원 베팅의 한 회 기댓값은 -400원이다. 100회 베팅의 누적 기댓값은 -40,000원이다. 사용자는 단기에 운으로 이길 수 있지만 장기에는 평균으로 수렴한다.
ML 모델의 경제적 평가를 같은 형식으로 적으면 다음이 된다.
EV(추천 1회) = (true positive 가치) × P(positive | 모델)
- (false positive 비용) × P(negative | 모델)
- 추론 한계 비용
수식에 들어가는 가치/비용 단위가 분명해야 평가가 가능하다. 추천 시스템에서 false positive(잘못된 추천)의 비용은 단순 클릭 손실보다 크다. 사용자 신뢰 손상, 후속 추천 무시 같은 연쇄 비용이 있다. 보통 short-term 비용의 2~3배로 추정한다.
캠페인 단위로 적으면 다음 표가 만들어진다.
| 캠페인 | 추론 횟수 | EV 평균 | 누적 EV |
|---|---|---|---|
| 신상품 추천 | 1.2M | +35원 | +4,200만 원 |
| 재구매 추천 | 0.8M | +18원 | +1,440만 원 |
| 시즌 카테고리 추천 | 2.5M | -5원 | -1,250만 원 |
마지막 줄은 모델이 손실 추천을 만들고 있다는 뜻이다. 정확도·CTR이 다른 두 줄과 비슷해도 EV가 음수면 운영을 멈춰야 한다.

4. "스포츠토토 완전 가이드"에서 빌려온 한 줄
테이블플레이 스포츠토토 완전 가이드는 "환수율은 장기의 개념이고, 한 회의 결과로 모델 성능을 판단하지 말라"는 점을 강조한다. ML에서도 동일하다. A/B 테스트 1주차 결과로 모델을 채택·기각하면, 분산이 너무 커서 잘못된 결정이 절반 이상이다.
권장 운영 흐름은 다음이다.
- 통계적 검정력 기반 표본 크기를 미리 계산
- 매일 결과를 보지 말고 고정 종료일에만 본다
- 종료 후에도 유의 차이만 보지 말고 효과 크기도 본다
매일 보면 사람은 그래프의 흔들림에 반응한다. 도박에서 단기 운에 흔들리는 것과 같은 인지 편향이다. 종료일을 미리 정하고 그 날만 결과를 본다는 규칙이 의외로 큰 차이를 만든다.
5. "보드게임 처음 살 때 실수"에서 빌려온 또 한 줄
테이블플레이 블로그의 보드게임 처음 구매할 때 자주 하는 실수 글은 함께 사야 할 것을 빼고 가격을 비교한다는 실수를 지적한다. ML 모델 평가에서도 같은 실수가 자주 일어난다.
모델 비용을 추론 비용만 본다. 학습 비용, 데이터 라벨링 비용, 모델 모니터링 비용, 장애 대응 비용이 빠진다. 이 비용을 모두 더한 *총 모델 소유 비용(TCO)*과 모델 EV를 비교해야 가치 있는 모델인지 답이 나온다.
| 비용 항목 | 추론 단가 | 월 비용 |
|---|---|---|
| GPU 추론 | 0.001원 / req | 360만 원 |
| 학습 (월 1회) | - | 80만 원 |
| 라벨링 | - | 200만 원 |
| 모니터링·온콜 | - | 150만 원 |
| 합계 | - | 790만 원 |
모델 누적 EV가 +900만 원이라도 순 가치는 +110만 원이다. 정확도 그래프에는 보이지 않는 숫자다.
마무리
ML 모델 평가가 어려운 이유는 기댓값 개념이 평가 보고서에 잘 들어오지 않기 때문이다. 도박은 같은 어려움을 더 오래 다뤄왔고 한 단어로 압축하는 데 익숙하다. 환수율·내재 확률·하우스 엣지를 ML 평가에 옮기면, 모델이 수치적으로 좋은가가 아니라 경제적으로 가치 있는가에 답할 수 있다.
테이블플레이의 환수율 비교, 배당률 읽는 법, 스포츠토토 가이드 세 글을 한 번 흘려 보고 와도 좋다. 도구의 도메인은 다르지만, 모델 평가 보고서에 한 줄 추가할 단위가 보일 것이다.