
v1 정확도 는 클래스 불균형에 취약. 양성 1% 데이터에서 "모두 음성" 이 99% accuracy — 쓸모없음. Balanced Accuracy 는 각 클래스 recall 의 평균:
함수 balanced_accuracy(y_pred, y_true, num_classes) 를 완성하세요.
y_pred, y_true shape (N,) 정수 [0, K).float.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 으로 완전 벡터화 가능.
| # | 이름 | 검증 |
|---|---|---|
| 1 | float 반환 | |
| 2 | 완벽 예측 → 1.0 | |
| 3 | 완전 무작위 (균등) → ≈ 1/K | |
| 4 | 불균형에서 "모두 다수 클래스" → 작은 BAcc | accuracy 는 크지만 |
| 5 | K=2 BAcc = (sens + spec)/2 | |
| 6 | 손계산 toy |
코드를 작성하고 Run 을 눌러보세요.