2021년 9월 10일 금요일

PR402 - 9: Accurate Multivariate Stock Movement Prediction via Data-Axis Transformer with Multi-Level Contexts

 오늘 리뷰할 논문은 Accurate Multivariate Stock Movement Prediction via Data-Axis Transformer with Multi-Level Contexts(Yoo et al., 2021)입니다.

AI 분야 탑티어 컨퍼런스 중 하나인 KDD 2021 논문인데 지인분의 소개로 읽어보게 되었습니다. 글을 읽는 분들께 소개드리려는 목적보다는 제 정리차 적어놓은 글임을 먼저 밝힙니다 :)

서울대 강유 교수님 연구팀에서 써낸 논문이고, 강유 교수님께서 창업하신 딥트레이드의 근간이 되는 알고리즘을 요약해놓은 논문입니다. 

Link - https://dl.acm.org/doi/abs/10.1145/3447548.3467297


Intro:

말 그대로 주가 움직임을 예측하는 아키텍쳐인 DTML을 소개하고 있습니다. 논문을 읽으면서 몇 가지 의구심이 들었는데, 해당 의구심들만 잘 정리된다면 참 매력적인 Experiment results를 보여주고 있습니다. 총 4가지로 나누어 모델의 성능을 보여줍니다. 첫째는 방향 예측 정확도, 둘째는 백테스팅 결과, 셋째는 어텐션 맵의 해석, 넷째는 각 모듈의 기여도입니다. 

그럼 한번 살펴보겠습니다.


Contents:

아키텍쳐를 간단히 요약하자면 Transformer 기반 모델입니다. 인풋으로는 stock들의 daily price (open, high, low, close, adj_close)정보와 매크로 정보인 market index정보를 받아서 주가 움직임을 예측하는데 사용합니다. 우선 어텐션 기반 모델이라는 점은 굉장히 마음에 듭니다. 'Attention is all you need'라는 말답게 저 또한 SOTA 모델이라면 어텐션을 사용해야지! 하는 어텐션 신봉자인데요, context vector를 만들어내는 layer부터 concatenate된 layer를 통해 최종 output을 만드는 layer까지 전부 어텐션을 적극적으로 차용하고 있습니다. 그림은 다음과 같습니다. 


의구심 1: 아키텍쳐에서 조금 우려되는 점이라면, Context vector를 만드는 과정에서 market index와 individual stock이 인풋으로서 각각 exclusive하게 사용된다는 점입니다. Market index를 넣어준 것 자체가 everyday stock movement와의 correlation을 고려해주기 위함인데, serial한 정보가 아무리 context에 녹아들어있다고 하더라도 이를 따로따로 고려해서 나중에 aggregate를 하는 것보다 context 생성 단계에서 같이 고려해주면 좋을 것 같다는 생각을 했습니다.

아무튼, DTML은 위와 같이 구성되는데, DTML을 통한 백테스팅 결과는 다음과 같습니다.

모든 시뮬레이션에서 가장 좋은 수익률을 보이고 있습니다. 백테스팅은 매일 장이 끝나고 나서 prediction을 한 후, 다음날 상승할 확률이 가장 높을 것으로 예측된 3개의 종목을 골라 그 다음날 EW(Equal Weight)로 투자하는 방식으로 진행되었습니다. 여기서도 하나의 의구심이 듭니다.

의구심 2: 백테스팅 기간의 cherry picking이 존재하는게 아닌가 하는 생각이 듭니다. 6개 시뮬레이션의 백테스팅 기간을 보면 우선 시점이 다 다릅니다. 데이터셋의 기간은 훨씬 긴데도 전체 데이터셋에서의 시뮬레이션 결과는 report하지 않고 위에 보이는 기간에서만 결과를 report합니다. 물론 처음의 ACL18과 KDD17은 related works에서 사용한 기간과 데이터를 그대로 사용하여 해당 알고리즘을 overperform했다는 점을 강조하고 있다는 점에서 정당성이 부여되지만, 나머지 4개 백테스팅의 경우 임의로 선정했는데도 왜 시점과 기간을 고정하지 않았는지에 대한 부연설명이 담기지 않았습니다. 시점도 2017년부터 2019년까지 다양하고, 기간도 6개월~1년9개월까지 다양한 기간을 사용했습니다. 

사실 아무리 안좋은 알고리즘을 쓴다고 하더라도 index나 다른 알고리즘들을 overperform하는 기간이 분명히 존재하기 마련입니다. 만약 정말 뛰어난 알고리즘이라면 시점과 기간을 가용 데이터셋 전체로 고정하고서도 overperform을 했을 것이고, report를 할 때 굳이 저렇게 시점과 기간을 바꿔가면서 시뮬레이션을 했을 거라고 생각하지 않습니다. 만약 저게 cherry picking이 아니라면 물론 굉장한 알고리즘이지만, 아무리 그래도 저 정도의 수익률을 보여줄 거라는 생각이 들지는 않습니다.

한편 아키텍쳐의 아웃풋이 주가의 상승/하락 확률을 담고 있기에, 또 다른 metric으로서 방향성을 잘 맞추었는지를 활용할 수 있습니다. 이에 대한 result는 다음과 같습니다. 


굉장히 높은 예측률을 보여주고 있습니다. 그러나 여기에서 또 하나의 의구심이 듭니다.

의구심 3: 이런 경우에는 dataset의 편향이나 dataset의 특성을 항상 조심해야 합니다. 저 데이터를 그대로 받아들이면 엄청난 확률로 보이지만, 실제로는 그렇지 않을 수도 있습니다. 제가 이걸 느꼈던 순간이 dacon에 binomial output을 제출한 적이 있었는데 정확도가 80%정도가 나오길래 제출은 잘 됐는데 모델에 문제가 있나보다 생각했습니다. 근데 알고 보니 죄다 0으로 제출한 거였고 데이터 자체에서 0이 80%, 1이 20% 들어가 있어서 accuracy가 80%나오는 걸 보고 EDA의 중요성을 실감했습니다...아무튼! 위의 경우에서도 그랬을 확률이 존재하기 때문에 확인을 한번 해보았습니다. ACL18 기준 test set은 64거래일이고, 87종목인데 상승 확률이 50.5%정도로 일단 간단하게 보았을 때 편향된 데이터는 아닙니다. 그래서 사실 좀 놀랐습니다. 

약간 뭔가 마술을 부린 것 같은데 트릭을 알 수 없는 느낌입니다...ㅋㅋ 애초에 제 개인적으로 저 정도의 shallow level price data만 가지고 이런 예측이 가능하다는 것에 회의적이기 때문에 그런 생각이 계속 드네요. 물론 실제로 굉장한 알고리즘일수도 있습니다만 이건 저 ACL18 데이터 가지고 제가 직접 이것저것 돌려보면서 나중에 다시 다른 포스팅으로 적어봐야할 것 같습니다.

무튼 저 예측률만 놓고 본다면 실전 도입도 가능해보일 정도로, 아니 실전 도입이 시급한 정도로 훌륭한 성능을 보여주고 있습니다. 다만 잘 이해가 가지 않는 점은 Adv-ALSTM의 경우 원 논문에서는 성능을 57%로 report하고 있는데 여기서는 public implementation을 따랐음에도 Adv-ALSTM의 성능이 54%정도로 대폭 떨어진 걸로 report되어있습니다. 성능 차이가 생각보다 심한데 어디 쪽이 더 신뢰가 가는지는 잘 모르겠습니다...ㅠ


마지막으로 각 stock 간의 관계에 관해서 report한 부분입니다.



 위에 보이는 게 attention score인데, attention score가 유의미하게 나오는 종목들 사이에서는 실제로 상관관계가 있는 종목들이라는 내용입니다. 즉, '우리가 만든 모델의 attention이 현실 상황을 제대로 capture하고 있다!'라는 느낌입니다. 개인적으로는 이건 발견이라기보다는 모델이 에러 없이 기대했던 대로 잘 작동하는 느낌이라서요, 딱히 신기한 내용은 아닙니다. correlation만 가지고 heatmap을 그려봐도 비슷한 내용을 말할 수 있으니까요. 그냥 DTML이 어느 정도 기대하는 대로 작동하고 있었다는 느낌 정도겠네요. 물론 저걸 그려보고 발견했을 당시에는 굉장히 신기하고 한편으로는 뿌듯했을 것 같은 느낌에는 백방 공감됩니다ㅋㅋ

마지막으로는 각 모듈의 기여도를 report하는데, DTML에 들어간 여러 장치들을 하나씩 빼보면서 성능이 얼마나 차이나는지를 알아보는 내용입니다. 이건 사실 당연히 성능이 떨어질 수밖에 없는게 만약에 알고리즘 추가해서 성능이 안 올랐으면 애초에 버리고 다른 걸 썼을테니 떨어지는게 당연합니다. 그래도 살펴보면 어떤 장치를 넣어서 얼마나 올랐는지로 해당 알고리즘이 더해준 무언가가 'market 속 진리'를 잘 capture한다 못한다 정도를 직관에 담을 수는 있을 것 같습니다.

대충 이 정도로 요약되겠네요. 직접 모델을 돌려봐야 신뢰가 더 가겠지만, 논문을 신뢰한다면 우선은 굉장히 low level의 데이터로도 이런 결과를 뽑아낼 수 있다는 건 신기하긴 합니다. 다음에는 이걸 이모저모 뜯어보는 시간을 가져보겠습니다.

댓글 없음:

댓글 쓰기