← 문제 목록/F-beta Score + Optimal Threshold [medium]
문제 해설

F-beta Score + Optimal Threshold [medium]

평가 지표 · medium

preview

F-beta + Optimal Threshold [medium]

v1 F1β=1\beta = 1 (P 와 R 을 동등 가중). 실무에서는 태스크에 따라:

  • 스팸: FP 가 비싸 → precision 중시 → β<1\beta < 1 (예: F0.5F_{0.5})
  • 암 진단: FN 이 치명적 → recall 중시 → β>1\beta > 1 (예: F2F_2)

일반화:

Fβ=(1+β2)PRβ2P+RF_\beta = (1 + \beta^2) \cdot \frac{P \cdot R}{\beta^2 \cdot P + R}

그리고 실제 분류기는 continuous score 를 냄. 고정 threshold 0.50.5 는 불균형 데이터에서 최적이 아닐 수 있음 → 점수 자체를 threshold 로 스윕해 FβF_\beta 가 최대가 되는 지점 찾기.

스윕 전략

  1. np.sort(np.unique(y_score)) → 후보 thresholds.
  2. 각 threshold 에서 y_pred = (y_score >= threshold) → TP/FP/FN 계산.
  3. FβF_\beta 계산. (분모 0 → 0.0.)
  4. argmax 로 최적 threshold 와 FβF_\beta 반환.

효율적 구현은 argsort(-y_score) 한 번에 cumulative TP/FP 로 O(NlogN)O(N \log N).

과제

함수 fbeta_best_threshold(y_score, y_true, beta) 를 완성하세요.

  • y_score: 양성 점수, shape (N,).
  • y_true: 0/1 정수 레이블.
  • beta: 양수.
  • 반환: (best_threshold, best_fbeta) — 둘 다 Python float.
  • 모든 양성을 예측했을 때 (threshold = 최소 score 이하) 도 평가.
  • 동점 threshold 는 작은 threshold 를 선택 (= recall 을 포기하지 않음).

테스트 케이스

#이름검증
1반환 2-tuple (thr, f)
2완벽 분리 → fbeta=1.0 (어떤 β 든)
3β=1 → F1 정의와 일치
4β=2 > 1 → recall 높은 threshold 선호 (작은 threshold)
5β=0.5 < 1 → precision 높은 threshold 선호 (큰 threshold)
6threshold 는 scores 중 하나 또는 min(score)-ε
7sklearn fbeta_score 와 일치 (최적 threshold 에서)
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.