주식투자 분야에서 강화학습 효과를 차별화하는 요인들

Posted on Thu 26 March 2020 in book • 7 min read

주식투자 강화학습에서는 강화학습 모델을 다양하게 구성할 수 있습니다. 강화학습 모델에서 고려할 학습 데이터, 보상 규칙, 행동의 종류, 신경망 종류, 강화학습 기법 등을 달리할 수 있으며, 이에 따라 강화학습의 효과가 달라질 수 있습니다. 이렇게 다양한 차별화 요인이 존재하기 때문에 어떠한 강화학습 모델이 효과적으로 주식투자를 학습할 수 있을지는 다양한 실험과 비교 분석을 해야 알 수 있습니다.

차별화 요인 1: 학습 데이터 구성

이 책에서 강화학습 신경망을 학습할 때 사용하는 데이터는 기본적 분석 지표와 기술적 분석 지표를 종합적으로 사용합니다. 여기서 제시하는 데이터 구성 외에도 수많은 방식으로 학습 데이터를 구성할 수 있습니다.

기본적 분석 지표 자질로 PER, PBR, ROE를 사용합니다.

주가수익비율(Price Earning Ratio, PER) = 주가/주당순이익

PER은 주가와 회사의 순이익의 비율입니다. PER이 낮을수록 회사의 순이익에 비해 주가가 저평가돼 있다고 볼 수 있습니다. 그러나 업종마다 평균 PER의 차이가 크기 때문에 PER이 높다, 낮다라고 절대적으로 판단할 기준은 없습니다.

주가순자산비율(Price Book-value Ratio, PBR) = 주가/주당순자산

PBR은 자산 대비 주가의 비율입니다. PBR이 낮을수록 회사의 가치 대비 주가가 낮다는 것이므로 해당 종목이 저평가돼 있을 가능성이 있습니다.

자기자본이익률(Return On Equity, ROE) = PBR/PER

ROE가 높을수록 자산 대비 이익이 크다는 의미입니다. 그러므로 ROE가 높은 종목은 회사의 성장 가능성이 높다고 볼 수 있습니다. 다음은 학습 데이터에 포함된 주가 및 거래량과 관련된 특징들입니다.

전일 종가 대비 당일 시가 비율 (open/last close)

당일 시가를 전일 종가로 나눈 값입니다. 주로 전일 종가에 비해 당일 시가가 상당히 높으면 '갭상승'이라 하고, 반대로 전일 종가보다 당일 시가가 많이 떨어져 있으면 '갭하락'이라 부릅니다.

당일 종가 대비 당일 고가 비율 (high/close)

당일 고가를 당일 종가로 나눈 값입니다. 이 값만으로는 추세를 예측할 수는 없지만, 학습 데이터의 특징으로 가치가 있습니다. 당일 고가가 종가에 비해 상당히 높다면 많은 경우에 저항선을 뚫지 못해서 추가적인 상승이 어렵다고 여기기도 합니다. 이를 '일봉의 위꼬리가 길다'라고도 표현합니다.

당일 종가 대비 당일 저가 비율 (low/close)

당일 저가를 당일 종가로 나눈 값입니다. 당일 저가보다 당일 종가가 더 낮으면 지지선이 하향돌파될 우려가 있으므로 강화학습 학습 데이터에도 특징으로 추가했습니다.

당일 종가 대비 전일 종가 비율 (close/last close)

당일 종가를 전일 종가로 나눈 값입니다. 일반적으로 주가가 올랐다, 떨어졌다를 얘기할 때 당일 종가에서 전일 종가를 뺀 다음에 다시 전일 종가로 나누는데, 수식으로는 (close–last close/last close)가 됩니다. 같은 의미지만, 학습 데이터에는 비율 값으로 사용했습니다.

전일 거래량 대비 당일 거래량 비율 (volume/last volume)

당일 거래량를 전일 거래량으로 나눈 값입니다. 주가가 상승하면서 거래량이 늘면 주가 상승에 긍정적인 신호로 여기는데, 이를 포착하고자 이 값을 학습 데이터의 특징으로 추가했습니다.

5일 평균 종가 대비 당일 종가 비율 (close/MA5 close)

당일 종가를 5일 동안의 평균 종가로 나눈 값입니다. 단기 주가 추세를 학습 데이터 특징으로 고려하기 위해 사용합니다.

10일 평균 종가 대비 당일 종가 비율 (close/MA10 close)

당일 종가를 10일 동안의 평균 종가로 나눈 값입니다. 마찬가지로 단기 주가 추세를 고려하기 위함입니다.

20일 평균 종가 대비 당일 종가 비율 (close/MA20 close)

당일 종가를 20일 동안의 평균 종가로 나눈 값입니다. 20일선은 주가 추세를 잘 보여주는 이동평균선입니다. 이 값 역시 학습 데이터에서 매우 가치 있을 것입니다.

60일 평균 종가 대비 당일 종가 비율 (close/MA60 close)

당일 종가를 60일 동안의 평균 종가로 나눈 값입니다. 60일선 역시 대표적인 이동평균선입니다. 20일선이 60일선을 상향 돌파하면 골든 크로스(golden cross)라고 부를 정도로 매우 의미 있는 이동평균선입니다.

120일 평균 종가 대비 당일 종가 비율 (close/MA20 close)

당일 종가를 120일 동안의 평균 종가로 나눈 값입니다. 120일은 주식 거래일 기준 약 6개월에 해당하는 기간입니다. 이 값은 중·장기간의 평균값 대비 당일 종가의 위치를 의미합니다.

5일 평균 거래량 대비 당일 거래량 비율 (volume/MA5 volume)

당일 거래량을 5일 동안의 평균 거래량으로 나눈 값입니다. 이 값은 단기적인 거래량 추세를 수치화한 것입니다. 거래량이 증가하고 있다면 주가의 추세를 유지할 가능성이 높다고 기대할 수 있습니다. 주가가 상승하고 있는데 거래량도 늘고 있다면 주가가 더 상승할 가능성이 높다는 것입니다. 반대로 주가가 하락하고 있는데 거래량이 늘고 있으면 주가가 더 떨어질 가능성이 높다는 것입니다.

10일 평균 거래량 대비 당일 거래량 비율 (volume/MA10 volume)

당일 거래량을 10일 동안의 평균 거래량으로 나눈 값입니다. 이 값도 단기적인 거래량 추세를 내포합니다. 20일 평균 거래량 대비 당일 거래량 비율 (volume/MA20 volume) 당일 거래량을 20일 동안의 평균 거래량으로 나눈 값입니다. 주가에서 20일 이동평균선을 중요하게 봤듯이 거래량 역시 20일 이동평균선은 중요합니다.

60일 평균 거래량 대비 당일 거래량 비율 (volume/MA60 volume)

당일 거래량을 60일 동안의 평균 거래량으로 나눈 값입니다. 주가와 더불어 거래량의 추세를 보는 것은 매우 중요합니다. 60일 이동평균선은 중기적인 추세를 볼 수 있는 좋은 지표입니다.

120일 평균 거래량 대비 당일 거래량 비율 (volume/MA120 volume)

당일 거래량을 120일 동안의 평균 거래량으로 나눈 값입니다. 이 지표로 장기적인 관점에서 당일 거래량의 정도를 판단할 수 있습니다.

주식 시장 관련 자질도 사용할 수 있습니다. 여기서는 코스피(KOSPI) 지수를 사용합니다.

코스피 지수의 5일 평균 종가 대비 당일 종가 비율 (close/MA5 close)

5일 평균 종가로 당일 종가를 나눈 값으로 시장의 단기 방향성을 판단할 수 있습니다. 이 값이 1보다 클 경우 5일선을 상회함을, 1보다 작으면 5일선을 하회함을 의미합니다.

코스피 지수의 20일 평균 종가 대비 당일 종가 비율 (close/MA20 close)

당일 코스피 종가를 20일 평균 종가로 나눈 값입니다. 이 값으로 20일선을 상회하는지 하회하는지 판단할 수 있습니다.

코스피 지수의 60일 평균 종가 대비 당일 종가 비율 (close/MA60 close)

당일 코스피 종가를 60일 평균 종가로 나눈 값으로 한 분기의 평균 종가를 상회하는지 하회하는지 알 수 있습니다.

코스피 지수의 120일 평균 종가 대비 당일 종가 비율 (close/MA120 close)

120일은 평균 종가로 당일 종가를 나눈 값으로 반기 동안의 평균 종가를 상회하는지 하회하는지 알 수 있습니다.

이론적으로 국채는 주가의 방향성과 반대로 움직이는 경향이 있습니다. 국채는 금리가 떨어지면 비싸지는데, 금리가 떨어진다는 것은 불경기라는 신호로 작용할 수 있고 주식 시장도 불황이 될 개연성이 있습니다. 국채 시계열을 주식투자에 참고할 수 있으므로 학습 데이터로도 사용할 수 있습니다.

3년 국채의 5일 평균 종가 대비 당일 종가 비율 (close/MA5 close)

5일 평균 국채 종가를 당일 종가에 나눈 값으로, 채권의 단기 방향성을 의미합니다.

3년 국채의 20일 평균 종가 대비 당일 종가 비율 (close/MA5 close)

20일 평균 국채 종가를 당일 종가에 나눈 값으로, 채권의 중단기 방향성을 의미합니다.

3년 국채의 60일 평균 종가 대비 당일 종가 비율 (close/MA5 close)

60일 평균 국채 종가를 당일 종가에 나눈 값으로, 채권의 중장기 방향성을 의미합니다.

3년 국채의 120일 평균 종가 대비 당일 종가 비율 (close/MA5 close)

120일 평균 국채 종가를 당일 종가에 나눈 값으로, 채권의 장기 방향성을 의미합니다.

여기에 추가로 에이전트의 상태를 학습 데이터로 고려합니다. 투자를 수행하는 주체인 에이전트의 상태에 따라 같은 환경에서도 다른 투자 결정을 하는 것이 더 올바를 것입니다. 예를 들어 환경이 매수하기에 좋은 상황이라 하더라도 이미 너무 많은 주식을 보유하고 있다면 리스크 관리 차원에서 매수를 보류(즉, 관망)할 수 있습니다.

학습 데이터로 고려하는 에이전트의 상태는 다음과 같습니다.

주식 보유 비율 (현재 보유 주식 수/최대 보유 가능 주식 수)

현재 보유 중인 주식 수를 보유한 자산으로 최대로 보유할 수 있는 주식 수로 나눈 값입니다. 이 값은 자산 대비 주식을 얼마나 보유하고 있는지를 의미합니다. 주식 보유 비율이 높을 때는 매도 관점에서 주식 시장을 바라보고 주식 보유 비율이 낮으면 공격적인 매수를 하는 등의 전략을 학습할 수 있게 이 값을 학습 데이터에 특징으로 추가했습니다.

포트폴리오 가치 비율 (현재 포트폴리오 가치/기준 포트폴리오 가치)

현재 포트폴리오 가치를 기준 포트폴리오 가치로 나눈 값입니다. 기준 포트폴리오 가치는 현재의 포트폴리오 가치를 비교할 만한 이전의 포트폴리오 가치로, 정하기 나름입니다. 현재의 수익률 또는 손익률을 학습에서 고려하기 위해 이 값을 특징으로 추가합니다.

에이전트의 상태 역시 앞서 소개한 두 가지 외에도 다양하게 구성할 수 있습니다. 예를 들어, 에이전트가 연속으로 매수한 횟수, 연속으로 매도한 횟수, 20 거래일 동안의 매수 비율, 20 거래일 동안의 매도 비율 등을 특징으로 삼을 수도 있습니다.

차별화 요인 2: 지연 보상 임곗값

지연 보상 임곗값은 강화학습을 진행하면서 학습 수행 여부를 결정하는 기준이 됩니다. 지연 보상 임곗값은 손익률 1%, 2%, 5%, 10% 등으로 정할 수 있습니다.

지연 보상 임곗값에서 손익률 5%라는 것은 수익률 5%를 달성하면 이전에 행했던 투자 행동들을 '긍정적이었다'고 학습하고, 손실률 5%를 달성하면 이전 투자 행동들이 '부정적이었다'고 학습함을 의미합니다.

지연 보상 임곗값에서 수익률과 손실률을 다르게 부여할 수도 있습니다. 수익률을 5% 또는 손실률 3%를 초과할 때 학습을 진행하게 할 수 있습니다. 혹은 긍정 보상만 고려하거나 부정 보상만을 고려할 수도 있습니다. 이렇게 지연 보상 임곗값을 변경해 보면서 학습 결과를 분석해 보는 것도 의미 있는 실험일 것입니다.

차별화 요인 3: 행동 종류

에이전트는 행동을 수행함으로써 투자를 진행합니다. 행동에는 크게 매수, 매도, 관망이 있습니다. 매수는 주식을 사들이는 행동, 매도는 주식을 파는 행동, 관망은 매수도 매도도 하지 않고 관망하는 행동입니다. 이를 공격적 매수, 방어적 매수, 공격적 매도, 방어적 매도, 관망으로 더 세분화할 수 있습니다.

공격적 매수에서는 한 번에 많은 양의 주식을 사들이고, 방어적 매수에서는 주식을 조금만 사들이고, 공격적 매도에서는 한 번에 많은 주식을 팔고, 방어적 매도에서는 주식을 조금 파는 것입니다.

매매할 최대 및 최소 투자 단위를 결정해 놓고 확률에 따라 최소에서 최대 사이의 단위로 투자를 진행할 수도 있습니다.

차별화 요인 4: 신경망

가치 신경망과 정책 신경망은 강화학습에서 에이전트가 행동을 결정하기 위한 두뇌 역할을 하는 인공 신경망입니다. 신경망의 종류는 심층 신경망(deep neural network), 순환 신경망(recurrent neural network), 합성곱 신경망(convolutional neural network)과 이것들을 혼용하는 앙상블 신경망이 있습니다.

심층 신경망(deep neural network)

학습 데이터는 여러 특징을 가지는데, 이들의 값이 달라짐에 따라 수많은 조합을 이룹니다. 하나의 특징은 연속 값을 가지기 때문에 이들의 조합은 무한합니다. 심층 신경망은 이렇게 무한한 특징 조합을 효과적으로 학습하기 위해 여러 계층과 많은 수의 퍼셉트론을 가집니다.

순환 신경망(recurrent neural network)

순환 신경망은 현재의 상태와 이전에 결정한 행동을 함께 고려할 수 있습니다. 이 경우 매수, 매도, 매수, 매도, 매수와 같은 정신없는 투자를 피하고 어느 정도의 투자 일관성을 가질 수 있습니다.

합성곱 신경망(convolutional neural network)

합성곱 신경망으로 5일, 10일 등 특정 기간의 일련의 상태를 한꺼번에 고려할 수 있습니다. 이전 상태들의 흐름을 포괄적으로 고려해 높은 학습 품질을 기대할 수 있습니다.

여러 신경망의 앙상블(ensemble)

여러 신경망을 사용해 결과를 다수결로 결정하는 방법을 사용할 수 있습니다. 이 경우 투자 결정에 대해 신뢰성을 높일 수 있습니다. 이러한 방법을 앙상블(ensemble)이라 하고 비슷한 방법으로 배깅(bagging), 부스팅(boosting) 등의 방법이 있습니다.

차별화 요인 5: 강화학습 기법

강화학습 기법으로는 Q-러닝, 정책 경사, 액터-크리틱, A2C, A3C 등을 사용할 수 있습니다. 여기서는 가치 신경망을 학습하는 Q-러닝과 정책 신경망을 학습하는 정책 경사의 특징을 살펴보겠습니다. 두 기법 모두 주식투자 강화학습에서 적절한 방법이지만 다음과 같은 차이가 있습니다.

Q-러닝

Q-러닝은 특정 행동을 취했을 때 예측되는 포트폴리오 가치를 회귀(regression)하고자 사용합니다. 주식투자에서 손실을 보고자 투자하는 사람을 없을 것이기 때문에 예측한 값이 높은 쪽으로 행동을 취하면 됩니다. 즉, Q-러닝을 사용할 경우 행동마다 기대 손익을 수치적으로 예측합니다.

정책 경사(policy gradient)

정책 경사는 어떤 행동이 현재 상태에서 가장 좋을지를 확률적으로 판단합니다. Q-러닝과는 다르게 기대 손익을 예측하는 것이 아니라 단순히 현 상황에서 어떤 행동이 더 좋은지를 판단하는 것입니다.

그 외에 액터-크리틱, A2C, A3C는 Q-러닝과 정책 경사를 함께 적용한 하이브리드 기법으로 볼 수 있습니다.

뒤에서 소개할 강화학습 주식투자 시스템인 RLTrader에서는 Q-러닝, 정책 경사, 액터-크리틱, A2C, A3C 각각을 주식투자에 적용할 수 있고 사용자가 쉽게 커스터마이즈할 수 있게 구현돼 있습니다.