1. Policy Gradient를 이용한
인공지능 포트폴리오 매니저
20121661 한규수
20121566 김석환
20121568 김설기
Sogang University
Computer Science and Engineering
[CSEG312] Data Mining
2018. 6. 19
2. 개요
강화학습(Policy Gradient)을 기반으로…
State : 과거 주식 가격 데이터를 이용해
Action : 현재 상태의 최적의 포트폴리오를 만들어
e.g. Portfolio Vector=[A종목 10% 투자, B종목 20%, … , N종목 1%]
Reward : 시장 평균 수익률보다 더 큰 수익률을 달성하도록 학습한다.
3. 데이터 설명 (투자 대상 종목)
만약 일반 주식을 투자 대상 종목으로 하면,
미래의 경험에서 온 선택이 학습에 반영됨
e.g. 삼성전자를 투자 대상 종목에 넣으면,
삼성전자가 현 시점에 상장 폐지되지 않고 남아있음이 결과에 반영된다.
ETF(Exchange-Traded Fund) 15개 종목을 투자 대상 종목으로 하기로 결정
위 15개 종목은 DB GAPS 투자대회에서 투자 대상 종목으로 사용하는 것과 동
일함
5. 데이터 설명 (Preprocessing)
[기본데이터]
앞서 말한 15개 종목의 가격(open, high, low, close)과 거래량(volume)
[전 처리 후 데이터] -> 이 과정 이후로는 데이터들이 Feature가 된다.
e.g. (10000원 - 8000원) / 8000원 => 0.25
6. 강화학습(Policy Gradient) 구조
1. STATE
T 시점에 관찰할 수 있는 가격 데이터
P(T-W+1) ~ P(T)
2. ACTION
T 시점의 최적 포트폴리오 벡터
3. REWARDAGENT ENVIRONMENT
<Train data>
[참고] W는 window size를 의미함
과거 몇 일의 데이터를 볼지~?
4. UPDATE POLICY(Network)
7. 강화학습(Policy Gradient) 구조 (구현방식)
과거 가격데이터는 Agent의 Action에 따라 Environment가 변하지 않으므로,
일반적인 강화학습과는 다르게 Environment와의 상호작용이 필요하지 않다.
9. Agent 내부 구조(Reward)
- 단순히 수익률을 Reward로 하면,
- 상승장이면 Reward 높고, 하락장이면 Reward 낮음
목표가 Non-Stationary 하다.
- 따라서 시장 평균 수익률 대비 포트폴리오 수익률을 Reward로 설정함
Mini Batch 기간의 시장 평균 수익률
Mini Batch 기간의 포트폴리오 수익률
Reward = log
10. Agent 내부 구조(Hyperparameters)
- Convolution Layer 사이에 Dropout(keep_rate 0.5)과 Noise 적용
- 모든 Activation function은 ReLu
- Adam Optimizer (learning rate=0.001)
- Batch size = 30 (30일간의 시장 대비 수익률을 Maximize하는 방향으로
학습한다는 의미를 내포함)
11. 문제 발생…!!!
시장보다 수익률 나쁨 시장과 비슷한 수익률 시장보다 수익률 좋음
매 Run 마다 수렴하는 정책이 다르며, 그에 따른 수익률 변동이 심함
13. 모델 검증
- 데이터 기간 : 2015-11-13 ~ 2018-06-11
- Train 60%, validation 20%, test 20%
- Test 기간(2017-12-04 ~)의 시장 평균 수익률 = 2.05%
1. 16개의 Agent는 train data에 대해 8 Episode 학습 후,
2. Validation data에 대해 reward가 높은 5개의 Agent를 선별,
3. 5 개의 Agent의 평균 정책으로 test 진행
14. TOP 5 Agent 앙상블
120 거래일
Agent 수익률 = 9.89%
Market 수익률 = 2.05%
Run 1
앙상블 이전보다는 최종 정책의 Variance가 줄어들었다.
그럼에도 불구하고 Run 마다 수렴하는 정책에 차이가 존재한다.
Run 2
120 거래일
Agent 수익률 = 11.49%
15. 문제점
- 앙상블을 적용하였지만 아직도 수렴하는 정책 간의 분산이 크다
- Validation data에 대한 Overfitting이 존재함
- 거래 수수료 고려하지 않았음
- 모든 기간에 대해 테스트하기 어려움
(train, val, test data 설정에 사람의 의도가 반영되므로)
보다 체계적인 train -> validation -> test 방법이 필요함
16. 개선방향 (미처 못한 TODO list)
- Rolling Train & Validation & Test
Train, Validation, Test 데이터를 초기에 분할하지 않고,
t 시점 직전 까지 모든 데이터를 train과 validation에 사용하고
t+1 시점에 대해 test하는 과정을 반복하는 방식
- 거래 수수료 적용
- 각 종목별 상한, 하한 비율 부과
- (당연하게도..) Neural Net 구조 개선
18. 참고자료
• Y Deng et al., Deep Direct Reinforcement Learning for Financial
Signal Representation and Trading, 2017
• Z Jiang et al., A Deep Reinforcement Learning Framework for the
Financial Portfolio Management Problem, 2017
• 김문권, 파이썬과 케라스를 이용한 딥러닝/강화학습 주식투자, 2018
• 대신증권(Creon) PLUS API를 이용하여 지속적인 주가 데이터 DB 구축 프로
그램 (https://github.com/gyusu/Creon-Datareader)