작년부터 수입이 생기다보니 자연스럽게 재테크에 관심을 가지게 되었다. 그리고 대부분의 사람이 그러하듯, 주식에 관심을 가지고 fundamental 분석, 재무정보 분석, 그리고 심지어 차트 분석 기술 등 이런저런 것들을 기웃거려보았다.

주식 투자에 대한 흥미로운 내용을 빙자한.. 내 논문 홍보글입니다.

그리고 정말 많은 곳에서, 주식 가격을 예측할 수 있다고 광고하는 걸 보았다 (그리고 대부분 그 예측 정보를 제공한다며 돈을 받더라).

나는 지난 주가의 변화를 분석함으로써 앞으로의 주가 예측을 더 잘할 수 있다고 생각하지 않는다. 아니 애초에 주식 가격을 예측하는 것은 불가능하다고 생각한다.

물론 내가 잘 알지 못하는 영역이니까, 주가 예측에 관한 깊은 이론/이야기가 있을지도 모르겠다. 예를 들어, 뉴스 기사를 분석해서 주가 예측을 하는 것은 될 것 같다.. (그리고 그런 연구도 있다) 어쨌든 나는 주가를 포함한 차트만을 이용해서 주가 예측을 하는 것은 거의 불가능하다고 생각한다.

하.지.만.

지난 과거의 주가 변화 데이터를 이용해서, 어떤 기업들의 주가가 비슷한 경향을 보였는지는 나름 괜찮은 정보가 아닐까? 하고 생각이 들어서, 작은 프로젝트를 시작했다. 기업들간의 (내가) 잘 몰랐던 관계가 주가의 유사성으로 드러나지 않을까 하는 기대와 함께. 재미삼아서 시작한 이 작은 프로젝트의 목표는 아래와 같았다.

목표

(1) 코스피에 상장된 회사들의 주가 동향을 딥러닝 모델을 이용하여 Embedding한다.

(2) Embedding을 적당히 잘 시각화하여 어떤 회사들끼리 비슷한 주가 변화를 보였는지 확인한다.

(3) 서로 다른 동향을 보이는 회사들의 주식들을 구매하여 파워 분산투자 (하나가 오르면 하나가 내리는.. 우산장수, 소금장수 포트폴리오)

방법

LSTM 모델에 학습가능한 초기값 (Trainable Initial Hidden States)를 붙여서 이용했다. LSTM이든 RNN이든 첫번째 (t=1) time step의 hidden, cell states를 계산할 때, 그 전 (t-1, 즉 t=0일때) hidden, cell states 값이 필요하다. 보통 이 값들은 randomize해서 쓰지만, 이 프로젝트에서는 이 값들을 학습을 통해서 획득하도록 하였다. 특히, 각 시퀀스마다 고유의 initial hidden states값들을 배우도록 - embedding하도록 - 하였다. Please see my arXiv paper for more details.

결과

학습하기 전의 Initial Hidden States를 그려보았다. 색상은 해당 회사가 속한 산업군 (industrial sector)이다. 학습에는 735개 회사들이 사용되었지만, 시인성을 위하여 KOSPI50에 있는 회사들만 이름을 적었다. 학습하기 전에는 Latent Space상에서 각 회사의 representation들이 Random하게 분포된 걸 볼 수있다.

학습하기전의 Initial Hidden States. 랜덤하게 분포되어 있다.학습하기전의 Initial Hidden States. 랜덤하게 분포되어 있다.

학습 한 후의 Initial States. 동종업계 주식들이 모여있는 경우도 보이지만 딱히 큰 연관성은 없어 보인다.

학습 후의 Initial Hidden States.학습 후의 Initial Hidden States.

주식 가격 변화가 얼마나 연관성이 있을지 확인해보았다. 이를 위해 특정 회사를 하나 선택하였다 (또하나의 가족 삼성전자). 그리고 지난 1년간 삼성전자의 주가 변화와 나머지 734개 회사들의 주가 변화량간의 correlation을 측정하였다. 그리고 correlation coeffcient를 이용하여 각 주식들의 색상을 표현하였다. 하얀색에서 파란색으로 갈수록 , 주가 동향이 상이함을 뜻한다.

삼성전자는 빨간색으로 표시되어 있다. 색깔은 삼성전자 주식과의 correlation coefficient를 나타낸다.삼성전자는 빨간색으로 표시되어 있다. 색깔은 삼성전자 주식과의 correlation coefficient를 나타낸다.

시각화를 하니, 확실히 어떤 회사들이 서로 비슷한 동향을 보였는지 잘 보인다. 위 그림에서 보이는 것처럼 잠재공간의 비슷한 곳에 위치한 주식들은 서로 비슷한 주가 동향을 보인다. 분산 투자를 위해서는 서로 다른 동향을 보이는 애들로 포트폴리오를 구성하면 되겠지. (그리고 한 방을 위해서는 비슷한 동향을 보이는 애들로 몰빵을..)

그래서 분산투자?

아직 이 프로젝트에서 분석한 방법으로 분산투자를 하지는 못하고 있다. 시총규모라던지, lagged correlation이라던지 하는 것을 조금 더 고려해서 실제로 해볼 생각이다 (근데 백만원도 분산투자하는게 맞는건가)

사실은..

주식 그 자체보다는 다양한 time series 데이터가 LSTM + Initial States로 represent 될 수 있고, 이를 이용하여 time series간의 similarity 비교라는 제법 tough한 task에 사용될 수 있음을 보여주고 싶었다. stock data는 그 예중에 하나였고..

마무리

마무리는 주식에 관한 오랜 격언으로 마친다.

“10월은 주식투자에 있어서 특히 위험한 달 중 하나다. 다른 위험한 달로는 7월, 1월, 9월, 4월, 11월, 5월, 3월, 6월, 12월, 8월, 그리고 2월이 있다.” - 마크 트웨인

이 말은 실제로 마크 트웨인의 얼간이 윌슨 (Pudd’nhead Wilson)에 등장하는 말이라고 한다. 그리고 이 말에서 비롯한 마크 트웨인 효과 (Mark Twain effect) - 10월이 다른 달보다 주가가 낮은 현상 - 란 말도 있다.

이 프로젝트에 사용했던 코드는 아래 github에서 다운로드 받을 수 있다.

https://github.com/mulkkyul/lstm-initStates