Post

LLM 없이 검색 품질 벤치마크를 만들어보자

골든 케이스 31개로 검색 방식 A와 B를 비교했더니 3%p 차이가 났다. 그 차이가 진짜인지 우연인지 Wilson 신뢰구간과 paired bootstrap으로 검정해보니 상당수가 노이즈였다

LLM 없이 검색 품질 벤치마크를 만들어보자

LLM 없이 검색 품질 벤치마크를 만들어보자

검색 방식 A와 B를 골든 케이스 몇십 개로 비교하면서 “3%p 차이가 났다”는 결과를 여러 번 봤는데, 그게 진짜 차이인지 표본이 작아서 생긴 우연인지 구분할 방법이 없었다. LLM 채점 없이 통계적으로 검정해봤다.

1. 서론 (Introduction)

  • 문제/상황 (Problem): 골든 케이스 31개짜리 벤치마크로 검색 방식을 비교하면서 몇 %p 차이만 보고 “이게 더 낫다”고 판단한 적이 여러 번 있었다. 표본이 작으면 이 차이 자체가 신뢰할 수 없다는 걸 나중에 알았다.
  • 목적 (Purpose): Ragas 같은 LLM 채점 없이 precision/recall을 직접 계산하고, 그 차이가 통계적으로 유의한지 신뢰구간으로 검정한다.
  • 대상 (Target Audience): 작은 골든셋으로 검색·랭킹 방식을 비교하면서 그 차이를 얼마나 믿어야 할지 궁금한 개발자.

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection): 골든 케이스 31개 기준으로 title-only 방식과 RRF(Reciprocal Rank Fusion) 결합 방식을 비교했다. 참고로 같은 골든셋에서 Ragas의 NonLLMContextPrecision은 0.641, Recall은 0.839로 측정됐다.

    방식정확도Wilson 95% 신뢰구간
    title-only83.9%(26/31)67%~93%
    RRF결합77.4%(24/31)60%~89%
  • 접근 방법 (Approach Methods):
    • [방법 1]: LLM 채점(Ragas 등) 대신 정답 문서 포함 여부로 precision/recall을 직접 계산한다. 채점 비용도 없고 채점 모델의 변동성도 없다.
    • [방법 2]: 단일 정확도 수치 대신 Wilson 95% 이항 신뢰구간과, 두 방식의 차이를 paired bootstrap(2만 회 재표본)으로 재추정해 “차이가 우연 범위 안인지”를 함께 본다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: Python 표준 라이브러리(math, random)만으로 구현한 wilson_interval(), paired_bootstrap_diff().
    • 주요 단계: 케이스별 정답 여부(1/0) 기록 $\rightarrow$ 방식별 Wilson 구간 계산 $\rightarrow$ 같은 케이스 순서로 짝지어 2만 회 bootstrap 재표본 $\rightarrow$ 차이의 95% 신뢰구간이 0을 포함하는지 확인.
    • 결과 도출 및 검증: 골든 31케이스 기준 1케이스 차이가 약 ±3.2%p에 해당한다 — 이게 이 벤치마크가 구분할 수 있는 최소 해상도다. title-only 83.9%[67~93%]와 RRF결합 77.4%[60~89%]는 신뢰구간이 크게 겹쳤고, paired bootstrap으로 구한 차이(A-B)의 신뢰구간도 0을 포함했다.

3. 결과 (Results)

  • 분석 결과 요약: title-only와 RRF결합의 표면적 차이는 6.5%p였지만, 두 방식의 95% 신뢰구간이 크게 겹치고 paired bootstrap 차이 구간도 0을 포함해 통계적으로 유의하다고 볼 수 없었다. 31케이스라는 표본 크기에서는 1케이스만 바뀌어도 결과가 ±3.2%p 흔들린다는 뜻이고, 지금까지 “A가 B보다 낫다”고 판단했던 몇몇 결정이 실제로는 이 잡음 수준 안에 있었다는 걸 확인했다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight): 표본이 작으면 눈에 보이는 차이도 못 믿는다. 골든셋이 31개인 상태에서 3~6%p 차이를 근거로 방식을 확정했던 과거 판단 다수가, 신뢰구간을 그려보니 노이즈와 구분이 안 됐다. 의심해야 할 건 %p 차이만이 아니었다 — 캐시를 끄고 CPU 환경·웜업 상태까지 조건을 공정하게 맞춰 다시 재보니, 스스로 “이게 더 낫다”고 믿었던 자체 개선판이 실제로는 뚜렷한 우위가 없다는 걸 인정할 수밖에 없었다. 내가 만든 게 남의 것보다 낫다는 확신이 들 때일수록, 유리한 조건부터 걷어내고 다시 재봐야 한다.
  • 실행 방안 (Action Plan): 골든셋 비교 결과를 보고할 때는 정확도 단일 수치 대신 항상 신뢰구간을 같이 낸다. 신뢰구간이 겹치면 “차이 없음”으로 보고하고, 진짜 차이를 보고 싶으면 골든셋 크기를 먼저 늘린다.
  • 한 줄 결론 (Key Takeaway): 골든 케이스가 작을수록 %p 차이 자체보다 신뢰구간이 겹치는지를 먼저 봐야 한다. 샘플 코드
  • 다음 스텝 (Next Step): 지금은 케이스 31개 고정 상태에서의 검정만 했다. 신뢰구간을 원하는 폭(예: ±2%p) 이내로 좁히려면 골든셋이 몇 개나 더 필요한지 표본 크기 산정까지는 다루지 않았다.
This post is licensed under CC BY 4.0 by the author.