Data & AI

복잡한 시장을 정복하기 위한 방법

JeTech 2024. 8. 13. 00:00
반응형

 

 

안녕하세요

 

오늘은 Offline Reinforcement Learning 기법 중 하나인

 

Decision Transformer를 시장에 적용하고 

 

최대한 활용해보기 위해 시장을 분석하고 모델이 예측한 시장과

 

상호작용하면서 학습한 메커니즘이 어떤 양상을 보이는지 데이터와 함께 살펴볼 예정입니다. 

 

 

Decision Transformer

 

사실 예전 관련 포스트를 공유한 적 있지만

 

신규 유입자분들도 계실테니 간단히 공유드리겠습니다. 

 

저는 기술자이긴 하지만, 제가 작성하는 글들이 또 다른 기술자들 뿐 아니라

 

기술을 모르는 일반 시장참여자들에게도 좋은 가치가 되길 원하고 있습니다. 

 

그래서 깊은 내용에 대해서는 다루지 않고 보편적으로 이해하실 수 있을 정도의 내용으로 

 

공유를 드릴 예정입니다. 

 

Decision Transformer는 시계열 모델링 문제로 강화학습을 해결하는 방법입니다. 

 

기존의 강화학습은 내가 어떤 행동을 환경에 가할때

 

환경이 어떻게 변화하는지에 대한 연구가 주를 이루었다면

 

이 경우는 상태 s, 행동 a, 보상 r으로 이루어진 데이터들의 나열을 보면서 학습합니다. 

 

우리의 경우는 시장의 상태 / 그 상태를 보고 결정한 매수나 매도 포지션 / 그에 따른 보상의 데이터들일 겁니다. 

 

이런 데이터들은 Behavior Cloning에 기반합니다. 

 

20세기말부터 연구되어 왔던 분야이고

 

Decisioon Transformer에서는 이 Behavior Cloning을 이용해

 

expert가 우리가 정복하고자 하는 환경에서 우수한 보상을 얻어낸 "trajectory" 데이터를 기반으로 학습합니다. 

 

즉, 트레이딩을 잘하는 사람의 실제 트레이딩 데이터를 기준으로 학습을 하게 된다는 것입니다. 

 

강화학습의 핵심은 행동에 따른 상태전이를 통한 정책, 행동가치함수를 근사 하는 것이었지만

 

시장은 그러지 못한 환경이고, 기존 강화학습과 다르게, 

 

상태와 행동의 메커니즘이라기보다는, 하나의 시퀀스 예측 문제로 접근한다는 점에서

 

의미를 조금 둘 수 있습니다. 

 

 

Trajectory / Data Distribution

 

공식 paper / code에서는  Trajectory라는 용어로 학습데이터를 이야기하고 있습니다. 

 

시장이 워낙 복잡하고 고차원의 영역이기 때문에 expert trajectory를 구한다고 하더라도

 

새로운 테스트데이터, 그리고 실제 추론을 진행하는 순간의 시장상황은

 

우리가 학습을 진행하던 순간과 다른 data distribution으로 효과를 뽑아내지 못합니다. 

 

다른 도메인에 비해 시계열데이터를 다루는 문제는 언제나 data distribution shift 싸워야 하고

 

어쩌면 AI로 지금까지 시장을 정복해내지 못했던 이유 중 하나일지도 모릅니다. 

 

이번 실험에서도 지난번과 같이 

 

비트코인 1시간 간격 데이터들을 가져오고

 

기본적은 기술적 지표들을 추가해서 데이터를 학습시켰습니다. 

 

Decision Transformer의 Transformer로 GPT2의 기본 트랜스포머를 이용해 주었습니다.

 

expert trajectory는 직접 만들어줄 수 있습니다. 

 

다음 시기 가격이 오르면 action을 1, 반대의 경우 -1로 지정해 두면

 

다음 시퀀스의 가격이 오를지, 내릴지를 알고 행동하는 expert의 trajectory가 될 수 있습니다. 

 

학습시킨 데이터들을 wandb에 저장해 두었고

 

학습시킨 모델의 evaluation 성과를 살펴보겠습니다. 

 

 

학습된 모델이 학습 초기부터 특정 trajectory 구간에서는 좋은 성능을 보이고 있습니다. 

 

편차를 보이긴 하지만 그렇지 못한 구간은 학습과정 동안 항상 저조한 성과를 보이고 있습니다. 

 

139번 데이터와 150번 데이터를 살펴보면 아래와 같습니다. 

모델 우수구간/저조구간의 시장/모델 수익률

 

여기서 한 가지 짚고 넘어갈 것은, 학습시마다 gradient를 연산하며

 

특정 구간에 최적화된 상태공간에 어느 정도 근사하게 되고

 

그 이후 학습을 진행하면서 해당 구간에서 미분을 진행해 나가기 때문에

 

다른 구간에 최적화될 수 있지만 모든 구간에 최적화를 만족시키기엔 부족한 파라미터를 가졌다고 생각해 볼 수 있습니다.

 

반대로, 해당 구간에 어느 정도 최적화가 되었기 때문에

 

다른 구간, 특히 유사도가 떨어지는 구간이나 Data Distribution 구조가 다른 경우 저조한 성과를 낼 가능성이 높다는 것입니다. 

 

어느 조건을 맞추자니 다른 조건을 충족하지 못하는 trade-off에 빠져있다고 판단할 수도 있습니다.

 

실제로 두 구간의 수익률 차트가 어느 정도 대칭으로 움직이는 것 같기도 합니다.

 

두 구간의 데이터 분포를 한 번 살펴보았습니다. 

 

 

그래프가 가려지긴 했지만

 

파란 히스토그램은 좋은 성과를 냈던 구간의 수익률 분포

 

빨간 히스토그램은 나쁜 성과를 냈던 구간의 수익률 분포입니다. 

 

우리 눈에는 두 분포 비슷해 보일 수 있지만

 

저 미세한 분포 차이게 반대되는 성과를 내고 있습니다. 

 

시장은 늘 분포가 변화하고 이런 변화는 우리 시장참여자들로부터 만들어지게 됩니다. 

 

이 작은 분포 차이가 모델의 성과를 크게 좌우하고 있음을 우리는 이해해야 합니다. 

 

 

 

 

학습세대별 성과

 

추가 연구를 위해 데이터를 여러 번 generation을 거듭하며 학습을 진행시켜 보았습니다

 

해당 세대에서 우수한 evaluation 수익을 거둔 모델의 가중치를 

 

다음세대에 이어서 연산시키도록 했고

 

총 5 세대의 모델을 얻게 되었습니다. 

 

그리고 각 세대별 모델이 성과가 뛰어난 구간이 변경되는 것을 확인했습니다. 

 

 

 

 

 

백테스트 트레이딩

 

해당 세대별로 만들어진 모델을 이용해

 

2024년 3월 ~ 데이터를 백테스트 트레이딩 시켜보았습니다

 

AI 모델들로 백테스트 트레이딩을 어떻게 진행시키는가는

 

Decision Transformer가 다음 state, action, rewards에 대한 예측값을 내놓기 때문에

 

최신 시장 상태변수들을 입력으로 넣어주면

 

학습된 파라미터대로 적절한 행동 포지션을 반환하고, 이 데이터를 실제 적용하여 트레이딩을 시켰습니다. 

 

 

 

위 차트는 모델별 트레이딩 성과를 나타내고 있습니다. 

 

제가 5세대 모델이 뛰어난 성과를 나타낸 걸 강조하고 싶은 건 아닙니다. 

 

우리가 주목해야 할 것들은 각 세대별로 강한 구간이 있다는 것인데

 

데이터를 나눠보면, 특정 구간에선 3세대가, 어느 구간에선 1세대, 5세대 등 각자 알파를 만들어낸 구간이 있습니다. 

 

저는 자산배분을 하듯, 적절한 비율로 자산들의 비율을 조정해 나갑니다

 

알고리즘 트레이딩에서도 여러 모델들을 함께 운용하면서 비율을 조절해 나갈 것이고

 

모델 하나하나 분산을 낮추기 위해 bagging을 통한 앙상블 기법을 이용해 모델을 운용할 계획입니다. 

 

당장 모든 알고리즘을 1/N 비율로 할당하고 트레이딩을 시키더라도 아래와 시장을 능가하는 성과를 내긴 하지만

 

테스트데이터에서만 시장을 능가할 수 있고 슬리피지나 거래수수료를 고려한다면 약간의 알파로는 의미 없는 짓이 될 수 있습니다. 

 

 

 

TODO

 

결국 제가 해야 할 것들은 data distribution을 모니터링하는 것입니다. 

 

시계열데이터에서 Data Distribution을 위해 Normalize를 학습하는 RevIN에 대한 코드도 확인을 했는데

 

복잡한 시장환경에서 적용될지는 의문이지만 시도는 해볼 예정입니다.

 

AI알고리즘만으로 이 문제를 해결할 수 있다고 당장 생각이 들진 않습니다.

 

그래서 시장 데이터들을 살펴보는 EDA를 진행하면서

 

시장데이터를 시각적으로 분석해 보고 탐색해 보는 과정이 필요하다고 느끼게 되었습니다. 

 

이 과정에 나오는 산출물이 모델들의 효율적 운용을 위한 사용도 되겠지만

 

이제는 여러분들에게도 이런 데이터들을 공유하면서

 

여러분들의 투자에도 도움이 될 수 있도록 JeTech Lab에 나타날 하나의 데이터로 제공을 해볼까 생각 중입니다. 

 

통계적인 방법으로 분석한 데이터들을 여러분들께 공유해 주는 게

 

기이한 빈도주의에 기반한("3번 음봉이 나오면 4번째는 양봉일 것이다"와 같이 미신에 가까운 영역의 그런..) 방법들보다 

 

여러분들에게 유의미한 투자인사이트를 줄 수 있으리라 생각하고

 

그게 제가 여러분들께 드릴 수 있는 가치의 시작이라고 저는 믿고 있습니다. 

 

다른 쪽으로는 요즘 Mamba가 Transformer를 대체할 수 있는가에 대한 논쟁이 있고

 

Decision Transformer의 Transformer 블록들을 Mamba block으로 대체해서 사용하는 Decision Mamba에 대한 연구도 있습니다. 

 

SSM 문제로 시장을 투영시키고 조금의 알파를 만들어낼 수 있는가에 대한 연구도 진행해 볼 예정입니다. 

 

그래도 가장 우선시되는 것들은 제가 약속했듯 하반기에 여러분들께 JeTech Lab에서 

 

저의 연구 데이터들을 직접 보실 수 있게 제공하는 것입니다. 

 

요즘시대에 멋지고 화려한 웹사이트들도 많지만

 

그런 기능을 제공하긴 어려울 것 같고

 

(사실 고전 투자 / 헤지펀드 사이트나 리서치들을 보면 정적인 차트들과 심심한 페이지들이 많긴 합니다 (?))

 

클래식한 맛이라도 살려서 알찬 데이터들을 공유할 수 있도록 하겠습니다. 

 

여러분들이 알고 싶은, 알면 도움이 되는 시장분석에 대해 댓글이나 메일로 공유 주시면 

 

관련 내용에 대해서도 분석을 진행하고 데이터로 제공검토해 보겠습니다. 

 

많은 댓글과 문의 부탁드리고

 

다음시간에도 좋은 연구 내용과 데이터로 찾아뵙겠습니다. 

 

감사합니다. 

 

 

 

 

 

 

반응형