RAG 없이 돌리면 답변 품질이 떨어질까 — 4주 A/B 결과

RAGLLMAB테스트사전등록검증방법론

RAG를 빼면 답변 품질이 떨어질까요?

제 문서 분류 시스템에서 4주 동안 A/B로 재봤습니다. 여기서 RAG는 과거에 분류한 유사 사례를 벡터 검색으로 찾아 프롬프트에 넣어주는 구조를 말합니다. 용어는 2020년 Lewis 등의 논문에서 왔는데 그 논문의 RAG는 검색기와 생성기를 함께 두고 학습시키는 구조이고, 제 것은 검색 결과를 프롬프트에 얹는 넓은 의미입니다.

결과는 이렇습니다. RAG를 끄면 로컬 모델이 판단을 포기하고 상용 API로 넘기는 비율이 12.5%p 늘었고, 근거검증 통과율은 내려가지 않았습니다. 그래서 유지로 결정했습니다.

단서를 같이 붙여야 합니다.

제가 잰 품질은 모델이 인용한 근거 표현이 원문에 있는지 보는 대리 지표이고, 정답 정확도가 아닙니다. 그래서 이 실험이 지지하는 문장은 “RAG가 효과 있다”가 아니고 “불리한 조건에서도 저하가 보이지 않았다”까지입니다.

그 간격이 이 글의 주제입니다.

무엇을 의심했나?

RAG를 붙이면 보통 이렇게 좋아지길 기대합니다. 비슷한 과거 사례를 보여주니 모델이 더 잘 판단한다는 것입니다.

제가 걱정한 건 다른 시나리오였습니다.

검색된 사례가 판단의 근거가 아닌 자신감의 근거가 되는 것.

모델은 비슷한 걸 본 적 있다는 이유만으로 확신을 높일 수 있습니다.

그런데 제 검색 코퍼스는 이 시스템이 과거에 스스로 붙인 라벨로 만들어져 있습니다. 자기가 만든 답을 자기가 다시 읽고 확신하는 구조라면, 그건 성능 향상이 아니고 자기참조 증폭입니다.

저는 이걸 신뢰도 인플레이션이라고 불렀습니다.

이게 왜 실질적인 문제냐면, 제 시스템에서 신뢰도는 돈으로 직결되기 때문입니다. 로컬 모델의 신뢰도가 기준 미만이면 상용 API로 넘깁니다. 이 넘김을 아래에서는 승격이라고 부르고, 승격 비율이 1차 지표입니다. 신뢰도가 근거 없이 올라가면 API 호출은 줄고 오분류는 늘어납니다.

비용 지표만 보면 개선처럼 보이는 열화입니다.

설계는 어떻게 했나?

수집 항목 ID가 10으로 나누어떨어지면 RAG를 주지 않습니다.

source_item_id % 10 == 0   →  NoRAG (약 10%)
그 외                      →  RAG   (약 90%)

그리고 데이터를 보기 전에 판정 조건을 문서로 고정했습니다.

창    : 배포 후 4주
표본  : NoRAG 처리군 n ≥ 600
1차   : 승격률 (로컬 → 상용 API 로 넘어간 비율)
2차   : 근거검증 통과율, 환각 패널티율
행동  : 1차·2차 모두 무유의 → RAG 제거
        유효                 → 유지 + 파라미터 최적화 근거로 사용

마지막 줄이 핵심입니다.

결과를 보기 전에 그러면 무엇을 할지를 적어둡니다. 이걸 안 적어두면 어떤 결과가 나와도 원하는 결론으로 갈 수 있습니다. 같은 절차를 다른 가설에 적용한 기록은 퀀트 백테스트 사전 등록이 막지 못하는 것에 있습니다.

창은 2026-07-15부터 08-11까지 28일이었고, 처리군은 n = 766으로 등록 조건을 넘겼습니다. 분할 비율은 10.22%로 설계값과 맞습니다.

통계를 보기 전에 확인할 게 하나 더 있습니다. 설정이 정말 반영됐는가.

07-14 (배포 전날)   RAG 사용  27 / 30 건
07-15 (배포 당일)   RAG 사용   0 / 42 건

%10 == 0 항목의 RAG 사용이 하루 만에 27/30에서 0/42로 떨어졌습니다. 깨끗한 전환입니다. 이 확인 없이 차이가 없다는 결론을 내면, 처리가 안 걸린 걸 결과로 착각하는 셈이 됩니다.

결과는 어땠나?

지표 NoRAG RAG 차이
표본 766 6,727
승격률 44.91% 32.42% +12.49%p (95% CI +8.79 ~ +16.18)
근거검증 통과율 88.86% (n=422) 89.55% (n=4,547) +0.69%p (무유의)
근거 매칭률 0.7758 0.7965

RAG를 뺐더니 상용 API로 넘어가는 비율이 12.5%p 늘었습니다.

등록 시 잡은 검출 목표가 +5%p였는데 그 두 배가 넘게 나왔습니다. id % 10은 삽입 순서에 기반하므로 자료 종류와 교락될 수 있어서 층을 갈라 다시 봤고, 공시와 뉴스 두 층 모두 같은 방향이었습니다(부록 1).

2차 지표는 근거검증 통과율입니다. 모델이 인용한 근거 표현이 원문에 존재하는지 보는 값이고, 차이는 +0.69%p로 무유의했습니다.

여기서부터가 어렵습니다. 숫자는 명확한데 해석이 명확하지 않습니다. 승격률이 낮다는 건 로컬 모델이 더 자주 확신했다는 뜻이고, 그건 둘 중 하나입니다.

  1. RAG가 판단을 도왔다 → 좋은 확신
  2. RAG가 근거 없이 자신감만 올렸다 → 나쁜 확신, 즉 신뢰도 인플레이션

1차 지표만으로는 이 둘을 구분할 수 없습니다. 그래서 2차 지표를 등록 때 같이 넣어뒀습니다.

왜 「효과 있다」로 못 쓰나?

무유의니까 품질은 같다로 끝내면 약한 결론입니다. 그런데 이 경우엔 표본이 만들어진 방식 덕분에 조금 더 말할 수 있습니다.

RAG 처리군은 로컬 단계에 12.5%p를 더 남깁니다.

그 추가분은 아무 건이나가 아니고, 로컬 모델 자신의 신뢰도 순위에서 가장 아슬아슬한 건들입니다. NoRAG였다면 기준 미달로 넘어갔을 항목이니까요. 그러니 신뢰도 인플레이션이 실체라면, 이 아슬아슬한 건들이 RAG 처리군의 근거검증 통과율을 끌어내려야 합니다.

어려운 건이 더 섞였으니 통과율이 내려가는 쪽이 자연스러운 기대입니다.

끌어내리지 않았습니다. 근거 매칭률은 오히려 0.7758에서 0.7965로 미세하게 올랐습니다.

편향이 가설에 불리하게 걸렸다고 추론되는 조건에서, 근거검증 통과율의 저하가 관측되지 않았다.

이게 제가 얻은 문장의 전부입니다. 비열등성 검정도 아닙니다. 허용 차이를 미리 정하지 않았으므로 같다도 나빠지지 않았다도 통계적 결론이 못 되고, 관측의 서술입니다.

그리고 이 논증은 다음 시나리오와 구분되지 않습니다.

RAG가 아슬아슬한 건들은 개선하고, 나머지 대다수는 아주 조금씩 악화시켜서, 평균이 상쇄된 것.

이 경우에도 관측치는 똑같이 차이 없음으로 나옵니다. 구분하려면 항목별로 정답 라벨이 있어야 하는데 없습니다. 그래서 배제하지 못한 채로 두는 게 정확한 상태입니다.

더 큰 구멍이 하나 있습니다.

2차 지표는 결과에 조건화된 부분집합에서만 재집니다. 상용 API로 승격된 건은 로컬 실행 기록이 저장되지 않아서, 근거검증 통과율은 승격되지 않은 건들에서만 측정됩니다. 그런데 승격 여부는 RAG 처리 자체의 결과입니다. 통계에서 이걸 collider에 조건화한다고 부릅니다. 원인과 결과가 함께 영향을 주는 변수로 표본을 걸렀다는 뜻입니다. 앞 단락의 논증은 이 편향의 방향에 기대고 있고, 방향에 대한 추론이 틀렸다면 논증도 무너집니다.

근거검증 통과율은 로컬에서 끝난 건에서만 측정되고 상용 API 로 승격된 2,525건은 로컬 실행 기록이 하나도 없어 측정에서 빠지는데, 어느 쪽으로 가는지를 RAG 가 움직인다 로컬 분류 로컬에서 끝 상용 API 승격 근거검증 통과율을 잰다 승격 2,525건 전부 로컬 기록 없음 이 갈림을 RAG 가 움직인다 승격률 NoRAG 44.91% → RAG 32.42%
점선 상자가 측정에서 빠지는 경로입니다. 근거검증 통과율은 위쪽 경로에서만 나오는데, 어느 쪽으로 갈지를 RAG 가 움직입니다.

자주 묻는 질문

비용이 줄었으면 개선 아닌가요

비용 지표만 보면 그렇게 보입니다. 그런데 같이 떨어진 것이 있었어요. 비용 지표만 보면 개선처럼 보이는 열화가 이 글의 요지입니다.

A/B 를 4주나 돌려야 하나요

표본이 쌓여야 판정이 됩니다. 짧게 끊으면 그 기간의 시장 성격을 재게 돼요.

RAG 를 아예 빼면 안 되나요

이 검증으로는 그렇게 말할 수 없습니다. “효과 있다”도 “없다”도 아니고 “이 설계로는 판정이 안 된다” 까지가 결론입니다.

그럼 다음에는 무엇을 바꾸나요

판정이 되는 설계로 다시 세워야 합니다. 지금 설계의 어디가 판정을 막았는지가 위 절에 있습니다.

남는 것

없앨 근거를 찾는 실험이 더 낫습니다. 저는 RAG를 지우고 싶어서 이 실험을 시작했습니다. 벡터 DB 하나, 임베딩 서버 하나, 그걸 띄우는 데몬 하나가 딸려 있었으니까요. 그 편향이 실험을 더 엄격하게 만들었습니다. 유지하고 싶었다면 잘 되는 것 같다에서 멈췄을 겁니다. 무언가를 정당화하려는 실험은 거의 항상 성공하고, 그래서 쓸모가 없습니다.

차이 없음도 판정입니다.

2차 지표는 전부 무유의했고, 그게 실패가 아니고 논증의 재료가 됐습니다. 다만 무유의와 효과 없음은 다릅니다. 앞의 것은 데이터에 대한 진술이고 뒤의 것은 세계에 대한 진술입니다.

표본이 작으면 실재하는 효과도 무유의로 나옵니다.

결과로 걸러진 지표는 지표가 못 됩니다.

승격된 건의 로컬 기록이 없다는 사소해 보이는 사실 하나가 2차 지표 전체의 해석을 바꿨습니다. 지표를 설계할 때 이 값이 없는 행은 왜 없는가를 먼저 물었어야 했습니다.

결측이 무작위가 아니면 그 지표는 이미 편향돼 있습니다.

그리고 결론의 강도를 결론과 함께 적어야 합니다.

이 실험이 지지하는 문장은 RAG는 효과가 있다가 아니고 불리한 조건에서도 저하를 찾지 못했다입니다. 두 번째 문장으로 유지 결정을 내리는 건 합리적이지만, 나중에 누군가 저 자신을 포함해서 이걸 첫 번째 문장으로 인용하면 그때부터는 틀린 말이 됩니다.


부록 1. 층을 갈라 다시 본 1차 지표

공시(DART)와 뉴스(NEWS)는 원래 승격률이 크게 다릅니다. 처리군에 공시가 몰렸다면 차이가 가짜일 수 있어서 층을 갈라 봤습니다.

층      NoRAG              RAG                차이
DART    79.82 % (n=  337)  62.91 % (n=2,947)  +16.91 %p
NEWS    17.48 % (n=  429)   8.65 % (n=3,780)   +8.83 %p

두 층 모두 같은 방향이고 각각 유의합니다. 층화 검정(Cochran–Mantel–Haenszel)으로 합치면 z = 8.37입니다. 구성 불균형으로 생긴 착시가 아니었습니다.

부록 2. 남은 한계 셋

하나. 2차 지표는 결과에 조건화된 부분집합에서만 잽니다. 상용 API로 승격된 건은 로컬 실행 기록이 저장되지 않습니다.

창 안에서 승격된 건            2,525 건
그중 로컬 실행 기록이 남은 건       0 건

설계 시점에 예상하지 못한 제약이었습니다. 로컬 실행 기록을 승격 시에도 저장했다면 피할 수 있었습니다.

둘. 음성 대조군이 없습니다. RAG 컨텍스트는 로컬 모델뿐 아니라 상용 API 프롬프트에도 함께 주입됩니다. 코드가 두 경로에서 같은 컨텍스트를 씁니다.

buildUserPrompt({ ...classifyInput, ragContext })   // 로컬 + API 공통

그래서 API 결과는 RAG 없는 상태라는 비교를 할 수 없습니다. 실험 전체에 RAG가 부분적으로 스며 있습니다.

**셋.

이 창의 수치는 재현되지 않습니다.** 같은 날 배포한 다른 변경이 정형 공시 1,796건을 LLM 경로에서 제거했습니다(LLM API 비용 줄이기에 그 이야기를 따로 썼습니다). 그런데 공시의 승격률(63%)은 뉴스(8.7%)의 일곱 배입니다. 그 배포 이후 모집단 구성 자체가 바뀌었으니, 앞으로 측정될 승격률을 이 창의 32.42%와 나란히 놓고 좋아졌다 나빠졌다를 말하면 안 됩니다. 두 숫자는 다른 모집단에서 나온 값입니다.

기록에 금지 사항으로 적어뒀습니다.

부록 3. 유지 결정에 참고한 비용

RAG를 제거하면 4주에 상용 API 호출이 약 840건 늘고, 비용으로는 하루 $0.25 정도입니다. 큰돈은 아니지만 방향이 분명합니다. RAG는 API 비용을 로컬 컴퓨트로 치환하고 있습니다. 전기와 메모리를 쓰는 대신 호출을 아끼는 거래이고, 이미 산 하드웨어가 놀고 있다면 남는 장사입니다.

이 글에서 고친 것 2개
  • 2026-09-12 — 처음 발행본은 “품질이 유지될 리 없습니다”, “품질 저하가 관측되지 않았다”라고 썼습니다. 측정한 것은 품질이 아닌 근거검증 통과율이고, 편향의 방향은 추론입니다(다음 절이 그 추론이 틀릴 수 있다고 이미 적고 있습니다). 문장을 측정한 것에 맞췄습니다. 유지 결정과 수치는 그대로입니다.
  • 2026-09-27 — RAG 용어의 출처로 Lewis 등(2020)을 달고, 이 글이 쓰는 뜻이 그 논문의 구조가 아니라 넓은 의미라는 것을 밝혔습니다. 결론과 수치는 그대로입니다.

이 사이트의 수치는 주 1회 DB와 다시 대조하고, 판단이 바뀌면 지우지 않고 글 안에 덧붙입니다. 갱신은 RSS로 받을 수 있습니다.