Stock Market Prediction Based on Generative Adversarial Network - 리뷰

2020. 4. 9. 22:08관심있는 주제/GAN

728x90

주식 시장 예측은 경제 분야에서 가장 가치 있는 분야이다. 이 논문에서는 GAN이라는 새로운 아키텍처를 제안했다.
주식들의 종가를 예측하기 위해 generator로 LSTM을 제안하고 discriminator로는 mlp를 사용했다는 논문이다.

generator는 주식 시장에서 주어진 데이터로부터 주식들의 데이터 분포를 발견하기 위해 LSTM으로 고안됐다. 
반면에 discriminator는 실제 주가와 생성 데이터를 판별하기 위한 목적으로 MLP를 사용했다. 여기서는 S&P 500 Index를 사용했고, 매일 종가를 예측하는 방법을 사용했다.

이 논문이 기여한 점은 다음과 같다.

  • Generator는 LSTM / Discriminator는 MLP를 사용함. 과거 데이터를 통해서 매일 종가를 예측했다.
  • adversarial learning system을 통하여 주식 분포를 생성하기 위해 노력했다.

Generator

저자는 주식 7개 요인을 사용했다. 

High Price, Low Price, Open Price, Close Price, Volume, Turnover Rate and Ma5 (the average of closing price in past 5 days)
  • High Price
  • Low Price
  • Open Price
  • Close Price
  • Volume
  • Turnover Rate
  • Ma5 (the average of closing price in past 5 days). 

generator는 fully connected layer로 7개의 뉴런을 만든다 $\hat x_{t+1}$
$\hat x_{t+1}$로부터 $\hat x_{t_1, Close}$를 얻는다. 

과적합을 피하기 위해서 정규화 방법으로 dropout을 사용했다고 한다. 
여기서는 $\hat x_{t+1}$ 를 새로 만들기 때문에, $\hat x_{t+2}$를 만들기 위해서 $\hat x_{t+1}$와$x$를 이용해서 만들 수 있게 된다. 

Discriminator

discriminator의 목적은 인풋을 구별하기 위해서 미분 가능한 함수 D를 구축한다. 여기는 3개의 layer를 사용했다
$h_1, h_2 , h_3 = (72,100,10)$ 그리고 활성화 함수도 leaky_relu를 사용했다고 한다. 그리고 마지막에는 sigmoid를 사용했다. 

$$ X_{fake} = x_1, x_2,..., x_t, \hat x_{t+1}$$

$$ X_{real} = x_1, x_2, ,,, , x_{t} x_{t+1}$$

 

여기 아래 그림에서는 실제 GAN과 큰 차이는 없지만, mse loss를 generator에 추가한 것과 $lambda$를 통해서 조절한다는 것이 조금 다른 것 같다.

그림 3을 봤을 때 $\hat x_{t+1}$ 와 $x_{t+1}$ 만 넣지 않고 $x_0, x_1 ,... x_t$까지 넣는 이유는 $x_{t+1}$와 $X$사이에서 시계열적인 정보와 상관관계를 discriminator가 포착하길 기대하기 위해 저런 식으로 구성했다고 한다.

그림 3

실험

the Standard & Poor’s 500 (S&P 500 Index), Shanghai Composite Index in China, International Business Machine (IBM) from New York Stock Exchange (NYSE), Microsoft Corporation (MSFT) from National Association of Securities Dealers Automated Quotation (NASDAQ), Ping An Insurance Company of China (PAICC). 를 데이터로 사용함.

좋은 결과를 얻기 위해서는 정규화는 필요하고 핵심이다. 
위에서 언급한 MAR 가정에서 데이터를 다음과 같이 정규화했다고 함.

$$x_i = \frac{x_i-\mu^t}{\tau^t}$$

$\mu^t$ 와 $\tau^t$ 는 $X$의 평균과 표준편차이다.$$ 여기서 $t=5$는 경험적으로 선택했다. 왜냐하면 과거 1주를 가지고 다음 날을 예측하기 위해 노력하는 것이다. 데이터를 정규화하기 위해서 5개의 날에 대해서 평균과 표준 잔차를 계산했다고 함. 그다음에 6번째 날을 예측하기 위해서 정규화된 데이터를 사용한다고 한다.

저자는 train : 90%~95% / test : 5%~10%(250-500)으로 썼다고 함.

4개의 Metric(MAE, RMAE, MAE, AR)을 사용했다고 함. $\hat y_k$와 $y_k$를 비교함.

실제 실험해 보니 GAN이 제일 좋다고 역시 주장함.

내 생각

개인적으로 GAN 방법론을 적용하는 것에 대한 고민이 있었는데, 이런 논문을 보게 돼서 기쁘다. 
실제로 이 논문과는 다르게 좀 더 쉬운 버전으로 구현해봤는데, 먼가 좋은 점이 확실히 있다. 하지만 개인적으로 궁금한 것은 GAN의 목적은 비슷하지만 다른 데이터를 만드는 것인데, MSE가 작다고 해서 잘 학습한 건지는 의문이고, 그냥 예측하는 모델을 만들게 된 것 같다는 생각도 든다.
저자도 정규화가 중요하다고 다시 한번 느낀다. 왜냐하면 원래 쉬운 방법으로는 전체 데이터의 minmax scale을 조절해서 진행되는데, 이렇게 하다 보면, test에 있지만, train에는 없는 out of distribution에 대해서는 잘 못 맞추는 경우를 발견했기 때문이다. 그래서 MAR를 가정으로 한 정규화 방법은 이전 시점을 가지고 해서 장점이긴 한 것 같다. 그러나 만약 하루 뒤가 아닌 한 달을 예측한다고 했을 때도 이러한 방법이 적절하지는 않을 것 같다. 암튼 재밌는 논문을 읽게 됐다! 

 

https://www.sciencedirect.com/science/article/pii/S1877050919302789

불러오는 중입니다...

 

728x90