Skip to content

About

개장 전 공개 정보와 과거 수익률 분포를 활용한 5등급 주가 방향 예측 프로젝트

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stock Direction Prediction

개장 전 공개 정보만으로 당일 주가 등락을 5개 등급으로 예측한 Business Analytics 팀 프로젝트

Overview

  • Task: 전일 종가 대비 당일 종가 등락을 5개 등급(급하락·하락·보합·상승·급상승)으로 예측
  • Universe: 50개 종목
  • My role: 예측 구조 설계, 최종 모델 구현, 코드 정리 및 검증
  • Tech: Python, pandas, NumPy

Problem

전일 일봉만 사용하면 장 마감 이후부터 개장 전까지 이미 발생한 가격 변화가 충분히 반영되지 않습니다.

따라서 단순히 과거 종가 수익률만 보는 대신,

  1. 현재까지 실제로 관측된 장전 가격 변화
  2. 과거 각 날짜에서 장전 이후 종가까지 남아 있던 수익률의 경험분포

를 결합해 당일 등락 확률을 계산했습니다.

핵심은 이미 발생한 변화와 아직 남아 있는 불확실성을 분리해 예측하는 것이었습니다.

Key Decisions

1. 개장 전 정보 반영

pre_gap과 post_gap을 사용해 전일 장 마감 이후부터 예측 시점까지의 가격 변화를 반영했습니다.

2. 잔차의 경험분포 활용

과거 장전 이후 남은 수익률을 잔차로 정의하고, 그 경험분포를 이용해 5개 등락 구간의 확률을 계산했습니다.

3. 변동성의 방향성 분리

상승·하락 방향의 변동성이 다를 수 있어 error_down60, error_up60을 별도로 계산했습니다.

4. 과제 평가 기준 반영

단순 정확도만 최대화하지 않고, 반대 방향의 큰 오분류를 더 크게 반영하는 과제의 비대칭 비용을 최종 의사결정에 반영했습니다.

Feature Set

Feature Description
pre_gap 개장 전 마지막 가격과 전일 종가의 차이
post_gap 전일 시간외 가격 변화
rv20 최근 20거래일 종가 수익률 변동성
intra_vol20 최근 20거래일 장중 수익률 변동성
error_vol20 과거 장전 이후 잔차의 최근 변동성
error_down60 최근 60개 잔차의 하락 방향 변동성
error_up60 최근 60개 잔차의 상승 방향 변동성

Preventing Look-ahead Bias

예측 시점 이후의 정보가 입력에 포함되지 않도록 데이터 사용 시점을 코드에 명시적으로 반영했습니다.

  • 입력 데이터는 known_at < cutoff를 만족하는 경우만 사용
  • 당일 종가와 정답(label)은 피처 생성 과정에서 사용하지 않음
  • 09:30에 완성되는 장전 봉 역시 예측 입력에서 제외
  • 과거 잔차 계산에서도 각 과거 날짜 당시 개장 전에 확인 가능한 가격만 사용

Results

2026-06-01 ~ 2026-09-14의 73거래일, 50종목 3,650건에 대한 후향 평가 결과입니다.

Metric Result
Assignment score 0.5943
Baseline score 0.1492
Score improvement +0.4451
5-class accuracy 25.67%
Direction accuracy* 63.14%

* 실제 보합을 제외하고 상승/하락 방향만 비교한 값

이 구간은 모델 개발 과정에서 이미 확인한 적이 있는 retrospective evaluation interval이며, 완전히 미사용한 독립 최종 테스트셋으로 해석하지 않습니다.

Validation

최종 모델을 정리한 뒤에는 단순히 코드가 실행되는지만 확인하지 않고, 정리 전후에도 동일한 입력과 예측 결과가 유지되는지를 별도로 검증했습니다.

  • 522거래일 × 50종목 = 26,100행에서 입력 피처 비교
  • 기존 코드와 정리본의 7개 피처 및 가용성 확인 변수 일치 여부 점검
  • 평가용·제출용 모델의 예측 결과 일치 여부 확인
  • 미래 시점 데이터를 의도적으로 주입해도 피처와 예측이 변하지 않는지 검사
  • 데이터가 부족한 종목·시점에 대한 예외 처리 확인

26,100행은 정답을 맞힌 개수가 아니라, 코드 정리 전후의 입력과 예측 동작을 비교한 행 수입니다.

자세한 검증 항목은 docs/validation_summary.md에 정리했습니다.

Repository Structure

.
├── README.md
├── src/
│   └── model.py                 # 최종 피처 생성 및 예측 로직
├── notebooks/
│   └── model_overview.ipynb     # 모델 구조와 평가 결과 요약
├── evaluation/
│   └── metrics.json             # 평가 지표 및 confusion matrix
└── docs/
    ├── validation_results.json
    └── validation_summary.md    # 코드 정리 전후 및 누출 방지 검증 요약

Notes

이 저장소는 포트폴리오용 정리본입니다. 수업에서 제공된 원본 데이터, 평가 프레임워크, 교수자 제공 예제 코드, 학습된 바이너리 모델 파일은 재배포하지 않았습니다.

팀 프로젝트의 결과를 소개하되, 위 My role에 기재한 범위는 제가 직접 설계·구현·정리·검증한 부분입니다.

About

개장 전 공개 정보와 과거 수익률 분포를 활용한 5등급 주가 방향 예측 프로젝트

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages