W3 Homework W3 과제 워크북 0 / 100 점
📝 HOMEWORK
WEEK 3

뉴스 센티먼트 분석
Alpha Vantage + Claude

총점 100점 · 필수 60 + 심화 40
🎯 W3 학습 목표 복습

Alpha Vantage NEWS_SENTIMENT API로 뉴스 수집 → Claude Haiku로 2차 분석 + 센티먼트 통합. 처음으로 LLM의 판단력을 파이프라인에 넣는 주차.

🔧 새로운 도구
Alpha Vantage
Anthropic API
AI Agent 노드
⏱ 예상 시간
필수 4시간
심화 +3시간
📊 과제 배점표
과제 1
20
과제 2
20
과제 3
20
과제 4
20
과제 5
20
합계 100점 · 필수 60 + 심화 40
📍 빠른 이동
🔴 REQUIRED — 과제 1
관심 종목 뉴스 피드 수집기
배점 20

Alpha Vantage NEWS_SENTIMENT API로 관심 종목 3개에 대한 최근 24시간 뉴스를 자동 수집합니다.

필수 요구사항
  • Alpha Vantage API Key 발급 (무료, 분당 5회 제한)
  • function=NEWS_SENTIMENT + tickers=AAPL,MSFT,NVDA 등 3개 종목
  • 각 뉴스의 title, url, source, sentiment_score, time_published 추출
  • Google Sheets에 뉴스 별로 1행씩 저장 (최대 50건)
  • 매일 09:00, 18:00 하루 2회 실행

API URL 예시

https://www.alphavantage.co/query
  ?function=NEWS_SENTIMENT
  &tickers=AAPL,MSFT,NVDA
  &time_from={{ yesterday }}T0000
  &limit=50
  &apikey={{ $credentials.av }}
응답에서 뉴스 배열 풀어내기
// Code 노드에서 feed 배열을 item별로 분리
const feed = $input.first().json.feed || [];
return feed.map(article => ({
  json: {
    title: article.title,
    url: article.url,
    source: article.source,
    sentiment_score: parseFloat(article.overall_sentiment_score),
    sentiment_label: article.overall_sentiment_label,
    time_published: article.time_published,
    ticker_sentiment: article.ticker_sentiment
  }
}));
이후 Sheets 노드가 각 item을 1행씩 저장.
⚠️ Alpha Vantage Rate Limit: 무료 Key는 분당 5회, 일 25회 제한. 학습용으로 demo 키 사용 가능하지만 일부 기능 제한. 진지하게 쓰려면 Premium 고려.
채점 기준 (20점 만점)
A. API 호출 + Key 관리4점
B. 뉴스 파싱 Code 노드5점
C. Sheets 뉴스별 1행 저장5점
D. 2회 Schedule 작동3점
E. 중복 뉴스 체크 로직 (optional)3점
🔴 REQUIRED — 과제 2
Claude Haiku로 개별 뉴스 2차 분석
배점 20

Alpha Vantage가 제공하는 sentiment_score는 단순 키워드 기반입니다. 여기에 Claude Haiku의 맥락 이해를 더해 더 정밀한 분석을 합니다.

필수 요구사항
  • AI Agent 노드 + Anthropic Chat Model (claude-haiku-4-5) 연결
  • 각 뉴스를 Claude에게 전달 → 영향 지속성, 카테고리, 신뢰도 추출
  • JSON 출력 강제: {"sentiment": -1~1, "category": "earnings|macro|...", "impact": "short_term|long_term", "confidence": 1-5}
  • Claude 분석 결과를 기존 뉴스 행에 컬럼 추가로 저장
  • Alpha Vantage 점수 vs Claude 점수 비교 컬럼 추가

Claude 프롬프트 템플릿 (참고: 부록 D)

System Message:
당신은 금융 뉴스 분석 전문가입니다. 주어진 헤드라인과 요약을 읽고 
투자 관점에서 센티먼트를 판단하세요.

User Message:
Ticker: {{ $json.ticker }}
Headline: {{ $json.title }}
Summary: {{ $json.summary }}

다음 JSON으로만 답하세요:
{
  "sentiment_score": -1.0 ~ 1.0,
  "category": "earnings|macro|product|regulation|other",
  "impact_horizon": "immediate|short_term|long_term",
  "confidence": 1-5,
  "reasoning": "한 문장 근거"
}
💰 비용 주의: Haiku는 저렴하지만 하루 50건 × 2회 = 100건/일 × 30일 = 3000건/월. 토큰당 비용 계산해두기. 학습용 월 $1~2 예상.
채점 기준 (20점 만점)
A. Claude 연결 + 프롬프트 품질6점
B. JSON 파싱 안정성4점
C. Sheets 컬럼 확장4점
D. 두 점수 비교 분석3점
E. 비용 측정 기록3점
🔴 REQUIRED — 과제 3
종합 센티먼트 브리핑 → Discord 발송
배점 20

여러 뉴스를 종합해서 종목별 브리핑을 만들고 Discord로 발송. Aggregate 노드 + Claude Sonnet 활용.

필수 요구사항
  • Aggregate 노드로 뉴스들을 종목별로 그룹핑
  • Claude Sonnet에게 종목별 브리핑 요청 (각 종목 3문장 요약)
  • Discord Embed 형식으로 발송:
    • Title: 🤖 오전 센티먼트 브리핑
    • Fields: 종목별 1필드 (이름 + 점수 + 핵심 이슈)
    • Color: 종합 센티먼트가 +면 초록, -면 빨강, 중립이면 노랑
  • 브리핑 마지막에 "가장 주목할 한 가지" 강조

Discord Embed 예시

{
  "embeds": [{
    "title": "🤖 오전 센티먼트 브리핑 · 2026-04-22",
    "color": 3066993,  // 초록
    "fields": [
      {"name": "AAPL (+0.31)", 
       "value": "WWDC 기대감 + AI 칩 루머", 
       "inline": false},
      {"name": "MSFT (-0.12)", 
       "value": "EU 규제 우려", 
       "inline": false},
      {"name": "🎯 오늘 주목", 
       "value": "NVIDIA 실적 발표 예정"}
    ]
  }]
}
채점 기준 (20점 만점)
A. Aggregate로 종목별 그룹핑4점
B. Sonnet 브리핑 품질6점
C. Embed 색상 동적 결정4점
D. "주목 포인트" 강조 로직3점
E. 모바일 가독성3점
🟣 ADVANCED — 과제 4
센티먼트 × 가격 상관관계 분석
배점 20

"뉴스 센티먼트가 실제 주가와 상관관계가 있는가?"를 데이터로 증명합니다.

필수 요구사항
  • 14일 이상 뉴스 센티먼트 + 주가 데이터 축적
  • Code 노드에서 Pearson 상관계수 계산 함수 작성
  • 센티먼트 점수 vs 다음날 수익률의 상관계수 계산
  • 상관계수가 통계적으로 유의한지 판단 (|r| > 0.3)
  • 결과를 Sheets에 리포트로 정리 + Discord 주간 요약 발송

Pearson 상관계수 함수

function pearson(x, y) {
  const n = x.length;
  const sumX = x.reduce((a,b) => a+b, 0);
  const sumY = y.reduce((a,b) => a+b, 0);
  const sumXY = x.reduce((s, xi, i) => s + xi * y[i], 0);
  const sumX2 = x.reduce((s, xi) => s + xi*xi, 0);
  const sumY2 = y.reduce((s, yi) => s + yi*yi, 0);
  
  const num = n * sumXY - sumX * sumY;
  const den = Math.sqrt((n*sumX2 - sumX*sumX) * (n*sumY2 - sumY*sumY));
  
  return den === 0 ? 0 : num / den;
}
🎓 통계 주의: 14일 데이터로는 통계적 유의성 확보 어려움. 이 과제는 "분석 방법론 학습"이 목적이지, "실제 상관관계 증명"이 아님. 결과가 r=0.1 이면 "유의미하지 않음"을 정직하게 보고.
채점 기준 (20점 만점)
A. 데이터 축적 + 전처리4점
B. Pearson 구현 정확성5점
C. 시각화 (산점도 or 차트)4점
D. 결과 해석 정확성4점
E. 리포트 품질3점
🟣 ADVANCED — 과제 5
2차원 Verdict (W1+W3 통합)
배점 20

W1(가격 변동률) + W3(뉴스 센티먼트) 두 차원을 통합해 2D Verdict를 생성하는 워크플로를 만듭니다. W4의 "3D Verdict" 예고편.

필수 요구사항
  • 두 차원의 시그널 방향 일치/불일치 판정 (4가지 시나리오)
  • 시나리오별 verdict:
    • 가격↑ + 센티먼트↑ → STRONG_BUY
    • 가격↑ + 센티먼트↓ → WATCH_REVERSAL
    • 가격↓ + 센티먼트↑ → BUY_OPPORTUNITY
    • 가격↓ + 센티먼트↓ → AVOID
  • Claude가 2~3문장 근거 생성
  • confidence 점수 포함 (1~5)
  • 3일 이상 실제 verdict 기록
채점 기준 (20점 만점)
A. 두 차원 통합 로직6점
B. 4시나리오 분기 처리4점
C. Claude 근거 생성 품질4점
D. Confidence 산정 합리성3점
E. 3일 데이터 기록3점
Submit

📤 제출 방법 + 기한

⏰ 제출 기한: W4 수업 시작 전까지. 과제 4~5는 W5까지 연장 가능.
📝 W3 HOMEWORK COMPLETE
뉴스 센티먼트 분석 · AI 파이프라인 입문
5 tasks · 100 pt · 4~7 hours
Claude와 협업하는 첫 경험