본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

Calibration

~28 min · calibration, probabilities

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

0.8이 정말 열 번 중 여덟 번이어야 해

확률 0.8을 받은 사례를 많이 모았을 때 실제 양성 비율도 약 0.8이라면 모델이 잘 보정되었다고 말해. 보정은 양성을 음성보다 높은 순서로 놓는 분별력과 다른 성질이야. 순위가 완벽해도 모든 점수를 0.99와 0.98로 내면 확률로는 쓸 수 없어.

확률을 쓰는 결정에서 특히 중요해

거짓양성과 거짓음성 비용으로 문턱을 계산하거나 기대 수익을 비교하고, 다음 모델 호출 여부를 정하는 연쇄 시스템에서는 숫자의 절대값이 필요해. 보정되지 않은 점수로 비용을 곱하면 정밀한 계산처럼 보여도 입력 확률이 틀려. 단순히 상위 K개만 고르는 순위 업무에서는 보정보다 분별력이 더 중요할 수 있어.

신뢰도 곡선으로 구간별 정직함을 봐

예측 확률을 구간으로 나누고 각 구간의 평균 예측과 실제 양성 비율을 그려. 점들이 대각선 y=x에 가까우면 잘 보정된 거야. 점이 대각선 아래에 있으면 모델이 실제보다 자신만만하고, 위에 있으면 지나치게 소심해. 같은 구간 수를 써도 표본이 적은 극단 구간은 크게 흔들리므로 건수와 신뢰구간을 함께 봐.

Brier 점수는 확률 오차를 한 숫자로 요약해

Brier 점수는 예측 확률과 0·1 정답의 제곱 차이를 평균내며 낮을수록 좋아. 분별력과 보정이 함께 섞인 점수라 이것만으로 보정 실패 모양을 알 수는 없어. 양성 비율을 그대로 예측하는 기준선의 Brier 점수, ROC-AUC나 PR-AUC, 신뢰도 곡선을 함께 보고해야 해.

Platt scaling은 매끄러운 S자 보정이야

원래 모델의 점수 위에 로지스틱 회귀를 맞춰 확률을 조정해. 자료가 비교적 적고 잘못된 보정 모양이 S자에 가까울 때 안정적이야. 원 모델을 학습한 자료와 다른 검증 자료에서 보정기를 맞춰야 같은 잡음을 두 번 배우지 않아.

등위 회귀는 더 유연하지만 자료를 먹어

isotonic regression은 점수가 높을수록 보정 확률도 낮아지지 않는 단조 관계만 가정하고 유연한 계단 함수를 맞춰. 복잡한 보정 실패를 고칠 수 있지만 표본이 적으면 과대적합하기 쉬워. 충분한 검증 자료와 교차검증이 있을 때 Platt 방식과 비교해.

CalibratedClassifierCV로 경계를 지켜

scikit-learn의 CalibratedClassifierCV는 원 모델 학습과 보정 자료를 교차검증으로 분리하는 과정을 도와. 그래도 초매개변수 선택, 보정, 최종 평가는 독립 단계를 유지해야 해. 최종 시험 자료로 보정기를 맞추면 시험 자료를 잃는 거야.

환경이 바뀌면 보정도 달라져

양성 비율과 입력 분포가 바뀌면 모델 순위가 비슷해도 확률 보정은 무너질 수 있어. 배포 후 점수 구간별 실제 양성 비율과 Brier 점수를 시간에 따라 감시해. 정답이 늦게 도착한다면 잠정 지표와 확정 지표를 분리하고, 재보정 시점과 문턱 재검토를 함께 운영해.

Code

신뢰도 곡선과 Brier 점수·python
from sklearn.calibration import calibration_curve
from sklearn.metrics import brier_score_loss
import matplotlib.pyplot as plt

frac_pos, mean_pred = calibration_curve(y_val, probs, n_bins=10)
print("Brier:", brier_score_loss(y_val, probs))
plt.plot([0, 1], [0, 1], "k--")
plt.plot(mean_pred, frac_pos, marker="o")
plt.xlabel("predicted probability")
plt.ylabel("empirical positive rate")
plt.show()
홀드아웃 폴드에서 등위 회귀로 확률 보정·python
from sklearn.calibration import CalibratedClassifierCV

calibrated = CalibratedClassifierCV(model, method="isotonic", cv="prefit")
calibrated.fit(X_calib, y_calib)
probs_calibrated = calibrated.predict_proba(X_val)[:, 1]

External links

Exercise

분류기의 신뢰도 곡선과 Brier 점수를 보고해. 대각선에서 벗어나면 독립 폴드를 쓴 CalibratedClassifierCV로 sigmoid와 isotonic을 비교하고 보정이 선택 문턱과 기대 비용을 어떻게 바꾸는지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.