Data Analysis/[Project] Financial Reinforce Agent

23년 8월 부터 11월까지 주식 투자를 위한 강화학습 에이전트 프로젝트를 진행했다. 학회에서 학회원들과 힘을 합쳐 골머리 앓으며 만들었는데, 다행히 프로젝트가 성공적으로 끝났고, 마무리를 기념하여 지금까지의 스토리를 남긴다 물론 개선 사항은 더 많이 남아 보완을 하겠지만, 설령 완성한다고 해도 학생의 돈으로 실전 투자를 하는 것은 조금 미친 짓 같다 1. 시작 - 금융에서 AI를 쓸 수 있을까? 현대 사회에서 가장 탐욕적이고, 불확실한 시장을 뽑으라면 부동산과 주식 시장일 것이다. 기하 브라운 운동이라고 들어봤는가? 유체같은 물질에서 입자가 불규칙적으로 움직이는 현상을 금융 공학적으로 가정한 이론이 기하 브라운 운동이라고 한다 위의 여러 파동들처럼 주가는 굉장히 불규칙적으로 움직이며, 저 많은 시뮬레이..
강화학습에서는 에이전트에 주는 보상 정책을 많이 신경써줘야한다. 칭찬받을 짓을 했는데 뺨때리면 사람이 악해지듯이.. 어쨌든 보상과 패널티를 잘 줘야한다. 주식 도메인에서 보상을 어떻게 유형화할 수 있을까? 어떤 케이스는 을 discrete하게 하는데, 이 방법이 효과적인 방법인지는 의문인 것이, 아무리 많이 벌었을 때도 1이라는 보상을 주기 때문에 모델이 Greedy하게 학습하지 못할 수 있다는 것이다. 그래서 즉, 내 씨드머니에 비해 현재 스텝에서 얼만큼의 수익률을 올리고 있는가?를 reward로 책정했다. prototype으로 삼성전자를 몇 에피소드 돌려봤는데 에피소드가 지날수록 수익실현을 잘 하는 것으로 보이긴한다 근데 다시 생각해보니 reward가 오용되고 있다는 것을 느꼈다. 핵심은 "어쨌든 초..
REINFORCE ALGO의 학습 매커니즘을 더 와닿게 만들겠다 learning_rate = 0.0002 gamma = 0.98 # Policy Network: 4개의 state를 입력으로 받아서 2개의 action 출력 class Policy(nn.Module): def __init__(self): super(Policy, self).__init__() self.data = [] self.fc1 = nn.Linear(4, 128) self.fc2 = nn.Linear(128, 2) self.optimizer = optim.Adam(self.parameters(), lr=learning_rate) def forward(self, x): x = F.relu(self.fc1(x)) x = F.softmax(..
강화학습 모델로 주식 매매 에이전트를 개발하던 중 들었던 의문점들과 해결해 나간 부분을 따로 정리하려고 한다. 먼저 내가 만들어야 하는 알고리즘은 Policy based Algorithm이다. 크게 두 가지 뿌리로 나뉘는데, Q-Learning과 SARSA와 같이 Value-function을 기반으로 하는 Value-based Algorithm과 Policy Gradient를 활용한 Policy-based Algorithm으로 나뉜다. 두 알고리즘의 차이는 아래와 같다. Value-based : $ Q(S_{t}, a_{t}) $ 을 Maximize하는 기법 Policy-based : $ P(a_{t}, | S_{t}) $ ..
금융권에서 시계열 분석은 중요한 역할을 하는데 외생변수가 너무 많다보니 예측에 제한이 많이 걸린다. 예를 들어서 다음날 주가를 예측할 때, $ y_{t+1} = y_{t} + x_{t} + e_{t}$로 $x_{t}$라는 feature들과 $e_{t}$라는 노이즈가 예측의 정확성에 큰 영향을 준다. 보통은 RNN, LSTM 계열의 모델을 많이 사용해왔지만 많은 사례에서 공통적으로 예측값이 오른쪽으로 밀리는 Lagging이 되는 현상을 심심치않게 목격한다 주가 예측의 경우 고려하는 feature에 비해 고려하지 못하는 노이즈의 양이 엄청 커버리게 되는데 고려하지 못하는 변수들의 사이즈가 커질 수록 모델은 한정적인 정보로 다이나믹한 예측을 할수 없게된다. 예를 들면 오너리스크가 터진 긴급한 상황에서 모델이 ..
물가연동국채(Inflation Linked Treasury Bond) 투자금과 이자에 물가상승률이 반영된 국채. 물가가 오르면 수익이 생긴다. 예시: 투자자 A는 표면 이율 1%짜리 일반국채 100만원을, 투자자 B는 표면 이율 1%짜리 물가연동국채를 사들였다. 연간 물가 상승률이 5%라고 했을 때, 투자자 A는 물가 상승과 관계없이 1만원의 이자를 상환받지만, 투자자 B는 투자 원금에 물가 상승률이 반영되고 해당 금액에 대한 이자를 상환받는다. 106.05만원 = 105$(조정된 원금)$ + 100*105/100*0.01$(이자)$ 따라서 두 투자자의 상환액 차이는 5.05만원이되고 물가 상승한 상황에서 승자는 B가 된다. 반대로 디플레이션일때는, 투자자B는 조정된 원금이 하락하기 때문에 손실을 보게된..
bat_huni
'Data Analysis/[Project] Financial Reinforce Agent' 카테고리의 글 목록