Overview
개인 프로젝트 · 2026.07~ · 데이터 분석 · 파이프라인
"미국이 관세를 올려서 주가가 떨어졌다" 같은 말을 실제로 얼마나·며칠이나 움직였는지 숫자로 검증하는 한국 증시 분석·예측 시스템을 구축했다.
- 수집 — KRX(지수·수급·업종), 야후파이낸스(해외지수·환율), FRED(금리·유가·달러), GDELT(뉴스 톤)를 매일 수집(시세·수급·매크로 23종, 2015~현재 약 2,800거래일)
- 이벤트 DB — "어떤 날 어떤 사건이 있었나"를 전 건 출처 URL과 함께 11개 분류로 정리(139건). 실측 KOSPI와 대조해 반응 크기를 교차검증(예: 2026-06-23 폭락 −9.99%)
- 이벤트 스터디 — 사건 전후로 주가가 평소 대비 얼마나 움직였는지 시장모델 AR/CAR + t검정으로 계산. "한국 증시는 전날 미국장을 따라간다"는 공통등락을 회귀로 제거하고 유의성까지 판정
- 예측·백테스트 — 다음날 방향 예측 65.2%(베이스라인 +9.1%p, AUC 0.70) 를 만들되, 체결 모델을 정밀화하자 초과수익이 사라지는 시장효율성을 정직하게 실증
- 전략 검증 — 이벤트 직후 초과수익 기회를 실매매 규칙으로 검증(반도체 로테이션·방산 통념·부동산 업종효과) — 되는 것과 안 되는 것을 판정과 함께 공개
- 산출물 — 분석 대시보드(7화면)·M3 현황판·주간/월간/연간 리포트(전략 신호 포함)
- 운영 — GitHub Actions 매일 자동 실행(평일 18:00 KST) + 로컬 보완(KRX 수급 18:30)의 하이브리드 구조·Vercel 배포
- Skill: 데이터 수집·파이프라인 설계, 이벤트 스터디(계량 분석)·유의성 검정, 예측 모델·현실적 백테스트, 자동화(CI 스케줄)·클라우드 배포
- Stack: Python·pandas·numpy·scipy·statsmodels·scikit-learn, KRX·yfinance·FRED·GDELT, Mermaid·Material Design 3, GitHub Actions·Vercel
Problem
"뉴스가 주가를 움직였다"는 말은 흔하지만, 얼마나·며칠이나 움직였는지는 대개 감으로만 이야기된다. 단순히 "사건 다음 날 올랐다"고 세면, 그날 시장 전체가 오른 것인지 그 사건 때문인지 구분할 수 없다. 나아가 "그럼 그 패턴으로 돈을 벌 수 있나"는 대개 비용을 뺀 백테스트로 좋은 숫자만 보여준다.
이벤트 스터디 · 시장모델 · 정직한 검증 — 시장 전체 흐름으로 설명되는 부분을 걷어내 사건이 만든 초과등락(AR/CAR) 만 남기고, 예측과 전략은 비용·우연·미래정보 누출까지 통제해 "실제로 되는가"를 판정한다.
Solution
- 원본 보존형 파이프라인 — 수집한 원본은 손대지 않고 저장(
raw), 전처리는 다음 단계에서. 로직을 바꿔도 재수집 없이 재처리 - 이벤트 반영일 보정 — 장 마감 후·휴장일·미국 발표 사건은 다음 영업일에 반영되므로 시장 반영일을 보정해 앞뒤 창을 맞춘다(139건 중 절반가량 보정). 비상계엄은 보정 전 +1.9%(선포 전 낮의 무관한 상승) → 보정 후 −1.4%로 바로잡힘
- 시장모델 이벤트 스터디 — 개별 지수의 초과수익률을 시장모델(KOSPI∼전일 S&P500 회귀)로 추정, 사건 창(−5~+10일)의 AR을 누적(CAR)하고 t검정으로 유의성 판정. KOSDAQ은 나스닥 요인 제거, 업종 17종·섹터 대표 8종목은 "같은 날 시장 대비 초과반응"으로 확장
- 예측 모델 + 현실적 백테스트 — "당일 아침에 실제로 알 수 있는 정보만" 원칙의 피처 설계 + 워크포워드 검증. 백테스트에 편도 비용·룩어헤드 방지를 반영해 예측 정확도가 초과수익으로 이어지는지까지 검증
- 전략 자동 재검증 — 발견한 이벤트 패턴을 실매매 규칙(t+1 진입)으로 옮겨, 새 이벤트가 쌓일 때마다 통계를 자동 갱신하고 과열 필터·유의성 강등을 반영
- 자동화·게시 — 매일 수집→분석→대시보드→리포트를 GitHub Actions로 자동 실행, 결과를 저장소에 자동 커밋하고 Vercel이 재배포. 금요일에는 이벤트 후보를 출처 검증해 DB에 반영하는 검토 루프가 돈다. 주간/월간 리포트는 개인 사이트 Observatory에 자동 게시
Result
- 시세·수급·매크로 23종을 매일 수집하고, 출처 검증된 이벤트 139건을 11개 분류로 구조화
- 시장모델 기반 AR/CAR + t검정으로 "사건이 정말 가격을 움직였나"를 정량·유의성으로 판정 — 글로벌 위기 열흘 −4.23%(p=0.023) 가 가장 확실한 악재, 전쟁은 당일 −3.9% 급락 후 열흘 내 거의 회복, 대선·총선 +3.95%, 반도체 사이클 +2.10%(p=0.018)가 유의. 금리 결정은 미국·한국 모두 유의한 반응 없음(사전 반영)
- 예측 65.2%·백테스트로 시장효율성 실증 — 다음날 방향 65.2%(베이스라인 대비 +9.1%p, AUC 0.70)를 얻었으나, 신호 수익을 분해하니 밤사이 갭 +0.54% / 개장 후 장중 −0.02% — 정보력은 진짜지만 거래 가능 시점 이전에 이미 가격에 반영됨. v2 백테스트에서 모든 전략이 매수후보유에 열위. "일 단위 공개 정보로는 시장 타이밍 초과수익이 불가능"하다는 교과서적 확인
- 전략의 옥석 가르기 — 반도체 이벤트 → 전기전자 매수는 과열 필터를 붙일 때만 조건부 유효(승률 89~90%, p≈0.01), "전쟁 나면 방산주" 통념은 t+1 진입으로 무효, 부동산 대책은 시장 무반응이지만 건설 업종 −3.77%p로 "업종 이벤트". 매일 예측은 시장·업종 모두 실패하고 "검증된 이벤트 직후 며칠"이라는 창에서만 초과수익이 존재
- M3 현황판·분석 대시보드(7화면)·정기 리포트를 자동 생성·배포, GitHub Actions + 로컬 보완의 하이브리드로 매일 무인 운영(단일 실패점 없음)
- 이 방법론(이벤트 스터디·매크로·현실적 백테스트)은 이후 COCOMSS의 크립토 이벤트 분석으로 이식
Retrospective
감을 숫자로 — "뉴스가 주가를 움직였다"는 통념을 시장모델·유의성 검정으로 검증 가능한 형태로 바꿨다. 계량 분석에서 가장 중요한 건 화려한 모델이 아니라 공통등락을 걷어내는 통제임을 확인했다.
가장 값진 건 부정적 결과 — 예측 정확도 65%를 만든 뒤 그것을 백테스트로 검증하자 초과수익이 사라졌다. 신호의 정보력이 개장 갭에 이미 반영된다는 것을 수익 분해로 증명했고, 이 "시장효율성의 실증"이 화려한 성과 곡선보다 값진 결과였다. "맞힐 수 있다"보다 "어디까지는 못 벌린다"를 아는 것이 신뢰의 출발이었다.
분석을 시스템으로 — 일회성 노트북이 아니라, 매일 스스로 도는 파이프라인으로 만들며 수집·보정·분석·예측·게시의 데이터 흐름 전체를 설계했다. 클라우드가 막는 KRX 수급은 로컬이 보완하는 하이브리드로 단일 실패점을 없애고, 이벤트 후보 감지→주간 검토→자동 재검증까지 데이터 품질 관리를 운영 루프에 넣었다.
Links
이어진 프로젝트 — 이벤트 스터디·매크로·현실적 백테스트 방법론이 COCOMSS로 이식됐다.
