실시간 금융 감성 분석 API 구축: 노이즈 및 LLM 환각(Hallucinations) 처리하기
요약
실시간 금융 뉴스 피드를 분석하여 시장 신호를 생성하는 프로덕션급 API 구축 과정을 다룹니다. 데이터 필터링을 통한 비용 최적화와 LLM의 티커 환각 문제를 해결하는 기술적 아키텍처를 설명합니다.
핵심 포인트
- RSS 피드 기반의 4단계 데이터 파이프라인 구축
- 키워드 매칭을 통한 LLM 토큰 비용 및 지연 시간 최적화
- 티커 환각(Ticker Hallucination) 방지를 위한 프롬프트 제어
- O(1) 시간 복잡도의 효율적인 뉴스 필터링 로직
금융 시장은 인간의 인지 속도보다 빠르게 움직입니다. 지정학적 헤드라인 하나가 수 밀리초(milliseconds) 내에 자동화된 원유 청산을 유발할 수 있습니다. 단 하나의 실적 보고서가 개인 투자자가 첫 번째 단락을 다 읽기도 전에 기업의 가치를 쓸어버릴 수 있습니다.
저는 비정형 글로벌 금융 뉴스 피드를 자동으로 수집하고, 영향을 받는 엔티티(entities)를 파싱하며, 감성 극성(sentiment polarity)을 결정하고, 그 결과를 기계가 읽을 수 있는 시장 신호로 노출할 수 있는 프로덕션급(production-grade) 시스템을 구축하고자 했습니다.
이 포스트에서는 Market Sentiment API의 기술적 아키텍처, 데이터 엔지니어링 파이프라인, 그리고 LLM 비용 최적화 및 티커(ticker) 환각(hallucinations)과 같은 중요한 엣지 케이스(edge cases)를 어떻게 해결했는지에 대해 자세히 설명합니다.
1. 프로그램 개요
이 프로그램은 LLM 토큰 오버헤드(token overhead)를 최소화하고 지연 시간(latency)을 최적화하도록 설계된 파이프라인을 통해 들어오는 데이터를 처리합니다.
핵심 데이터 파이프라인은 네 가지 별도의 단계로 구성됩니다:
-
정보 수집: 5분마다 RSS 피드(Bloomberg, Reuters, Financial Times, CNBC, BBC, Al Jazeera)로부터 뉴스를 가져옵니다.
-
뉴스 필터링: 각 섹션에서 흔히 발견되는 키워드를 사용하여 기사가 6개 섹션(기업, 전쟁, 정책, 원자재, 기술, 재난)에 해당하는지 확인하여 관련 뉴스를 확보합니다.
-
감성 추출: LLM이 티커(tickers), 감성(sentiment), 그리고 문맥적 요약(contextual summary)을 추출합니다.
-
상태 집계 및 모멘텀 추적: 관련 기사들을 함께 모으고, LLM을 사용하여 전체적인 감성과 모멘텀 방향 및 신뢰도 등급(confidence rating)을 얻습니다.
2. 기사 필터링
모든 원시 RSS 헤드라인을 LLM에 직접 전달하는 것은 천문학적인 토큰 비용을 발생시키고 지연 시간을 유발합니다. 일반적인 비즈니스 뉴스의 70% 이상은 즉각적인 시장 변동 영향력이 부족합니다.
이를 토큰 비용 없이 해결하기 위해, 수집 엔진은 데이터가 LLM에 닿기 전에 로컬화된 문자열 경계 매처(string boundary matcher)를 통해 들어오는 헤드라인을 통과시킵니다.
프로그램은 외부 텍스트 자산 파일(companies.txt, war.txt, policy.txt 등)로부터 도메인 특화 키워드를 Python set 형태로 메모리에 동적으로 로드하여 O(1) 시간 복잡도의 조회를 수행합니다. 그런 다음 엄격한 정규 표현식 단어 경계(\b)를 사용하여 잘못된 부분 일치(false-positive partial matches)를 방지합니다(예: "gasoline"이나 "gas"가 관련 없는 문자열에서 끊기지 않고 깔끔하게 일치하도록 보장).
companies_set = get_set("companies.txt")
def match_set(title, keyword_set):
...
3. 감성 추출 (Sentiment Extraction)
기사가 초기 키워드 필터를 통과하면 첫 번째 LLM 레이어에 도달합니다. 여기서의 목표는 가공되지 않은 헤드라인과 설명을 구조화된 금융 출력값으로 변환하는 것입니다.
하지만 제약이 없는 표준 텍스트 프롬프트를 사용하면 주요 실패 모드인 **티커 환각 (ticker hallucination)**이 발생합니다. 기본 모델들은 문맥적 단서를 보고 명시적으로 언급되지 않은 티커를 추론하거나(예: 반도체 물류에 관한 일반적인 기사에 NVDA를 추가하는 경우), 기업을 완전히 잘못된 자산 심볼에 매핑하는 경우가 빈번합니다.
가변적인 출력을 제거하기 위해 LLM 지침에 다음 내용을 추가합니다:
Input:
Title: Oil prices surge after Iran conflict escalates
Description: Markets fear supply disruptions in the Middle East
...
동일한 출력 형식을 강제하기 위해 여러 개의 예시 응답(few-shot)을 사용하는 것을 권장합니다.
4. 상태 집계 및 모멘텀 추적 (State Aggregation & Momentum Tracking)
단일 자산이 동일한 추출 윈도우 내의 여러 뉴스 소스에 나타날 수 있으며, 이로 인해 종종 상충하는 감성 라인이 생성될 수 있습니다. 예를 들어, BBC가 특정 티커에 대해 약간의 약세(bearish) 의견을 보도한 반면, 20분 후 Financial Times가 매우 강세(bullish)인 단독 보도를 내놓는다면, 개별 기사만을 고립시켜 살펴보는 것은 불완전한 그림을 제공하게 됩니다.
이를 해결하기 위해 시스템은 이동 윈도우(rolling window) 동안 캡처된 모든 과거 데이터를 가져와 티커 심볼별로 그룹화합니다. 이렇게 풀링된 소스 입력값들은 이후 두 번째 LLM 상태 집계(state-aggregation) 레이어를 통과하게 됩니다.
단순한 산술 평균 대신, LLM은 각 기사의 감성(sentiment)과 게시 후 경과된 시간(hours since published)을 사용하여 다음과 같은 응답인 전체 감성(overall sentiment), 신뢰도(confidence), 그리고 모멘텀(momentum)을 도출하도록 권장됩니다.
최종 출력 구조 레이아웃은 최상위 집계 지표(aggregated metrics)를 합의(consensus)를 형성한 정확한 하위 기사(downstream articles) 배열과 함께 래핑(wrap)하여 제공합니다:
{
"ticker": "para",
"overall_sentiment": "neutral",
...
유용한 링크
계약 형태(Contract Shapes) 탐색하기: 대화형 Swagger UI 문서를 확인하여 모의 요청(mock requests)을 실행하고 정확한 JSON 페이로드(payloads)를 파악해 보세요.
RapidAPI를 통한 통합: RapidAPI에서 무료 티어 개발자 토큰을 발급받아, 실시간 거시 감성 트리거(macro-sentiment triggers)를 자동화된 알고리즘 모델(algorithmic models), 퀀트 트레이딩 봇(quantitative trading bots) 또는 맞춤형 터미널 대시보드(custom terminal dashboards)에 직접 주입하기 시작하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기