Post

금융 RAG 근거 설계 정리: 리포트, 뉴스, 표 데이터

금융 RAG 근거 설계 정리: 리포트, 뉴스, 표 데이터

금융 RAG를 보면서 가장 먼저 든 생각은 “근거의 종류가 너무 다르다”는 것이었다.

증권 리포트는 길고 정적이다. 뉴스는 짧고 최신성이 중요하다. 표 데이터는 숫자와 단위가 중요하고, 그래프는 추세를 담는다. 이 네 가지를 같은 chunk로 취급하면 답변은 자연스러워도 근거가 흐려진다.

금융 RAG 근거 설계

금융 RAG에서 먼저 나눌 것

금융 질의응답에서는 “무엇을 검색할 것인가”보다 “근거를 어떻게 분리할 것인가”가 먼저였다.

근거특징주의점
리포트 본문분석 관점과 장기 근거발행일과 증권사 기준을 남겨야 한다
뉴스최신 이벤트와 감성과거 리포트와 시간 기준이 다르다
표 데이터매출, 이익, 비율 등 수치단위, 기간, 행/열 관계가 중요하다
그래프/차트추세와 변동이미지 설명과 주변 문맥이 필요하다

금융 RAG는 근거가 하나가 아니다. 그래서 retrieval 단계에서 source type을 metadata로 남겨야 한다.

리포트와 뉴스는 분리한다

리포트 기반 답변과 뉴스 기반 답변을 섞으면 시간 기준이 흔들릴 수 있다.

예를 들어 리포트는 3개월 전 데이터를 기준으로 기업을 평가했는데, 뉴스는 어제 발생한 이벤트를 말할 수 있다. 둘 다 맞는 정보지만 같은 근거처럼 쓰면 답변이 애매해진다.

질문 유형우선 근거
기업의 장기 경쟁력리포트 본문
최근 주가 변동 이유뉴스
재무 수치 확인표 데이터
추세 설명그래프/차트 설명

내가 정리한 기준은 단순하다. 답변에 “리포트 기준”과 “최근 뉴스 기준”을 분리해서 말할 수 있어야 한다.

표 데이터는 RAG의 별도 입력이다

금융 문서에서 표는 부가 자료가 아니다. 핵심 수치가 표에 들어 있다.

표를 일반 텍스트처럼 chunking하면 다음 문제가 생긴다.

문제
헤더 손실숫자가 매출인지 영업이익인지 알 수 없음
기간 손실2023년 값인지 2024년 값인지 불명확
단위 손실억 원, %, 배수 같은 단위 누락
행/열 관계 손실셀 값만 남고 비교 구조가 사라짐

그래서 표는 table_id, page, company, period, metric, unit 같은 metadata를 붙여 저장하는 편이 낫다.

Hallucination을 줄이는 방식

금융 RAG에서 hallucination을 줄인다는 말은 조심해야 한다. 완전히 제거한다고 말할 수는 없다. 대신 줄일 수 있는 방향은 있다.

방법기대 효과
근거 source type 분리리포트, 뉴스, 표 근거가 섞이는 문제 감소
Retrieval / Generation 평가 분리검색 실패와 생성 실패를 구분
Groundedness check답변이 근거에 묶여 있는지 확인
Query rewrite질문과 문서 표현 차이 완화
Reranker관련 근거를 앞쪽으로 재정렬

중요한 것은 “답변이 그럴듯한가”보다 “근거 문서로 돌아갈 수 있는가”다.

실습 체크리스트

금융 RAG를 설계한다면 다음을 먼저 확인할 것이다.

체크질문
근거 종류리포트, 뉴스, 표, 그래프를 분리했는가
시간 기준발행일과 최신성을 답변에 반영했는가
수치 근거단위와 기간을 보존했는가
검색 평가정답 근거가 Top-K 안에 들어오는가
생성 평가답변이 근거 밖으로 나가지 않는가
사용자 표현투자 조언처럼 단정하지 않는가

코드 조각으로 다시 보기

Financial RAG evidence table code note

이 코드 조각에서 중요하게 본 부분은 retrieval 결과를 바로 문자열로 합치지 않는다는 점이었다. content, metadata, score, source를 묶어두고, category == "table"인 경우에는 별도 경로로 처리한다. 금융 문서에서 표를 본문과 같은 방식으로 다루면 수치와 단위가 쉽게 깨진다.

내가 압축해서 가져간 구조는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from dataclasses import dataclass


@dataclass
class Evidence:
    content: str
    source_type: str
    page: int | None
    published_at: str | None
    score: float


@dataclass
class GroundedAnswer:
    answer: str
    evidences: list[Evidence]
    missing_context: bool

금융 RAG에서는 답변 문장보다 Evidence가 먼저다. 답변이 맞아 보여도 어떤 리포트, 어떤 날짜, 어떤 표에서 온 근거인지 남아 있지 않으면 나중에 검증할 수 없다.

정리

금융 RAG는 일반 문서 RAG보다 근거 경계가 더 중요하다. 리포트, 뉴스, 표, 그래프가 서로 다른 시간성과 의미를 갖기 때문이다.

내가 가져간 결론은 이것이다. 금융 RAG의 품질은 좋은 답변 문장보다 근거를 분리하고 추적하는 설계에서 시작된다.

This post is licensed under CC BY 4.0 by the author.