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

사용자 정의 지표와 종합 점수

~18 min · metrics, composite, weighted

Level 0추측자
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

단일 지표로 진실을 말할 수 없을 때

때로는 정확성, 안전성, 간결성을 가중 결합한 뒤 형식 준수 여부를 곱하는 방식이 적절해. 이게 종합 점수야. 만들기는 간단하지만 계산 방식에는 지켜야 할 규칙이 있어.

종합 점수 설계 규칙

  1. 각 구성 요소는 0~1 범위의 점수여야 해. 백분율과 원시 개수를 섞으면 의미 없는 결과가 나와.
  2. 치명적인 차원에는 가중 평균보다 필수 관문을 적용해야 해. 안전성에 실패하면 몇 점만 빼지 말고 전체 점수에 0을 곱해.
  3. 각 구성 요소를 항상 기록해. 종합 점수만 남기면 안 돼. 종합 점수는 대표값이고, 구성 요소는 진단 정보야.
  4. 가중치를 신중하게 고르고 그 근거를 적어. “정확성 0.5, 형식 0.3, 간결성 0.2 — 사용자는 답이 긴 경우보다 답이 틀린 경우에 두 배 더 자주 불평하니까.”
원칙: 종합 점수는 여러 측정값을 요약해야지, 그 측정값을 대체해서는 안 돼. 각 구성 요소를 항상 함께 보여줘.

가중 평균과 곱셈 방식

가중 평균: 구성 요소가 서로 독립적이고 보완 가능할 때 적합해. 예를 들어 더 높은 간결성이 약간 낮은 일관성을 보완할 수 있어.

곱셈 방식: 한 차원의 실패가 치명적일 때 적합해. 답이 아무리 훌륭해도 안전성 점수가 0이면 종합 점수도 0이 되는 방식이야.

실제 종합 점수는 대부분 안전성과 형식에는 곱셈 방식의 관문을 적용하고, 품질 차원에는 가중 평균을 적용하는 구조야.

종합 점수의 대가 — 보정과 분포 변화

종합 점수가 “정확성 * 0.5 + 간결성 * 0.5”이고 팀이 이를 최적화하면, 간결하지만 틀린 답이 높은 종합 점수를 받을 수 있어. 종합 점수는 원한 바를 측정하지 않은 게 아니라, 팀에 최대화하라고 한 대상을 측정한 셈이야. 분기마다 종합 점수를 사람의 평점과 대조해 다시 점검해.

Code

엄격한 안전성 관문을 적용한 가중 종합 점수·python
def composite_score(scores: dict[str, float], weights: dict[str, float], gates: list[str]):
    # Hard gates: any gate failing zeroes the composite.
    for gate in gates:
        if scores.get(gate, 0.0) < 1.0:
            return 0.0, f"hard-gate fail: {gate}"
    weighted = sum(scores[k] * weights[k] for k in weights)
    total = sum(weights.values())
    return weighted / total, "ok"

result = composite_score(
    scores={"correctness": 0.9, "brevity": 0.7, "safety": 1.0, "format": 1.0},
    weights={"correctness": 0.6, "brevity": 0.4},
    gates=["safety", "format"],
)
print(result)  # (0.82, 'ok')
다기준 보고 — 구성 요소 먼저, 종합 점수 나중·python
def report_per_case(case_results):
    print(f"{'id':<12} {'corr':>5} {'brev':>5} {'safe':>5} {'fmt':>5} {'COMP':>6}")
    for r in case_results:
        comp, _ = composite_score(r['scores'], WEIGHTS, GATES)
        print(f"{r['id']:<12} {r['scores']['correctness']:>5.2f} {r['scores']['brevity']:>5.2f} "
              f"{r['scores']['safety']:>5.2f} {r['scores']['format']:>5.2f} {comp:>6.2f}")

# Sample output:
# id           corr  brev  safe   fmt   COMP
# qa.001       0.95  0.80  1.00  1.00   0.89
# qa.002       0.70  0.95  1.00  1.00   0.80
# qa.003       0.95  0.50  0.00  1.00   0.00  ← safety failed → composite 0

External links

Exercise

제품에 맞는 종합 점수 하나를 정의해. 가중 구성 요소 2~3개와 필수 관문 1~2개를 넣고, 가중치와 선정 근거를 문서화해. 최근 평가에 적용한 뒤 종합 점수의 순위를 같은 출력에 사람이 매긴 품질 순위와 비교해. 두 순위가 비슷해?

Progress

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

댓글 0

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

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