02. AI종합판단 로직구조

2026. 8. 16. 23:49카테고리 없음

1. 목표

AI종합판단의 목표는 여러 시장신호를 하나의 해석으로 묶는것입니다.

개별지표는 방향을 말해주지만, 단독으로는 판단이 어렵기때문에, 지수는 상승중이어도 뉴스는 부정적일수 있고, 기술적 지표는 과열을 가리키지만 단기수급은 강할 수 있습니다.

따라서 종합판단은 상승 하락 하나를 맞히는게 아니라, 현재시장을 어떤 상태로 볼 수 있는지 정리하는 기능입니다.

 

2. 입력 데이터

종합판단은 여러 종류의 입력을 함께 사용합니다.

첫번째는 시장가격데이터 입니다. 주요지수, 종목가격, 등락률, 거래량 같은 값이 여기에 포함됩니다. 

두번째는 뉴스와 브리핑 데이터입니다. 가격 데이터만으로 설명되지 않는 움직임을 해석하기 위해 사용됩니다. 

세번째는 기술적 지표입니다. 단기추세, 과열여부, 변동성등을 판단하는데 사용됩니다. 

 

3. 전처리

최종 출력은 두 갈래입니다. 하나는 llm 프롬프트에 들어가는 요약 contxt 이고, 다른 하나는 점수계산에 쓰이는 subscores입니다. 

입력 데이터는 성격이 서로 다릅니다. 매크로 데이터는숫자 중심이고, 뉴스와 리포트는텍스트 중심입니다. 방향시놓, 밸류에이션, 수급 데이터는 이미 다른 배치에서 계싼된 캐시 값입니다. 이 값들을 그대로 섞으면 형식도 다르고 결손처리 방식도 달라 판단 로직이 불안정해집니다. 

그래서 먼저 소스별 예외를 격리합니다. 하나의 데이터 수집이 실패해도 전체 종합판단이 실패 하지 않도록 해당 항목만 결손으로 처리합니다. 

그다음 결손값은 해당없으으로 통일합니다. 뉴스는 제목기준으로 중복을 제거하고, 너무 많은입력이 들어가지 않도록 상한을 둡니다. 

전처리 결과는 크게 두가지로 나뉩니다. 

첫번째는 llm 프롬프트에 들어가는 요약컨텍스트입니다. _gather()에서 각 데이터를 짧은 문자열로 압축합니다. 

두번째는 점수계산에 사용하는 서브스코어입니다. _subscore() 에서 방향신호, 밸류에이션, 예측값 등을 0-100 점수로 변환합니다. 

즉 전처리는 원본 데이터를 바로 판단하지 않고, 설명용 입력과 계산용 입력으로 분리하는 단계입니다. 

 

4. 판단기준

판단기준 아키텍처

판단기준은 _subscores() 에서 마든 0-100 점수를 단기와 중장기 점수로 합성하는 단계입니다. 

 

먼저 단기와 중장기를 분리합니다. 단기점수는 검증된 요인만 사용합니다. 현재는 direction 과 drawdown_risk 가 대상입니다. 뉴스, 리포트, 기술적 지표, 밸류에이션은 단기점수에서 제외합니다. 

 

선택된 요인은 동일가중으로 평균을 냅니다. 

 

 

결과 생성 단계에서는 앞에서 만든 설명용 컨텍스트와 계산용 점수를 하나의 프롬프트로 묶습니다.

 

  입력은 두 가지입니다. `_gather()`가 만든 시장 컨텍스트와 `compute_scores()`가 만든 점수

  객체입니다. 컨텍스트는 리포트 문장을 만들기 위한 재료이고, 점수는 이미 계산된 판단 결과입니다.

 

  프롬프트는 `_build_prompt()`에서 조립합니다. 여기서 중요한 점은 LLM이 점수를 새로 판단하

  지 않는다는 것입니다. 단기 점수와 중장기 점수는 이미 결정론 로직으로 계산되어 있고, LLM은 그 점수를 바꾸지 않고 설명 문장을 생성합니다.

 

  생성 결과는 고정된 JSON 구조를 따라야 합니다. 예를 들어 `headline`, `synthesis`,

  `bull_factors`, `bear_factors` 같은 필드가 필요합니다. 필수 필드가 없으면 유효한 결과로보지 않습니다.

마지막으로 검증된 결과를 캐시에 저장합니다. 화면은 이후 이 저장된 결과를 읽어 렌더링합니다.

 

결과 생성 단계의 핵심은 LLM에게 판단을 맡기는 것이 아니라, 이미 계산된 판단을 사용자가 읽을 수 있는 형식으로 변환하는 것입니다.