GrepBoard/매뉴얼
84 편 ·

가중치 의사결정 매트릭스 — AI 점수표를 엑셀식으로 재계산

·고침 ·claude-sonnet-5-5 · 2026-10-20 실행(ChatGPT 대신 Claude 로 실행) · Python 3.13 · Windows 10·3 단계

가중치와 채점 기준은 사람이 주고 AI 에게는 근거와 CSV 만 받습니다. 총점을 SUMPRODUCT 식과 스크립트로 다시 계산하고, 1·2위 차이가 작을 때 조건부 추천으로 적히는지 확인합니다.

영어로 같은 메모·같은 프롬프트를 두 번 돌렸더니 1위가 도구 A 에서 B 로 바뀌었습니다. 곱셈은 두 번 다 맞았습니다(3.65 / 3.50 / 2.45 와 3.35 / 3.90 / 2.35 모두 다시 계산하면 같습니다). 바뀐 것은 모델이 스스로 정한 가중치와 점수입니다. 연동 가중치는 30% 와 25%, B 의 연동 점수는 2점과 3점이었습니다.

가상 협업 도구 3개(A 월 9,000원·공식 메신저 연동, B 12,000원·웹훅 직접 연결·권한 5단계, C 7,000원·연동 없음)를 세 가지 방식으로 맡겨 각각 2회씩 돌린 결과입니다.

맡긴 방식가중치를 정한 쪽2회 실행 총점(A / B / C)1위
① 「가중치 점수표 만들어서 추천해 줘」모델(한국어 두 번은 25·25·20·15·15 로 같고, 영어는 30·20·20·15·15 와 25·20·20·20·15)한국어 3.40 / 3.75 / 2.85 → 3.40 / 3.75 / 2.85, 영어 3.65 / 3.50 / 2.45 → 3.35 / 3.90 / 2.35 (5점 만점)한국어 B, B · 영어 A, B
② 가중치만 주고 CSV·검산 요구사람(30·25·20·15·10)한국어 69 / 76 / 53 → 69 / 76 / 53, 영어 71 / 74 / 51 → 71 / 80 / 51모두 B
③ ② + 기준별 채점 기준표사람69 / 70 / 53 → 69 / 70 / 53 (네 번 모두)네 번 모두 B(조건부)

①은 「가중치와 점수는 메모에 없어서 제가 임의로 정했습니다」 라고 스스로 밝혔습니다. 회의에서 「이 25% 는 누가 정했나」에 답할 수 없는 표입니다. ②는 한국어 두 번의 점수가 같았고 영어 두 번은 모두 B 가 1위였지만, B 의 연동 점수가 2점과 3점으로 갈려 총점이 74 와 80, 1·2위 차이가 3점과 9점이었습니다. 차이가 5점 이하인 첫 번째에만 「조건부 추천」 이 붙었습니다. ③에서야 네 번(한국어·영어 각 2회) 모두 같은 숫자가 나왔고, 차이가 1점이라 「조건부 추천」이 붙었습니다.

프롬프트(③)

Anthropic 의 프롬프트 작성 모범 사례는 끝내기 전에 기준에 맞춰 답을 검증하라고 붙이면 특히 계산 오류를 잘 잡는다고 합니다. 검산 줄은 그래서 넣었지만, 결과를 믿는 근거로 쓰지는 않습니다.

text
<instructions><notes> 의 {대상} 3개를 <criteria> 의 기준과 가중치로 평가해 줘.- 가중치는 주어진 값을 그대로 쓴다. 바꾸거나 새 기준을 더하지 않는다.- 각 점수는 <rubric> 의 기준대로 매긴다. 근거는 메모의 문구를 짧게 따온다. 메모에 근거가 없으면 점수 칸에 NA.- 총점 = Σ(가중치 × 점수) ÷ 5 (100점 만점). 소수 첫째 자리까지.- 출력은 CSV 하나: 도구,기준,가중치,점수,근거 (도구×기준 한 줄씩) 뒤에 도구,총점 표.- 끝내기 전에 가중치 합이 100인지, 총점을 점수에서 다시 계산해 같은지 확인하고, 결과를 「검산:」 한 줄로 적는다.- 1위와 2위 총점 차이가 5점 이하면 「조건부 추천」이라고 쓰고, 순위를 바꿀 수 있는 기준 하나를 든다.</instructions> <criteria>기준,가중치{기준},{가중치}…</criteria> <rubric>가격(사용자당 월): 7,000원 이하 5 · 10,000원 이하 4 · 15,000원 이하 2{기준}: {조건} 5 · {조건} 3 · {조건} 2…</rubric> <notes>{도구별 메모}</notes>
output
도구,총점B,70.0A,69.0C,53.0…**조건부 추천**: B가 1위이고 A가 2위입니다. 차이가 1.0점이라 5점 이하입니다. 권한 관리 점수가 순위를 바꿀 수 있습니다. A가 권한을 3~4단계로 확장하면 점수가 2에서 3으로 올라 A는 74.0점이 되고, B(70.0점)를 앞섭니다.

순위를 바꿀 기준으로 한국어 두 번은 권한 관리와 도입 지원을, 영어 첫 번째는 메신저 연동을 들었습니다. 세 개 모두 계산은 맞습니다(A 의 권한 2→3 이면 74.0, A 의 도입 지원 2→3 이면 71.0, B 의 연동 2→1 이면 64.0). 영어 두 번째는 순위가 실제로 바뀌는 경우를 들지 못하고 「B 의 연동이 공식 플러그인과 같다고 보면 B 의 우위가 커진다」 는 식으로 답했습니다. 「하나를 든다」는 지시라 어느 것을 고를지, 제대로 고를지는 흔들립니다.

재계산

[1] CSV 를 스프레드시트에 붙이고, 도구 하나의 다섯 줄(가중치 C열, 점수 D열)마다 총점을 냅니다.

총점 칸
=SUMPRODUCT(C2:C6,D2:D6)/5

[2] 여러 번 돌려 비교할 때는 스크립트가 빠릅니다. 모델이 쓴 총점과 다시 계산한 값을 나란히 찍습니다.

recalc.py
#!/usr/bin/env python3"""usage: recalc.py out.txt — recompute weighted totals from the model's CSV and compare with its own totals"""import sys, csvfrom collections import defaultdictrows = [r for r in csv.reader(open(sys.argv[1], encoding='utf-8')) if r]score_rows = [r for r in rows if len(r) == 5 and r[2].strip().isdigit()]told = {r[0]: float(r[1]) for r in rows if len(r) == 2 and r[1].replace('.', '').isdigit()}weights, total = {}, defaultdict(float)for tool, crit, w, s, _ in score_rows:    weights[crit] = int(w)    if s.strip().upper() != 'NA':        total[tool] += int(w) * int(s) / 5print('weight sum:', sum(weights.values()))print('rows with extra commas:', sum(1 for r in rows if len(r) > 5 and r[2].strip().isdigit() and r[3].strip().isdigit()))for tool in total:    flag = 'OK ' if abs(total[tool] - told.get(tool, -1)) < 0.05 else 'DIFF'    print(f'{flag} {tool}: recomputed {total[tool]:.1f} / model {told.get(tool)}')r = sorted(total.values(), reverse=True)print(f'gap 1st-2nd: {r[0] - r[1]:.1f}')
console
$ python3 -I recalc.py out.p3.ko.1.txtweight sum: 100rows with extra commas: 0OK  A: recomputed 69.0 / model 69.0OK  B: recomputed 70.0 / model 70.0OK  C: recomputed 53.0 / model 53.0gap 1st-2nd: 1.0

②·③ 실행 8개 중 7개가 이렇게 OK 였습니다. 나머지 하나(③ 한국어 두 번째)는 DIFF 가 나왔습니다.

console
$ python3 -I recalc.py out.p3.ko.2.txtweight sum: 100rows with extra commas: 2DIFF A: recomputed 53.0 / model 69.0OK  B: recomputed 70.0 / model 70.0DIFF C: recomputed 33.0 / model 53.0gap 1st-2nd: 17.0

모델의 총점은 맞았고, 틀린 것은 스크립트의 입력이었습니다. 이 실행은 근거 칸을 CSV 따옴표 대신 「 」 로 묶었고, 9,000원 · 7,000원 의 쉼표가 열을 하나 더 만들어 가격 줄 두 개(A 몫 16점, C 몫 20점)가 빠졌습니다(69−16=53, 53−20=33). 그래서 쉼표가 넘친 행을 세는 줄(rows with extra commas)을 스크립트에 넣었습니다. DIFF 가 나오면 모델의 계산이 틀렸다고 단정하지 말고 이 숫자부터 봅니다. 근거 칸을 큰따옴표로 감싸라는 규칙을 한 줄 더하면 막을 수 있을 텐데, 그 방법은 시험하지 않았습니다. 그래도 매번 돌립니다. NA 가 있으면 그 기준은 0점으로 더해지므로, 그 도구는 총점이 낮게 나온 것이지 나쁜 것이 아닙니다.

[3] 근거 칸을 메모와 대조합니다. 채점 기준표가 없는 ② 에서는 모델이 척도를 스스로 만듭니다. 한국어 두 번은 이메일만 지원하는 A 에 2점, 문서·영상 자료만 있는 C 에 3점을 줬고, 영어 두 번은 거꾸로 A 에 3점, C 에 2점을 줬습니다. 가격 점수의 환산(7,000원=5 · 9,000원=4 · 12,000원=2)은 한국어 두 번이 직접 정했다고 밝혔습니다. 이런 척도는 사람이 정해 ③ 의 <rubric> 으로 주는 값입니다.

#decision-matrix#claude#chatgpt#spreadsheet