6. 평가 설계
⚠ 2026-08-28 방향 전환 — 이 페이지보다 결정 기록이 우선한다
도메인을 다산콜센터 하나로 줄이고 외국인 고객 지원을 차별점으로 세웠다
(_project/decisions/201, 비공개). 아래 본문의 금융보험·쇼핑·질병관리본부 서술은
그 시점의 사실이라 지우지 않았다 — 절대 원칙 8(“실패를 지운 기록은 기록이 아니다”)과
같은 이유로, 계획이 바뀐 사실 자체가 기록이다.
이 페이지에서 바뀐 것: ① B-0 도메인 분류 정확도 지표는 폐기됐다 ② F-2 채점 케이스가 0건이다(다산에는 종결 유형이 없다) ③ 이전 실측치 Recall@5 0.857 / MRR 0.702 는 무효 — 4개 도메인 14건 기준이었다. 다산 기준 재측정 전까지 이 페이지에 숫자를 다시 적지 않는다(절대 원칙 2). ④ A-3 번역 품질을 무엇으로 채점할지 아직 정하지 않았다 — LLM 채점은 절대 원칙 1이 막는다.
6.1 지표
⚠ 오른쪽 실측 열은 2026-08-28 전부 무효가 됐다 — 4개 도메인 골든셋 14건으로 잰 값인데
도메인이 다산 하나로 줄었다(decisions/201). 지우지 않고 취소선으로 남긴다(절대 원칙 8) —
잰 사실 자체는 기록이고, 재측정 전까지 이 자리에 새 숫자를 넣지 않는다(절대 원칙 2).
| 영역 | 지표 | 목표 기준선 | |
|---|---|---|---|
| B-0 | 도메인 분류 정확도 (자동 분류, 3.2절) | ||
| 검색 | Recall@5 | ≥ 0.70 (오류 없음) / ≥ 0.60 (오류 10%) | |
| 검색 | MRR | ≥ 0.55 | |
| 트리거 | 적절 발동률 (종료 후 0~1,500ms) | ≥ 0.85 | |
| 트리거 | 조기 발동률 / 지연 발동률 | 각각 별도 집계 | |
| 트리거 | 발동 지연시간 분포 (p50/p95) | 측정·기록 (허용 창은 합/불 판정선일 뿐, 개선 추이는 이 분포로 본다) | |
| 생성 | 환각 수치 발생 | 150문항 중 5건 이하 | |
| 생성 | 출처 표시율 | 100% | |
| 컴플라이언스 | 재현율 | ≥ 0.90 | |
| 컴플라이언스 | 정밀도 | ≥ 0.60 | |
| C-5 | P1~P7 패턴 마스킹 누락 | 0건 — 절대 규칙 | |
| C-5 | 과잉 마스킹률 | 참고 기록 (목표 아님) | |
| C-5 | STT 오류율별 마스킹 재현율 | 곡선 기록 | |
| 성능 | 내부 처리 p95 | ≤ 1,000ms | |
| 성능 | E2E 체감 지연 | 측정·기록 | |
| 성능 | 통화당 토큰 비용 | 측정·기록 | |
| F-2 | 종결 요건 판정 정확도 (금융보험·쇼핑만 해당 — 1.4절) | 100% — 절대 규칙 (조건부 착수) | |
| F-2 | 근거 규정 검색 정확도 (금융보험·쇼핑만 해당) | ≥ 0.90 (조건부 착수) | |
| F-3 | 반복 문의 연결 재현율 | ≥ 0.95 (여유 시 — 미구현 시 N/A) | |
| G-2 | 자원 매칭 정확도 | ≥ 0.95 (여유 시 — 미구현 시 N/A) | |
| G-2 | 폐지·이전 기관 반환 | 0건 (여유 시 — 미구현 시 N/A) | |
| F-1 / G-1 | 탐지 성능 | 측정 불가 — 5.5절 |
부록 B의 H·I 지표는 착수 확정 시 이 표에 편입한다.
첫 실측 (2026-08-27, 잠정)
측정일 2026-08-27 · 커밋 39cbe68 기준 작업분 · 표본 golden-set/v1-50.json
(검색 B 케이스 14건 / 도메인 라벨 34건) · 재현:
cd infra && docker compose up -d elasticsearch && cd ..
export ELASTICSEARCH_URL=http://localhost:9200
.venv/bin/python scripts/index_knowledge_base.py --to-es --recreate
.venv/bin/python scripts/run_eval.py --golden-set golden-set/v1-50.json --runs 3
3회 실행 최저치가 1회 값과 같다 — BM25 도 검색 기반 도메인 판정도 결정적이라 흔들리지 않는다 (절대 원칙 4의 “최저치 고정”이 여기서는 자명하게 성립한다). 임베딩이 들어가는 4주차부터는 다시 본다.
이 값은 잠정이다. 공식 기준선은 3주차 골든셋 150건 재측정이고, CI 게이트로 고정하지 않는다
(w2-baseline-gate).
검색은 목표를 넘겼다. BM25(nori) 단독인데 Recall@5 0.857 · MRR 0.702 다.(2026-08-28 무효 — 4개 도메인 기준) 못 맞힌 2건은 둘 다 정답이TERM인데MANUAL이 상위를 채웠고, 다른 도메인 문서까지 섞였다 — 도메인 필터를 못 걸고 있어서다(미결).-
B-0 은 0.857 로 목표(0.95)에 못 미친다. 그리고 이 지표는 재는 방법 자체가 틀려 있었다.
처음에는 도메인 라벨이 있는 34건 전체로 재서 0.647 이 나왔다. 그런데 그중 20건이 C·C-5 항목(마스킹·컴플라이언스 시나리오)이고, 그 발화에는 도메인 단서가 아예 없다 — “본인 확인을 위해서 주민등록번호를 불러주시겠어요?” 가 어느 도메인인지는 텍스트만 보고 알 수 없다. 그 항목의
domain은 “어느 시나리오에 속하는가”를 적은 메타데이터지 발화에서 추론할 대상이 아니다. 실제로 그 20건에서는 어떤 방식으로도 0.45~0.50(사실상 찍기)이었다.B-0 은
decisions/007대로 통화 초반 고객 발화로 판정하는 것이므로 채점 대상을 B(검색) 항목 14건으로 좁혔다(harness.py). 그러자 0.857 이 됐다.채점 대상 검색 기반 v1 KcELECTRA 분류기 전체 34건 (틀린 방법) 0.647 0.588 B 14건 (바른 방법) 0.857 0.786 C·C-5 20건 0.500 0.450 -
⚠ 파인튜닝한 분류기가 검색 기반 v1 보다 낫지 않다. 학습을 키워도 그대로였다.
방식 AI Hub 검증 골든셋 (n=14) 검색 기반 v1 — 0.857 (12/14) 분류기 2 epoch 0.815 0.786 (11/14) 분류기 4 epoch + 초반턴 증강 13,204건 0.879 0.786 (11/14) AI Hub 는 +6.4%p 올랐는데 골든셋은 혼동 행렬까지 한 자리도 안 바뀌었다 — 틀린 3건이 완전히 같다. 학습을 키운 효과가 골든셋으로 전혀 전이되지 않았다.
틀린 3건은 전부
finance로 가고 신뢰도가 0.77~0.97 이다 — 헷갈리는 게 아니라 확신을 갖고 틀린다.발급·처리·비용이 AI Hub 금융 데이터에 압도적으로 많은 탓으로 보이고, 데이터를 더 넣고 더 오래 학습할수록 이 편향은 강해진다.반대로 v1 은 그 3건을 다 맞히고 다른 2건(GS-002·GS-019)을 틀린다 — 두 방식이 서로 다른 데서 틀린다. 합치면 둘 다 넘길 여지가 있다(RRF 병합 함수는 이미 있다,
decisions/021). 자세한 건 w1-domain-routing.기본값은 v1 이다. 분류기는
--domain-router model로 명시해야 쓰인다 — 더 나쁜 쪽이 조용히 끼어들면 안 된다. - ⚠ n=14 로는 애초에 “≥0.95” 를 판정할 수 없다. 14건에서 0.95 를 넘으려면 14/14 여야 한다(13/14 = 0.929). 즉 만점 말고는 통과가 없다. 두 방식의 차이(12/14 vs 11/14)도 한 건 이라 의미를 두기 어렵다. 3주차 골든셋 150건 확장 때 도메인 판정용 표본을 따로 늘려야 이 목표를 잴 수 있다.
- 나머지 지표는 모듈이 없어 “측정 불가 — 모듈 미구현” 으로 보고된다. 트리거는 구현이 있지만 일부러 꽂지 않았다 — 발동 시각을 상수로 모형화하고 있어 숫자가 나와도 측정이 아니다(w3-trigger-v1, 절대 원칙 10).
도메인 4종 반영 (2026-08-26) — Recall@5·MRR 등 검색 지표는 4개 도메인 전체 평균과 함께 도메인별로도 따로 집계한다. 도메인마다 지식베이스 크기·카테고리 수가 달라 평균값 하나로는 특정 도메인의 부진을 가릴 수 있다.
6.2 채점 원칙
- LLM을 채점자로 쓰지 않는다. 답을 만든 모델이 자기 답을 심판하면 순환이 된다. 모든 지표를 규칙으로 계산해 재현 가능하게 한다.
- 여러 번 실행한 값 중 최저치를 기준선으로 고정한다. 생성 모델은 같은 입력에도 답이 달라진다.
- 기준선 미달 시 CI 실패로 처리한다. 개선이 아니라 회귀 방지가 목적이다.
- C-5·F-2의 절대 규칙은 1건이라도 뚫리면 실패로 처리한다. 평균값으로 평가하지 않는다.
- 모든 지표는 정답 정의가 코드로 표현 가능해야 한다. 표현할 수 없는 지표는 지표가 아니다 (4.1절 트리거 허용 창이 그 예).