[프로젝트] KOSPI 주가지수 예측

JaeGwon-Lee·2024년 9월 2일

프로젝트

목록 보기
6/17

개요

KOSPI 주가지수 예측 CNN 모델 개발

  • 시계열 데이터의 이미지화 활용
  • 시계열 데이터 분석 + 이미지 데이터 분석
  • MTF 기법을 활용하여 시계열 데이터를 이미지화
  • ResNet을 활용하여 KOSPI 주가지수 예측

팀 프로젝트
제2회 전남대학교 통계학과 빅데이터 경진대회
발표자료 & 코드   [GitHub]

기간

2021.01 ~ 2021.02


역할

  • EDA
  • 데이터 전처리
  • ResNet 모델 실험

분석 목표

KOSPI 주가지수의 시계열성을 바탕으로 CNN 모델을 활용하여 다음날의 주가지수를 3개의 클래스로 분류하여 예측한다.

  • 이미지 인식 분야에서 좋은 성능을 보이는 딥러닝 모델인 CNN을 시계열 데이터에 적용한다.
  • 일반적으로 시계열 분석에는 RNN이 적합하다고 알려져 있지만, CNN을 활용한 시계열 분석 연구 또한 진행되고 있다.
  • CNN 모델의 활용은 비교적 적은 매개변수를 필요로하고, 결과에 대한 해석이 시각적으로 가능하다는 장점 존재한다.

선행 연구

기술적 지표와 기계학습을 이용한 KOSPI 주가지수 예측   [Paper]

박재연, 유재필, 신현준, 2016, 정보기술아키텍처연구

  • KOSPI200 지수에서 파생된 기술적 지표들을 사용하여 SVM으로 주가지수 예측
  • Target : (buy, hold, sell)
  • test accuracy : 0.55

딥러닝을 이용한 주가예측   [Paper]

이지훈, 2016, 숭실대학교 석사학위 논문

  • KOSPI 상위 20 종목에 대해 기술적 지표들을 사용하여 RNN으로 주가 예측
  • Target : (Up, Down)
  • test accuracy : 0.53

강화학습을 이용한 주가 예측   [Paper]

이보미, 2018, 한양대학교 석사학위 논문

  • KOSPI200 지수의 종가, 시가에 대한 파생변수들을 사용하여 강화학습으로 주가지수 예측
  • Target : (Up, Down)
  • test accuracy : 0.53

데이터 분석 및 전처리

KOSPI 주가지수

주가 지수는 외부적인 영향을 많이 받고, 매우 불규칙적이다. 특히, 코로나의 영향으로 주가지수 급락한 구간이 존재하고 이후에는 주식투자 열풍으로 급상승한 구간 또한 존재하므로 예측에 어려움이 예상된다.

Target 설정

A hybrid stock trading framework integrating technical analysis with machine learning techniques, Rajashree Dash, Pradipta Kishore Dash, 2016, The Journal of Finance and Data Science

위 논문을 참고하여 주가지수의 추세를 3가지로 분류하고, 예측할 Target 값을 설정하였다.

UpTrend : 종가가 MA보다 큼  &  5일간 MA가 계속 증가한 상태
DownTrend : 종가가 MA보다 작음  &  5일간 MA가 계속 감소한 상태
Boxed : 그 외

  cf )  MA : 15일간 종가의 이동평균

전처리

  • 5년간의 데이터를 7 : 3 으로 나누어 Train과 Test로 분리하였다. (기준 : 2019-07-05)
  • MinMaxScaler를 이용하여 최소값을 0으로, 최대값을 1로 정규화하였다.

ResNet

CNN (Convolutional Neural Networks)

  • 공간적 특성을 추출할 수 있는 Convolution Filter 연산을 통해 이미지의 특징을 추출한다.
  • 입력데이터를 필터가 순회하며 합성곱을 계산하고, 그 계산 결과를 이용하여 Feature map을 만든다.
  • 필터를 사용하기 때문에 일반적인 DNN보다 상대적으로 파라미터의 개수가 적다.
  • 주로 이미지나 영상 데이터를 처리할 때 쓰인다.

ResNet (Residual Network)

  • ResNet은 이미지 인식 경진대회인 ILSVRC에서 우승한 모델이다.
  • 잔차(Residual)를 최소가 되도록 학습시킨다.
  • 층의 개수에 따라 ResNet-18/34/50/101/152가 있다.
  • Pytorch에서 제공하는 라이브러리 이용한다.


GAF / MTF

GAF (Gramian Angular Field)

  • Temporal Correlation Matrix를 생성하고, arccos을 사용하여 시계열의 극좌표를 계산한다.
    • GASF(Gramian Angular Summation Field) : 각도 합계의 Cosine
    • GADF(Gramian Angular Difference Field) : 각도 차이의 Sine

GAF 변환 ( UpTrend / DownTrend / Boxed )


MTF (Markov Transition Field)

  • 시계열을 bin으로 나누고, 나눠진 시계열의 Markov Transition Matrix를 계산한다.
  • 시간 정보 손실을 줄이기 위해 전이 행렬을 필드로 분산한다.

MTF 변환 ( UpTrend / DownTrend / Boxed )


GAF와 MTF, 두 기법 중 실험을 통해 더 좋은 성능을 보여준 MTF를 선택하였다.


모델링

3 Channel (종가, 고가, 저가)

주식시장에서 중요하게 사용되는 캔들 차트에서 아이디어를 얻어, 종가, 고가, 저가를 각각 한 채널로 하여 분석하였다. 그런데 예측 결과가 편향되는 문제 발생하였다. 이는 3개의 채널을 통합하면 이미지 간 특징의 차이가 분명하지 않아서 발생하는 문제로 추정된다.

1 Channel (종가)

  • 32일간 KOSPI 주가지수의 종가를 MTF 기법을 이용하여 32 x 32 size의 이미지 생성하였다.
  • Pytorch에서 제공하는 ResNet-18 모델로 학습하였다.
  • ResNet-18의 첫번째 Convolutional layer를 Channel 1개로 변형하였다.

모델 학습

  • Loss Function : Cross Entropy Loss
  • Optimizer : Adam
  • Google Colaboratory GPU 환경에서 Pytorch를 활용하였다.


결과

실제 Target 값과 예측한 Target 값

두번째 그래프에 표시된 파란색 박스 부분은 예측이 잘 되었지만, 빨간색 박스 부분은 예측이 잘 되지 않았다. 첫번째 빨간색 박스에서는 박스권에서 상승하기 시작하는 추세를 잘 잡아내지 못했고, 두번째 박스에서는 코로나로 인해 급락한 추세를 파악하지 못했다.

이는 다른 외부 변수 없이 KOSPI 주가지수의 시계열 정보만을 가지고 예측한 것이므로 과거 추세에 많은 영향을 받는 것으로 추정된다. 이로 인해 과거와 다르게 변화하는 부분을 잘 잡아내지 못하는 모습을 확인할 수 있었다. 따라서 주가지수에 영향을 미치는 외부 요인들을 함께 학습시킨다면 더욱 정확한 예측이 가능할 것으로 예상된다.

선행 연구와 비교

  • SVM으로 3개의 클래스 분류 : 0.55
  • RNN으로 2개의 클래스 분류 : 0.53
  • 강화학습으로 2개의 클래스 분류 : 0.53

    →  선행 연구에서는 시계열 분석 뿐만 아니라 주가지수에서 파생된 기술적 지표들을 함께 활용하였다.

반면에 본 연구에서는 주가지수의 시계열적인 특징만을 바탕으로 3개의 클래스를 분류하여 0.50의 성능을 보여주었다. 종가의 시계열 정보가 미래의 주가지수를 예측하기에는 부족한 것으로 판단된다.

" 주식시장에서는 복리로 수익이 쌓이기 때문에 2개의 클래스를 분류하는데 51%를
초과하는 승률도 의미가 있다. "
(허준영, 양진용, "SVM 기반의 재무 정보를 이용한 주가 예측". 2015)

하지만 위 논문에서 언급한 것처럼 주식시장에서는 51%의 예측 성능도 유의미하므로 외부 변수들을 추가하여 모델을 조금 더 발전시키면 유의미한 예측 모델이 될 것으로 보인다.


활용성

주식시장 예측의 보조적인 수단

주식시장은 외부적인 영향이 크기에, 머신러닝 모델이 절대적인 방법은 될 수 없다. 하지만 주식시장에서의 의사결정을 도와주는 보조적인 역할이 가능하다.

시각적 해석

CAM (Class Activation Map)

  • 클래스 분류에 얼마나 영향을 주는지에 대해 히트맵으로 표현한다.
  • 다른 머신러닝 모델들과는 달리 CNN은 CAM을 이용하여 어느 시기의 주가지수를 보고 Trend를 판단했는지 알 수 있다.  →  결과에 대한 해석이 시각적으로 가능하다.
  • 결과에 대한 근거를 알 수 없는 머신러닝의 문제점인 Black Box 문제를 해소할 수 있다.


향후 계획

경제적 지식 활용

  • 주식시장에 대한 지식이 없어서 분석에 이를 활용할 수 없었다.
  • 주식시장에서 사용되는 경제적인 지식을 공부한 후 이를 활용하여 Target 변수와 이미지 size를 알맞게 조절하여 성능을 개선해보고 싶다.

모델 개선

  • ResNet 모델은 224 x 224 이미지 분류에 최적화되어 복잡도가 높다.
  • 주가예측에 적합하도록 조금 더 가벼운 모델을 직접 설계하면 더 좋은 성능이 기대된다.

CAM 모델 사용

  • CAM 모델을 공부하여 이 분석에 적용해보고, 어떤 시기를 중심으로 주가지수 예측이 이루어졌는지 알아보고 싶다.

성과 및 배운점

최우수상 (1위)

이번 프로젝트에서는 시계열의 이미지화와 CNN 모델에 집중하였고, 시계열 데이터를 제외한 외부 변수들은 활용하지 않았다. 하지만 주가지수는 경제적 상황이나 금리, 기업 뉴스 등에 많은 영향을 받기 때문에 예측 성능에 한계가 존재하였다. 시계열 정보만으로 0.50의 정확도를 보였으므로 외부 변수들을 함께 학습시킨다면 유의미한 성능 향상이 기대된다.

딥러닝 모델을 이번 프로젝트에서 처음으로 사용해보았다. 아직은 딥러닝에 대한 이해가 초보 수준이라서 모델 코드와 관련해서 팀원인 선배의 도움을 많이 받았다. 그리고 ResNet에 대한 낮은 이해도로 인해 모델을 100% 활용하지 못한 것 같아서 아쉬웠다. 다음에는 내가 주도해서 딥러닝 모델을 제대로 구축해보고 싶다.

0개의 댓글