Skip to main content

금융 예측을 위한 Gemini LLM 기반 RAG 시스템 구축

이 글에서는 금융 예측을 위해 Gemini LLM을 활용한 RAG 시스템을 구축하고, Weights & Biases와 통합하는 방법을 다룹니다. 본문은 AI 번역본입니다. 오역이 있을 경우 댓글로 알려주세요.
Created on September 15|Last edited on September 15


재무 예측은 모든 비즈니스에서 핵심적인 역할을 합니다. 과거 데이터, 시장 동향, 그리고 기타 영향 요인을 분석해 미래의 재무 성과를 예측하는 과정입니다. 효과적인 예측을 통해 재무 성과를 높이고, 현금 흐름을 안정화하며, 사업 성장을 이끄는 데 필요한 신용과 투자에 더 원활하게 접근할 수 있습니다. 견고한 예측 기법을 도입하면 기업은 경기 변동의 복잡성을 보다 잘 헤쳐 나가고, 지속 가능한 성공을 위한 유리한 위치를 선점할 수 있습니다.
이제 LLM으로 재무 예측을 하고 싶다고 가정해 봅시다. 가장 좋은 방법은 RAG 시스템을 통합하는 것입니다. RAG는 LLM의 생성 능력과 결합될 때 더 정확하고 정밀한 예측을 내는 데 도움을 줍니다. RAG 시스템에서 사용하기에 뛰어난 LLM은 Gemini LLM입니다. Gemini LLM은 특정 재무 예측 과제에 맞게 미세 조정하거나 적응시킬 수 있으며, 검색된 정보를 기반으로 응답을 생성하는 데 필요한 고품질의 기본 역량을 제공합니다.
패키지를 완성하려면 RAG 시스템 내에서 Gemini LLM을 사용하는 다양한 실험을 Weights & Biases로 추적할 수 있습니다. 모델 파라미터부터 성능 지표까지 모든 정보를 기록해 주며, 이는 특정 유형의 재무 예측에 맞춰 RAG 시스템 구성 최적화에 매우 중요합니다.

RAG 시스템 이해하기

이미지: 작성자 제공
간단히 말해 RAG(Retriever-Augmented Generation)은 “retriever”라는 추가 구성 요소를 “generator”(LLM)에 더해, 생성기의 신뢰성과 정확성을 높이는 기법입니다. “retriever”는 방대한 문서나 데이터베이스를 검색해 입력 질의와 관련된 정보를 찾아냅니다. 이는 마치 검색 엔진처럼 동작하여, 주어진 질문에 따라 가장 관련성이 높은 사실과 수치를 끌어옵니다.
그런 다음 첫 번째 단계에서 검색된 정보를 바탕으로 “generator”가 답변이나 출력을 구성합니다. generator는 retriever가 제공한 문맥을 활용해 일관되고 맥락에 적합한 응답을 생성합니다.
전체적으로 RAG 시스템은 정보 검색과 텍스트 생성의 기능을 결합해, 최신의 구체적 데이터에 근거한 관련성 높은 답변을 만들어 냅니다. 덕분에 RAG 시스템은 복잡한 질문에 답하기, 설명 제공, 광범위한 데이터를 바탕으로 예측하기처럼 상세하고 정확한 정보가 필요한 응용 분야에서 특히 유용합니다.
따라서 재무 예측의 맥락에서 RAG 시스템의 retriever 구성 요소는 외부의 다양한 금융 데이터, 문서, 보고서에 접근해 예측 질의와 가장 관련성 높고 최신의 정보를 끌어올 수 있습니다. 이는 LLM이 오래되었거나 한정적일 수 있는 학습 데이터에만 의존하지 않고, 최신 시장 데이터와 동향, 분석까지 함께 활용한다는 뜻입니다. 더 나아가 폭넓고 다양한 데이터 소스를 사용함으로써, RAG 시스템은 단일 소스나 단일 데이터셋에 내재된 편향을 줄이는 데 도움을 주어 재무 예측의 오류율을 낮출 가능성을 높입니다.
시장 동향 분석을 예로 들어보면, RAG 시스템은 방대한 금융 뉴스, 시장 보고서, 실시간 데이터 피드를 분석해 시장 동향을 식별하고 예측할 수 있습니다. 가장 관련성 높은 정보를 검색하고 종합적인 인사이트를 생성함으로써, 이러한 시스템은 다양한 요인이 시장에 어떤 영향을 미칠 수 있는지 분석가가 이해하도록 돕습니다.

핵심 구성 요소: Gemini LLM과 W&B

Google의 Gemini는 인공지능 기술에서 중대한 도약을 이뤄내며, 인공지능의 한계를 넓히려는 Google의 의지를 보여줍니다. 따르면 Google의 블로그 모델과 관련해 Gemini는 광범위한 테스트를 거쳤으며, 자연 이미지·오디오·비디오 이해뿐 아니라 수리적 추론과 같은 다양한 과제에서 뛰어난 성능을 보여주었습니다. 따라서 복잡한 금융 용어와 맥락을 이해하는 데에도 탁월할 가능성이 높으며, 금융 문서, 보고서, 뉴스 등을 정확하게 해석할 수 있습니다.
또한 Gemini는 방대한 데이터를 처리할 수 있어 대형 금융 기관의 요구나 정교한 분석에도 맞춰 확장할 수 있습니다. 또 하나 중요한 기능은 실시간 데이터를 처리하는 능력으로, 시의적절한 금융 예측과 의사 결정에 결정적인 역할을 할 수 있습니다.
다음으로 Weights & Biases는 시간에 따른 모델 성능을 추적하고 시각화하는 도구를 ���공해, 추세를 파악하고 개선이 필요한 지점을 정확히 짚어내는 데 도움을 줍니다. 또한 실험 관리 과정을 간소화하여, 여러 모델 설정을 실행·비교하고 특정 금융 예측 과제에 가장 적합한 구성 요소를 이해할 수 있게 해줍니다. 따라서 W&B는 지속적인 성능 모니터링과 반복 테스트를 지원함으로써 RAG 시스템이 최첨단을 유지하고, 정확도와 효율성을 끊임없이 향상하도록 보장합니다.
전반적으로 Gemini LLM의 고도화된 언어 능력과 W&B가 제공하는 강력한 모니터링·관리 도구의 결합은, 특히 금융 예측처럼 복잡하고 데이터 집약적인 분야에서 RAG 시스템의 성능을 크게 향상시키는 강력한 협업을 이룹니다.

금융 예측을 위한 RAG 시스템 구축

이 섹션에서는 Gemini와 S&P 500 주가 데이터를 사용해 RAG 시스템을 구축합니다.
데이터셋과 함께 Weights & Biases 감독 기능을 구현합니다. 또한 벡터화된 데이터를 저장할 벡터 데이터베이스로 FAISS를 사용할 것입니다.
모델에 제공되는 데이터셋은 대략 다음과 같은 형태입니다.


1단계: 필요한 패키지 설치

!pip install git+https://github.com/LucknowAI/Lucknow-LLM
!pip install numpy pandas scikit-learn
!pip install langchain tiktoken faiss-cpu transformers pandas torch openai

2단계: 라이브러리 임포트 및 모델 초기화

import os
import pandas as pd
import numpy as np
import wandb
from lucknowllm import GeminiModel
import faiss
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.prompts import PromptTemplate
“os”, “pandas”, 그리고 “numpy”는 파일 처리, 데이터 조작, 수치 연산을 위한 표준 Python 라이브러리입니다. “wandb” 라이브러리는 Weights & Biases에 실험을 로깅하는 데 사용됩니다. “from lucknowllm import GeminiModel”은 Lucknow LLM에서 Gemini 모델을 임포트하는 코드입니다.
“faiss”는 고밀도 벡터의 유사도 검색과 클러스터링을 효율적으로 수행하기 위한 라이브러리입니다. “OpenAIEmbeddings”, “FAISS”, “PromptTemplate”는 임베딩, 벡터 스토어, 프롬프트 템플릿을 다루기 위한 LangChain 라이브러리의 클래스입니다.

3단계: API 키 초기화

여기에서는 Gemini와 OpenAI 모델을 위한 API 키를 초기화합니다:
# Initialize the Gemini model (replace 'YOUR_GEMINI_API_KEY' with your actual Gemini API key)
gemini_api_key = "YOUR_GEMINI_API_KEY"
Gemini = GeminiModel(api_key=gemini_api_key, model_name="gemini-1.0-pro")

# Initialize the OpenAI API key
openai_api_key = "YOUR_OPENAI_API_KEY"
Weights & Biases에 로그인하기
wandb.login()
새로운 W&B 실행 초기화
wandb.init(project="rag_with_gemini")

4단계: 보조 함수 정의

CSV 파일 로딩 및 전처리
def load_and_process_csv(file_path):
data = pd.read_csv(file_path)
data['text'] = data.apply(lambda row: f"Stock {row['Name']} on date {row['date']} opening price {row['open']} closing price {row['close']}.", axis=1)
texts = data['text'].tolist()
return texts
이 함수는 CSV 파일을 로드한 뒤 주가 데이터를 텍스트 설명으로 가공하고, 해당 텍스트의 목록을 반환합니다.
임베딩 생성 및 저장
def create_and_store_embeddings(texts, openai_api_key):
embeddings = OpenAIEmbeddings(api_key=openai_api_key)
vectors = embeddings.embed_documents(texts)
vector_store = FAISS.from_texts(texts, embeddings)
return vector_store
이 함수는 OpenAI의 임베딩을 사용해 텍스트의 임베딩을 생성하고, 이를 FAISS 벡터 스토어에 저장합니다.
“retrieve” 함수 정의
def retrieve(query, vector_store, k=20):
return vector_store.similarity_search(query, k=k)
이 함수는 질의에 따라 벡터 스토어에서 가장 관련성이 높은 문서를 검색합니다.
“ask_question” 함수 정의
def ask_question(question, vector_store):
top_docs = retrieve(question, vector_store)
top_contexts = [doc.page_content for doc in top_docs]
top_context = " ".join(top_contexts)
prompt_template = PromptTemplate(
input_variables=["context", "question"],
template="""You are an expert question answering system. I'll give you a question and context, and you'll return the answer.
Context: {context}
Query: {question}"""
)
argumented_prompt = prompt_template.format(context=top_context, question=question)
model_output = Gemini.generate_content(argumented_prompt)
table = wandb.Table(columns=["Question", "Retrieved Data", "Response"])
table.add_data(question, "\n".join(top_contexts), model_output)
wandb.log({"Q&A Log": table})
return model_output
이 함수는 관련 문서를 검색하고 Gemini 모델을 사용해 응답을 생성한 뒤, 결과를 표 형식으로 Weights & Biases(W&B)에 기록합니다.

5단계: 데이터 로드 및 처리

CSV 파일 경로를 지정하고 처리하여 임베딩을 생성하기
file_path = "/kaggle/input/sandp500/individual_stocks_5yr/individual_stocks_5yr/AAL_data.csv"

texts = load_and_process_csv(file_path)

vector_store = create_and_store_embeddings(texts, openai_api_key)
질문하기 및 응답 기록하기
file_path = "/kaggle/input/sandp500/individual_stocks_5yr/individual_stocks_5yr/AAL_data.csv"

texts = load_and_process_csv(file_path)

vector_store = create_and_store_embeddings(texts, openai_api_key)
W&B 실행 마무리
wandb.finish()
코드를 간단히 요약해 보겠습니다. 먼저 “설치(Installation)” 단계에서 필요한 모든 라이브러리와 패키지를 설치합니다. 그다음 “임포트 및 초기화(Imports and Initialization)” 단계에서 필요한 라이브러리를 임포트하고, 각자의 API 키로 Gemini와 OpenAI 모델을 초기화합니다.
그다음 네 가지 보조 함수가 이어집니다.
  1. “load_and_process_csv” 함수 CSV 파일을 로드하고 처리하여 텍스트 설명을 생성합니다.
  2. “create_and_store_embeddings” 함수 텍스트 설명에 대한 임베딩을 생성하고 이를 FAISS 벡터 스토어에 저장합니다.
  3. 검색 쿼리를 기준으로 벡터 스토어에서 가장 관련성이 높은 문서를 검색합니다.
  4. ask_question 관련 문서를 검색한 뒤 Gemini 모델로 응답을 생성하고, 질문·검색된 데이터·응답을 표 형식으로 W&B에 기록합니다.
다음으로 “데이터 처리” 단계에서 CSV 파일을 로드하고 처리하여 임베딩을 생성합니다. 마지막 단계에서는 모델에 질문을 던지면, 관련 데이터를 검색하고 응답을 생성한 뒤 모든 내용을 Weights & Biases(W&B)에 기록합니다.

RAG 시스템 사용법

RAG 시스템을 구축했으니 이제 주식 시장 데이터에 대해 모델에 몇 가지 질문을 해 보겠습니다. 질문 대상 기업으로 AAL(American Airlines Group Inc.)을 선택했습니다.
여기에 기록된 질문, 검색된 데이터, 그리고 생성된 응답이 있습니다.
연간 실적에 대해 묻기.


여기에서 볼 수 있듯이, 모델은 먼저 1월 초의 주가를 언급한 뒤 그 이후 주가가 변동했다고 설명했습니다. 이어서 해당 연도의 최고가와 최저가, 그리고 그해 전반적인 추세에 대한 인사이트를 제시했습니다.
분기별 추세에 대해 묻기.



응답의 나머지 부분

여기에서 볼 수 있듯이, 모델은 각 분기의 시작가와 종가, 분기별 주가의 전반적 방향, 그리고 분기 내 주가의 유의미한 변동 사항을 언급하며 상승 또는 하락 비율을 함께 제시했습니다.
월간 실적에 대해 묻기.

응답의 나머지 부분




여기에서 모델은 각 달의 시가와 종가를 제시하고, 해당 달의 상승 또는 하락 비율도 함께 표시했습니다.
두 기간에 걸친 회사의 실적을 비교해 달라고 모델에 요청하기.

여기에서 모델은 두 기간의 시가와 종가를 각각의 퍼센트 차이로 비교했습니다. 이어서 두 기간의 주가에서 나타난 핵심적인 차이를 강조하고, 이러한 차이를 야기했을 가능성이 있는 요인들도 함께 언급했습니다.
이제 연간, 분기별, 월간, 비교 분석 등 다양한 유형의 분석을 모두 질문해 본 만큼, RAG 시스템이 이러한 금융 분석을 수행하는 데 얼마나 효율적인지 확인하셨길 바랍니다.

결론

재무 예측에 Gemini LLM과 함께 Retrieval-Augmented Generation(RAG) 시스템을 활용하면 다양한 이점이 있습니다. 이 접근 방식은 정보 검색과 자연어 생성의 강점을 결합해, 과거 데이터에 기반한 포괄적인 인사이트를 제공합니다.
Gemini LLM은 방대한 금융 텍스트를 효율적으로 처리하여 관련 정보를 추출하고 상세한 보고서를 생성함으로써 시장 동향과 과거 실적을 이해하는 데 도움을 줍니다. 또한 RAG 시스템의 맥락적으로 관련성 높은 정보 제공 능력은 금융 애널리스트와 투자자의 의사 결정 과정을 강화합니다.
금융 분야에서 RAG 시스템의 미래는 개선과 활용 측면에서 매우 유망합니다. 실시간 데이터 소스 및 고급 분석과의 통합은 제공되는 정보의 정확성과 시의성을 한층 높일 수 있습니다. 금융 예측에 특화된 머신러닝 모델을 도입하면 예측과 위험 평가를 더욱 정교하게 다듬을 수 있습니다.
또한 텍스트, 수치 데이터, 시각화 등 멀티모달 데이터를 포함하도록 RAG 시스템의 기능을 확장하면 금융 시장을 보다 총체적으로 바라볼 수 있습니다. 기술이 발전함에 따라 Gemini와 같은 LLM을 결합한 RAG 시스템은 포트폴리오 관리부터 규제 준수, 전략 기획에 이르기까지 금융 전반을 지원하는 필수 도구가 될 수 있습니다.

이 글은 AI로 번역되었습니다. 오역이 의심되는 부분이 있으면 댓글로 알려주세요. 원문 보고서는 아래 링크에서 확인하실 수 있습니다: 원문 보고서 보기