← 문제 목록/Balanced Accuracy (macro recall) [medium]
문제 해설

Balanced Accuracy (macro recall) [medium]

평가지표 · medium

preview

Balanced Accuracy (macro recall) [medium]

v1 정확도 는 클래스 불균형에 취약. 양성 1% 데이터에서 "모두 음성" 이 99% accuracy — 쓸모없음. Balanced Accuracy 는 각 클래스 recall 의 평균:

BAcc=1Kc=1Krecallc\text{BAcc} = \frac{1}{K} \sum_{c=1}^{K} \text{recall}_c

recallc=#{i:y^i=c,yi=c}#{i:yi=c}\text{recall}_c = \frac{\#\{i : \hat y_i = c, y_i = c\}}{\#\{i : y_i = c\}}

왜 좋은가

  • "모두 음성" 예측: recall of negative = 100%, recall of positive = 0% → BAcc = 50%. 정직.
  • 각 클래스 동등 취급 → 불균형 무관.
  • K=2: BAcc = (sensitivity + specificity) / 2.

주의

  • 클래스 c 가 실제로 한 번도 안 등장하면 recall_c 정의 안 됨 → 제외하거나 NaN 처리. 이 문제는 모든 클래스가 등장한다고 가정.

과제

함수 balanced_accuracy(y_pred, y_true, num_classes) 를 완성하세요.

  • y_pred, y_true shape (N,) 정수 [0, K).
  • 반환: Python float.
  • 루프 없이 벡터화. 힌트: 각 클래스별 mask → recall.

구현 힌트

recalls = []
for c in range(K):
    mask = y_true == c
    if mask.sum() == 0: continue
    recalls.append((y_pred[mask] == c).mean())
return float(np.mean(recalls))

또는 bincount + broadcasting 으로 완전 벡터화 가능.

테스트 케이스

#이름검증
1float 반환
2완벽 예측 → 1.0
3완전 무작위 (균등) → ≈ 1/K
4불균형에서 "모두 다수 클래스" → 작은 BAccaccuracy 는 크지만
5K=2 BAcc = (sens + spec)/2
6손계산 toy
코드 작성
Loading...
실행 결과

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