환수율·내재 확률에서 배우는 ML 모델 평가 — 베이스라인·캘리브레이션·기댓값

AI

모델 평가캘리브레이션베이스라인기댓값확률 모델

이 글은 누구를 위한 것인가

  • 모델 정확도(accuracy)만 보고 평가가 끝난다고 느끼는 데이터 사이언티스트
  • 추천·랭킹·예측 모델의 비용 대비 가치를 다시 정리하려는 ML 엔지니어
  • "왜 우리 모델이 ROI가 안 나오는지"를 설명해야 하는 ML 리드

들어가며

AUC 0.85 모델은 좋은 모델인가. 정확도 92%면 배포해도 되나. 자주 받는 질문이고, 답은 같다. 모르겠다. 비교 대상이 없으면 수치는 수치일 뿐이다.

도박 산업이 이 문제를 일찍부터 풀어 두었다. 모든 상품이 한 단어로 자기 기댓값을 표현한다. 환수율(RTP)이다. 사용자가 1만 원 베팅하면 장기 평균 얼마가 돌아오는지 한 숫자로 적는다. 배당률은 내재 확률로 풀어 쓸 수 있고, 모델이 그보다 더 정확한 확률을 갖고 있어야 기댓값이 양수가 된다.

테이블플레이 블로그의 스포츠토토 vs 카지노 — 환수율과 하우스 엣지 수치 비교, 스포츠토토 배당률 읽는 법 — 오즈와 내재 확률 완전 이해 두 글이 이 사고법을 깔끔하게 정리한다. ML 모델 평가에 그대로 옮길 수 있다.

환수율·내재 확률에서 배우는 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가 음수면 운영을 멈춰야 한다.

모델 평가 베이스라인·캘리브레이션·EV 다이어그램


4. "스포츠토토 완전 가이드"에서 빌려온 한 줄

테이블플레이 스포츠토토 완전 가이드는 "환수율은 장기의 개념이고, 한 회의 결과로 모델 성능을 판단하지 말라"는 점을 강조한다. ML에서도 동일하다. A/B 테스트 1주차 결과로 모델을 채택·기각하면, 분산이 너무 커서 잘못된 결정이 절반 이상이다.

권장 운영 흐름은 다음이다.

  1. 통계적 검정력 기반 표본 크기를 미리 계산
  2. 매일 결과를 보지 말고 고정 종료일에만 본다
  3. 종료 후에도 유의 차이만 보지 말고 효과 크기도 본다

매일 보면 사람은 그래프의 흔들림에 반응한다. 도박에서 단기 운에 흔들리는 것과 같은 인지 편향이다. 종료일을 미리 정하고 그 날만 결과를 본다는 규칙이 의외로 큰 차이를 만든다.


5. "보드게임 처음 살 때 실수"에서 빌려온 또 한 줄

테이블플레이 블로그의 보드게임 처음 구매할 때 자주 하는 실수 글은 함께 사야 할 것을 빼고 가격을 비교한다는 실수를 지적한다. ML 모델 평가에서도 같은 실수가 자주 일어난다.

모델 비용을 추론 비용만 본다. 학습 비용, 데이터 라벨링 비용, 모델 모니터링 비용, 장애 대응 비용이 빠진다. 이 비용을 모두 더한 *총 모델 소유 비용(TCO)*과 모델 EV를 비교해야 가치 있는 모델인지 답이 나온다.

비용 항목추론 단가월 비용
GPU 추론0.001원 / req360만 원
학습 (월 1회)-80만 원
라벨링-200만 원
모니터링·온콜-150만 원
합계-790만 원

모델 누적 EV가 +900만 원이라도 순 가치는 +110만 원이다. 정확도 그래프에는 보이지 않는 숫자다.


마무리

ML 모델 평가가 어려운 이유는 기댓값 개념이 평가 보고서에 잘 들어오지 않기 때문이다. 도박은 같은 어려움을 더 오래 다뤄왔고 한 단어로 압축하는 데 익숙하다. 환수율·내재 확률·하우스 엣지를 ML 평가에 옮기면, 모델이 수치적으로 좋은가가 아니라 경제적으로 가치 있는가에 답할 수 있다.

테이블플레이의 환수율 비교, 배당률 읽는 법, 스포츠토토 가이드 세 글을 한 번 흘려 보고 와도 좋다. 도구의 도메인은 다르지만, 모델 평가 보고서에 한 줄 추가할 단위가 보일 것이다.