코딩관계론

주식 테마 뉴스 정제: 벡터 DB와 RAG로 노이즈 아웃 본문

개발/Hot-Stock

주식 테마 뉴스 정제: 벡터 DB와 RAG로 노이즈 아웃

개발자_티모 2025. 1. 29. 22:47
반응형

1. 문제 정의: 테마 관련 뉴스 판별의 필요성

주식 시장에는 AI, 2차전지, 신재생에너지, 원전 등 다양한 테마가 존재합니다.
하지만 테마 키워드로 뉴스를 크롤링해보면, 정작 투자 의사 결정에 직접적인 도움이 되지 않는 ‘정보성이 없는 뉴스’들이 다수 섞여 들어옵니다.

예를 들어,

  • “원자력발전소” 키워드로 기사를 검색했더니, 원전 설비나 정책, 기업 동향이 아닌 단순 지역 소식(‘원자력 주변 축제’ 관련 기사 등)도 함께 크롤링되는 상황이 발생합니다.
  • 이는 결국 ‘테마 관련 투자 정보’로는 가치가 떨어집니다.

 

이처럼 “이 뉴스가 정말 테마와 관련 있는가?"를 정확히 필터링해내는 로직이 필요합니다.
이를 위해 초기에 시도했던 두 가지 접근은 다음과 같습니다.

  1. 간단한 규칙 기반 필터링
    • 특정 키워드 리스트(예: “원전”, “원자력”, “에너지 정책” 등)를 미리 정의하고, 뉴스 본문에 해당 키워드가 포함되지 않으면 걸러냄
    • → 문제점: 키워드가 조금만 다르거나 문맥이 다른 경우, 중요한 뉴스를 놓칠 수 있으며(Recall 문제), 정작 무관한 기사가 키워드를 가져서 걸러지지 않는 경우도 있음(Precision 문제).
  2. 모델 파인튜닝
    • 소량의 데이터셋(테마 관련/비관련 뉴스)을 모아 기초적인 파인튜닝을 시도
    • → 문제점: 어느 정도 효과는 있지만, 튜닝 비용이 상당하고, 추가 기능/테마가 늘어날 때마다 재학습이 필요해 유지보수가 쉽지 않음.
  3.  

2. 모델 학습 없이 성능 개선을 고민하다: RAG와 외부 지식

여기서 떠오른 개념이 바로 RAG(Retrieval Augmented Generation), 즉 “외부 지식”을 활용해 LLM의 답변 정확도를 높이는 방식입니다.

2-1. RAG(Retrieval Augmented Generation)란?

RAG는 LLM이 답변 생성 시 외부 지식(을 사전에 주입받아 활용하도록 함으로써, 잘못된 정보 생성을 방지하거나 성능을 높이는 기법입니다. 내부 파라미터를 다시 학습(파인튜닝)하지 않고도 최신 정보와 정확한 콘텐츠를 반영할 수 있습니다.

2-2. 왜 RAG가 적합한가?

  • 모델 자체를 튜닝하지 않더라도, **외부 지식**를 참조해 모델이 답변을 생성한다면 불필요한 파인튜닝 비용과 프론프트의 개선 시간을 단축할 수 있습니다.
  • 뉴스 기사 하나하나를 판별할 때도, LLM이 정해진 규칙을 넘어, 주어진 외부 지식을 기반으로 해당 뉴스가 테마주 상승/하락 사유에 부합하는지 판단할 수 있습니다.
  • 주식의 상승 이유를 크롤링하면서 어떤 테마와 어떤 이유에 대해서 올랐는지 이미 DB화가 되어 있기 때문입니다.
예를들면 "트럼프 대통령의 친원전 정책과 원자력 산업 재조성으로 인해 전방의 원자력 관련 사업이 움츠러들지 않고 성장할 것으로 예상됩니다. 이는 트럼프 행정부의 에너지 자립 정책의 연장선상에 있으며, 기사에서 언급된 원자력 밸류체인 확장은 주가 상승 이유 중 하나입니다" 다음과 같은 정보가

 

2-3. 실제 뉴스와 DB 매칭

예를 들어 “트럼프 대통령의 친원전 정책과 원자력 산업 재조성으로 인해 전방의 원자력 관련 사업이 움츠러들지 않고 성장할 것으로 예상됩니다. 이는 트럼프 행정부의 에너지 자립 정책의 연장선상에 있으며, 기사에서 언급된 원자력 밸류체인 확장은 주가 상승 이유 중 하나입니다.” 같은 정보가 DB에 있다고 합시다.

  1. 크롤링된 뉴스: “○○지역 원자력발전소에서 열린 문화행사 소식…”
    • 실제 투자 정보와 무관한, 정보성이 없는 로컬 행사 뉴스
  2. 벡터 DB 리트리벌 결과: 원자력 테마주가 상승한 주된 요인(미국 행정부의 정책, 밸류체인 확장, 신규 사업 수주 등)
  3. LLM 판단:
    • “이 뉴스는 원자력발전소 키워드는 맞지만, **주가 상승 사유(정책, 산업 확장 등)**와 직접 연계된 내용은 없음 → 정보성이 ‘낮음’”
    • 최종적으로 필터링 대상이 됩니다.

3. 결과

아래는 gpt-40-mini 기준입니다.

RAG 적용전
RAG 적용후

 

최종적으로는 위의 정보성이 떨어지는 뉴스는 걸러지고, 실제로 아래 그림과 같이 필요한 뉴스만 남아있게 됩니다.

 

결론

  • 정보성이 없는 뉴스 문제를 해결하기 위해, RAG(외부 지식 활용)를 도입하여 비관련·무가치 기사를 효율적으로 걸러낼 수 있었습니다.
  • 벡터 DB주가 상승/하락 이유를 구조적으로 담아두고, LLM이 이를 토대로 “정말 테마 관련 기사인지”를 더 정확히 판별하도록 한 것이 핵심입니다.
  • 이러한 접근으로 파인튜닝 비용을 줄이고, 주식 테마 분석의 효율성을 높이는 데 큰 도움을 받았습니다.

앞으로도 테마별 특징, 시시각각 변하는 정책·산업 동향을 벡터 DB에 상시 업데이트하고, 프롬프트 설계를 지속적으로 개선하면서, 정보성이 없는 뉴스를 최대한 걸러내는 방법을 발전시킬 예정입니다.

 

추가 꿀팁

외부 주식을 전달을 하더라도, mini의 경우에는 잘 받아먹지 못하는 현상이 발생하던대, 아래의 방식으로 완벽 극복할 수 있었습니다.

"Step 2. 외부 지식:\n"
"   - <externalKnowledge></externalKnowledge> XML 내부 JSON 역직렬화:\n"
"     - content\n"
"   - 역직렬화된 객체들은 externalInfoDTO로 명명한다.\n\n"
반응형