Skip to main content

AI 투자 리서치 자동화

Views 69약 8분생성형 AI 활용
Summary

자동화의 목적은 판단을 없애는 것이 아니다

투자 리서치는 반복 업무가 많습니다. 관심 종목의 가격을 확인하고, 뉴스 제목을 훑고, 실적 발표 내용을 읽고, 재무 지표가 달라졌는지 봅니다. 그리고 마지막에는 "어제와 무엇이 달라졌는가?"를 정리합니다.

이 과정은 중요하지만 시간이 많이 듭니다. 특히 관심 종목이 5개를 넘어가면 매일 같은 일을 반복하는 데 에너지가 소모됩니다. 그래서 AI와 파이썬을 활용할 수 있습니다.

다만 목표를 분명히 해야 합니다. AI 투자 리서치 자동화는 "오늘 살 종목을 골라주는 시스템"이 아닙니다. 더 정확히 말하면 다음 일을 자동화하는 시스템입니다.

  • 관심 종목 데이터를 정해진 시간에 가져온다.

  • 최근 뉴스와 실적 자료를 모은다.

  • 재무 지표와 가격 지표의 변화를 계산한다.

  • LLM이 긴 문서를 짧은 메모로 요약한다.

  • 사람이 확인해야 할 항목을 체크리스트로 남긴다.

즉, 자동화의 목적은 결론을 대신 내리는 것이 아니라 검토할 자료를 빠르게 준비하는 것입니다. 좋은 리서치 자동화 시스템은 매수·매도 신호보다 "확인해야 할 변화"를 먼저 보여줍니다.

AI 투자 리서치 자동화AI 생성 이미지

관심 종목 리스트가 출발점이다

자동화 시스템의 중심에는 관심 종목 리스트가 있어야 합니다. 많은 초보자가 뉴스부터 수집하려고 하지만, 그 전에 "무엇을 추적할 것인가"를 정해야 합니다.

관심 종목 리스트에는 단순히 종목 코드만 넣지 않습니다. 기업명, 섹터, 비교할 벤치마크, 데이터 수집 주기, 마지막 업데이트 시각까지 함께 관리하는 것이 좋습니다.

import pandas as pd

watchlist = pd.DataFrame([
    {
        "ticker": "AAPL",
        "name": "Apple",
        "sector": "Technology",
        "benchmark": "SPY",
        "price_update": "daily",
        "news_update": "daily",
        "fundamental_update": "quarterly",
        "last_updated": None,
    },
    {
        "ticker": "MSFT",
        "name": "Microsoft",
        "sector": "Technology",
        "benchmark": "SPY",
        "price_update": "daily",
        "news_update": "daily",
        "fundamental_update": "quarterly",
        "last_updated": None,
    },
])

watchlist.to_csv("data/watchlist.csv", index=False)

이렇게 관리하면 리서치 흐름이 단순해집니다. 종목별로 가격 데이터는 Yahoo Finance나 FinanceDataReader, pykrx 같은 도구에서 가져올 수 있습니다. 뉴스는 검색 API나 금융 데이터 서비스를 통해 수집할 수 있습니다. 공시와 실적 자료는 기업 공시 사이트, 거래소, 금융 데이터 제공업체, 기업 IR 페이지에서 가져올 수 있습니다.

중요한 것은 모든 데이터를 한 번에 완벽하게 모으는 것이 아닙니다. 처음에는 가격 데이터와 뉴스 제목만으로 시작해도 충분합니다. 그다음 실적 발표 자료, 재무제표, 컨퍼런스콜 요약, 산업 지표를 차례로 붙이면 됩니다.

실제로 LLM을 활용한 주식 분석 예제에서도 뉴스 수집, 과거 가격 데이터 수집, 분석 함수 같은 작은 기능을 도구로 분리한 뒤 에이전트가 필요할 때 호출하는 흐름을 사용합니다.1 복잡한 시스템도 결국은 작은 기능의 조합입니다.

원문과 요약을 함께 저장하라

AI 리서치 자동화에서 가장 위험한 실수는 요약문만 저장하는 것입니다. LLM이 만든 요약은 편리하지만, 원문을 대체할 수 없습니다. 나중에 "이 내용이 어디에서 나온 것인가?"를 확인할 수 있어야 합니다.

따라서 뉴스나 공시를 저장할 때는 최소한 다음 정보를 함께 남기는 것이 좋습니다.

  • 종목 코드

  • 제목

  • 원문 URL

  • 발행 시각

  • 수집 시각

  • 데이터 기준일

  • 원문 텍스트 또는 원문 일부

  • 요약 결과

  • 요약에 사용한 모델명

예를 들어 뉴스 테이블은 다음과 같은 형태가 될 수 있습니다.

news_rows = pd.DataFrame([
    {
        "ticker": "AAPL",
        "title": "Apple announces new product updates",
        "url": "https://example.com/news/apple",
        "published_at": "2026-05-19 08:30:00",
        "collected_at": "2026-05-20 07:00:00",
        "source": "news_api",
        "text": "full article text or excerpt...",
    }
])

news_rows.to_parquet("data/raw/news.parquet", index=False)

여기서 핵심은 published_at과 collected_at을 구분하는 것입니다. 발행 시각은 뉴스가 세상에 나온 시간이고, 수집 시각은 내 시스템이 그 뉴스를 가져온 시간입니다. 백테스트나 리서치 검증에서는 이 차이가 중요합니다. 오늘 아침 7시에 만든 브리핑에 오후 3시에 나온 뉴스가 들어가면 안 됩니다.

또 하나의 원칙은 원본 데이터와 가공 데이터를 분리하는 것입니다. 원본 뉴스는 raw 폴더에 저장하고, LLM 요약 결과는 processed 폴더나 별도 테이블에 저장합니다. 그래야 요약 프롬프트를 바꾸거나 모델을 바꿨을 때 같은 원문으로 다시 실험할 수 있습니다.

LLM은 대량 문서를 읽는 보조원이다

LLM이 잘하는 일은 긴 문서를 빠르게 읽고 구조화하는 것입니다. 실적 발표 자료, 컨퍼런스콜 전문, 뉴스 기사, 공시 문서처럼 사람이 읽기에는 길지만 핵심이 정해져 있는 자료에 잘 맞습니다.

예를 들어 종목별 뉴스 요약 프롬프트는 다음처럼 만들 수 있습니다.

다음은 특정 기업에 대한 최근 뉴스 목록입니다.
투자 추천을 하지 말고, 리서치 메모 초안만 작성하세요.

출력 형식:
1. 핵심 변화 3개
2. 긍정 이슈
3. 부정 이슈
4. 실적 또는 가이던스 관련 언급
5. 경쟁사 또는 산업 관련 언급
6. 확인이 필요한 주장
7. 사람이 원문을 다시 봐야 할 문장

뉴스 목록:
{news_text}

여기서 일부러 "투자 추천을 하지 말라"고 적었습니다. LLM에게 "살까, 말까?"를 묻는 순간 답은 그럴듯하지만 위험해집니다. 반대로 "무엇이 바뀌었는지 정리해줘", "확인해야 할 주장을 뽑아줘"라고 요청하면 리서치 품질이 올라갑니다.

금융 뉴스 헤드라인에 감성 분석 모델을 적용하거나, 긴 뉴스 본문을 요약 모델로 압축하는 방식은 이미 여러 데이터 분석 예제에서 사용됩니다.2 다만 감성 점수 하나로 매매 결정을 내리면 안 됩니다. "긍정 뉴스"라고 해서 주가가 오르는 것도 아니고, "부정 뉴스"라고 해서 반드시 하락하는 것도 아닙니다. 시장은 이미 그 정보를 반영했을 수도 있고, 오히려 예상보다 덜 나쁜 뉴스에 상승할 수도 있습니다.

따라서 LLM의 출력은 다음처럼 다루는 편이 안전합니다.

  • 요약: 사람이 빠르게 읽기 위한 초안

  • 감성 분석: 뉴스 분위기를 보는 보조 지표

  • 리스크 추출: 놓친 위험을 찾기 위한 체크리스트

  • 투자 메모: 최종 보고서가 아니라 검토용 초안

숫자로 확인된 변화와 해석을 분리하라

투자 리서치에서 가장 중요한 구분은 "숫자로 확인된 변화"와 "뉴스에서 나온 주장"입니다.

예를 들어 다음 두 문장은 성격이 다릅니다.

  • "최근 분기 매출은 전년 동기 대비 12% 증가했다."

  • "회사는 AI 수요 증가로 장기 성장성이 높아질 것으로 기대된다."

첫 번째 문장은 재무제표로 확인할 수 있습니다. 두 번째 문장은 해석입니다. 둘 다 중요하지만 같은 무게로 다루면 안 됩니다.

자동화 시스템은 이 둘을 분리해서 기록해야 합니다. 가격과 재무 데이터에서는 계산 가능한 지표를 만들고, 뉴스와 보고서에서는 주장과 해석을 추출합니다.

def compare_metric(current, previous):
    if previous == 0 or pd.isna(previous):
        return None
    return (current / previous - 1) * 100

financial_check = pd.DataFrame([
    {
        "ticker": "AAPL",
        "metric": "revenue",
        "current": 100,
        "previous": 92,
        "change_pct": compare_metric(100, 92),
        "source": "financial_statement",
        "as_of": "2026Q1",
    },
    {
        "ticker": "AAPL",
        "metric": "operating_income",
        "current": 28,
        "previous": 30,
        "change_pct": compare_metric(28, 30),
        "source": "financial_statement",
        "as_of": "2026Q1",
    },
])

재무 지표에서는 매출, 영업이익, 순이익, ROE, 부채비율, PER, PBR, 배당수익률을 볼 수 있습니다. 가격 데이터에서는 변동성, 최근 1개월 수익률, 3개월 모멘텀, 52주 고점 대비 하락률, MDD를 계산할 수 있습니다.

그다음 LLM에게는 이렇게 요청합니다.

아래에는 숫자로 계산된 지표 변화와 뉴스 요약이 함께 있다.
두 정보를 섞지 말고 분리해서 정리하라.

1. 숫자로 확인된 변화
2. 뉴스나 경영진 발언에서 나온 주장
3. 숫자와 주장이 서로 일치하는 부분
4. 숫자로 아직 확인되지 않은 주장
5. 추가 확인이 필요한 데이터

이 프롬프트는 매우 중요합니다. LLM은 문장을 자연스럽게 연결하려는 경향이 있습니다. 그래서 "AI 수요 증가"라는 뉴스와 "주가 상승"이라는 가격 변화를 쉽게 연결할 수 있습니다. 하지만 투자자는 인과관계를 조심해야 합니다. 자동화 시스템은 그럴듯한 이야기를 만드는 장치가 아니라, 이야기를 검증할 수 있게 정리하는 장치여야 합니다.

여러 종목에 같은 프롬프트를 반복 적용하기

관심 종목이 많아지면 종목별로 같은 작업을 반복해야 합니다. 이때 필요한 것이 배치 처리입니다. 배치 처리는 여러 행의 데이터를 같은 규칙으로 한 번에 처리하는 방식입니다.

예를 들어 종목별 뉴스 묶음을 하나의 데이터프레임으로 만든 뒤, 각 행에 LLM 요약을 적용할 수 있습니다.

brief_inputs = pd.DataFrame([
    {
        "ticker": "AAPL",
        "company": "Apple",
        "news_text": "recent news texts...",
        "metric_text": "revenue +12%, operating income -6%...",
    },
    {
        "ticker": "MSFT",
        "company": "Microsoft",
        "news_text": "recent news texts...",
        "metric_text": "revenue +15%, margin improved...",
    },
])

def build_prompt(row):
    return f"""
    {row['company']}({row['ticker']})의 최근 리서치 자료를 요약하라.
    투자 추천은 하지 말라.

    [뉴스]
    {row['news_text']}

    [지표 변화]
    {row['metric_text']}

    출력:
    - 핵심 변화
    - 긍정 요인
    - 부정 요인
    - 숫자로 확인된 변화
    - 확인이 필요한 주장
    - 사람이 검토할 항목
    """

brief_inputs["prompt"] = brief_inputs.apply(build_prompt, axis=1)

실제 LLM 호출 함수는 사용하는 서비스에 따라 달라집니다. OpenAI API, Anthropic API, 로컬 LLM, 클라우드 플랫폼의 LLM 기능 등 무엇을 써도 구조는 비슷합니다.

def call_llm(prompt):
    # 실제 프로젝트에서는 이곳에 LLM API 호출 코드를 넣는다.
    return "LLM summary result"

brief_inputs["ai_summary"] = brief_inputs["prompt"].apply(call_llm)
brief_inputs.to_csv("data/processed/daily_briefing.csv", index=False)

대규모 환경에서는 입력 테이블의 각 행에 프롬프트를 적용하고, 결과를 다시 테이블에 저장한 뒤, 검증 조건을 통과한 결과만 다음 단계로 넘기는 방식이 자주 쓰입니다.3 개인 투자자용 시스템도 원리는 같습니다. CSV나 parquet 파일을 입력으로 쓰고, 종목별 요약 결과를 다시 파일로 저장하면 됩니다.

중요한 것은 같은 프롬프트를 여러 종목에 일관되게 적용하는 것입니다. 그래야 오늘의 삼성전자 메모와 내일의 삼성전자 메모, 또는 애플과 마이크로소프트 메모를 비교할 수 있습니다.

매일 아침 브리핑 만들기

리서치 자동화의 가장 실용적인 결과물은 매일 아침 브리핑입니다. 장이 열리기 전에 관심 종목별로 무엇이 달라졌는지 한 페이지로 보는 것입니다.

브리핑은 길 필요가 없습니다. 오히려 짧아야 매일 읽을 수 있습니다. 다음 형식이면 충분합니다.

[일일 투자 브리핑]
기준일: 2026-05-20 07:00
데이터 범위: 전일 장 마감 이후 수집 자료

1. 시장 요약
- 주요 지수 변화
- 금리, 환율, 원자재 주요 변화
- 시장 전체에 영향을 줄 수 있는 뉴스

2. 관심 종목 변화
- AAPL: 신제품 관련 뉴스 증가, 최근 1개월 수익률 +4.2%, 변동성 확대
- MSFT: 클라우드 성장 언급, 실적 발표 대기, 밸류에이션 부담 언급

3. 확인 필요 항목
- AAPL 뉴스 원문 2건 확인
- MSFT 실적 발표 후 가이던스 변화 확인

4. 오늘의 투자 메모
- 신규 매매 결정보다 기존 가설 유지 여부 점검

여기서도 핵심은 "매매 지시"가 아니라 "검토 순서"입니다. 좋은 브리핑은 투자자를 흥분시키지 않습니다. 오히려 차분하게 무엇을 확인해야 하는지 알려줍니다.

종목별 투자 메모는 조금 더 자세히 만들 수 있습니다.

[종목 메모]
종목: AAPL
기준일: 2026-05-20

핵심 변화:
- 최근 뉴스는 신제품과 서비스 매출에 집중됨.
- 가격은 최근 3개월 기준 벤치마크보다 강함.
- 다음 실적 발표에서 마진 변화 확인 필요.

숫자로 확인된 변화:
- 3개월 모멘텀: +8.5%
- 20일 변동성: 상승
- 최근 분기 매출: 전년 대비 증가

뉴스·해석 기반 주장:
- AI 기능이 교체 수요를 자극할 수 있다는 기대가 있음.
- 경쟁 심화에 대한 우려도 함께 언급됨.

사람이 확인할 항목:
- 원문 기사 링크 확인
- 실적 발표 자료에서 서비스 매출 비중 확인
- 밸류에이션이 과거 평균 대비 높은지 확인

이런 메모가 매일 쌓이면 투자 일지가 됩니다. 나중에 투자 판단이 맞았는지 틀렸는지뿐 아니라, 그때 어떤 정보를 보고 어떤 가설을 세웠는지 복기할 수 있습니다.

자동화된 리포트에는 안전장치를 붙여라

AI가 만든 리서치 결과는 반드시 안전장치를 포함해야 합니다. 특히 다음 항목은 매번 표시하는 것이 좋습니다.

  • 사용한 데이터 기준일

  • 원문 출처 링크

  • 수집 시각

  • 요약에 사용한 모델

  • 누락 가능성이 있는 정보

  • LLM이 추론한 내용

  • 사람이 직접 확인해야 할 항목

LLM은 오래된 정보를 말할 수 있고, 존재하지 않는 사실을 그럴듯하게 만들 수도 있습니다. 그래서 LLM 결과는 출발점으로 쓰고, 중요한 사실은 공시, 기업 발표 자료, 신뢰할 수 있는 금융 뉴스, 원천 데이터로 다시 확인해야 합니다.4

또한 데이터 사용 조건도 확인해야 합니다. 일부 금융 데이터와 뉴스 데이터는 외부 모델에 보내거나 저장하는 방식에 제한이 있을 수 있습니다. 상업용 데이터 서비스를 쓴다면 라이선스 조건을 먼저 확인해야 합니다. 개인 공부용 실습과 실제 운용 시스템은 책임 범위가 다릅니다.

마지막으로 자동화된 리포트에 "매수", "매도" 같은 단정적 표현을 넣지 않는 편이 좋습니다. 대신 다음 표현을 사용합니다.

  • "확인 필요"

  • "긍정 요인으로 분류"

  • "부정 요인으로 분류"

  • "숫자로 확인됨"

  • "뉴스 기반 주장"

  • "추가 검증 필요"

이 표현은 투자자를 보호합니다. 자동화 시스템이 결론을 강요하지 않고, 판단에 필요한 재료를 정리하도록 만들기 때문입니다.

작은 시스템부터 시작하라

처음부터 완벽한 AI 리서치 플랫폼을 만들 필요는 없습니다. 다음 네 단계면 충분합니다.

  1. 관심 종목 리스트를 CSV로 만든다.

  2. 매일 가격 데이터와 뉴스 제목을 수집한다.

  3. LLM으로 종목별 핵심 변화와 확인 항목을 요약한다.

  4. 결과를 일일 브리핑 파일로 저장한다.

이후에 실적 발표 요약, 재무제표 변화 감지, 산업 뉴스 요약, 투자 일지 자동화를 붙이면 됩니다. 클라우드 기반 예제에서는 뉴스, 실적, 산업 정보, 시장 심리 등을 모아 종목을 비교하고 결과를 데이터베이스에 저장하는 구조도 사용됩니다.5 하지만 개인 투자자의 첫 시스템은 그보다 훨씬 작아도 됩니다.

중요한 것은 매일 반복 가능한 흐름을 만드는 것입니다. 반복 가능한 흐름이 있어야 개선할 수 있습니다. 프롬프트가 부족하면 바꾸고, 데이터가 부족하면 추가하고, 요약이 부정확하면 검증 항목을 늘리면 됩니다.

AI 투자 리서치 자동화의 핵심은 속도가 아닙니다. 핵심은 일관성입니다. 같은 기준으로 데이터를 모으고, 같은 형식으로 요약하고, 같은 체크리스트로 검토하면 투자 판단의 품질이 조금씩 좋아집니다.

결국 우리가 만들고 싶은 것은 종목을 찍어주는 기계가 아닙니다. 매일 아침 내 관심 종목에서 무엇이 바뀌었는지 알려주고, 그 변화가 숫자로 확인되는지 묻고, 사람이 놓칠 수 있는 위험을 체크해주는 작은 리서치 보조원입니다.

다음 장에서는 이 흐름을 더 넓은 구조로 확장합니다. 데이터 수집, 정제, 지표 계산, 종목 선정, 포트폴리오 구성, 백테스트, 리포트 생성, 모니터링이 하나의 투자 전략 파이프라인으로 어떻게 연결되는지 살펴보겠습니다.

참고

1LangChain for Equity Investment Analysis

2AI-driven stock insights: analyzing financial news with LLMs

3일괄 처리 유추 파이프라인 배포 - Azure Databricks

4How To Use LLMs Like Gemini & ChatGPT for Stock Research

5stock-analysis-with-llm GitHub repository

책 목록

처음 만나는 AI 퀀트 투자: 파이썬과 AI로 투자 아이디어를 검증하는 법

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기