본문 바로가기

Data & AI

2023년 2월 Market Review (그리고 시작된 AI시대...)

YouTube : https://youtu.be/JTT3-b0aYoU

안녕하세요. 

2023년 2월 market review를 시작하겠습니다. 

개인적으로 바쁜 한 달이어서 2월이 다 끝나고서야 수집된 데이터를 자세히 살펴볼 겨를이 있었는데요.

바쁜 와중에도 몇몇 이벤트들이 기억나는 한 달이었습니다. 

 

매번 설명드리지만 저는 시장 데이터를 수집하고 있습니다. 

시장에서 수익률을 얻어낼 알고리즘을 연구하면서 자연스럽게 얻어야 할 데이터도 늘어나기 때문에

확장성도 고려해서 수집하고 있습니다.

지난달과 마찬가지로 매달 시작시점 수집된 데이터를 기반으로 투자 알고리즘이 작동되었고

2월에 수집된 데이터를 바탕으로 시장분석을 진행해 보도록 하겠습니다. 

지난 데이터를 살펴보면서 새로운 투자 알고리즘 아이디어를 얻기도 하고 

시장에 존재했던 시그널들을 데이터를 통해 찾아내는 게 목적입니다.

이 과정에서 과거의 데이터에서 결과론적인 해석을 하지 않도록 늘 주의해야 합니다. 

 

 

수집된 데이터를 가져오는 부분은 생략하도록 하겠습니다. 

2023년 1월, 혹은 AWS에 데이터를 적재하는 과정은 저의 블로그와 영상에 잘 남겨져있으니

해당 포스트를 참고해 주시면 될 것 같습니다. 

 

매월 1일 동작하는 주식 메타데이터 배치를 통해 수집된

재무데이터를 바탕으로 먼저 살펴보도록 하겠습니다. 

가치투자에 입문해 보면 PER, PBR지표들에 대해 들어볼 수 있습니다.
해당 지표를 설명하는 시간은 아니기에 가치투자자들 사이에서 공식처럼 퍼져있는
저 PER, 저 PBR 주식들이 수익을 많이 내었는지 확인해 보도록 하겠습니다. 

 

PER 분위별 수익률

 

PBR 분위별 수익률

x축은 PER, PBR의 10분 위수입니다. 분위수가 작을수록 PER, PBR이 작은 주식집단, 분위수가 클수록 PER, PBR이 큰 주식집단입니다. 

PER 분위별 수익률은 집단별 편차가 심하지 않기 때문에 넘어가더라도

PBR 분위별 수익률은 눈으로만 봐도 PBR 분위와 수익률이 관계가 있음을 알 수 있죠.

그런데 설명한 대로 PBR 분위수가 크다는 건 PBR이 큰 집단인데
PBR이 높을수록 주식 수익률도 좋았다는 걸 볼 수 있습니다. 

가치투자자들이 저 PBR인 저평가주식을 사라고 했는데 이상합니다.

 

개인적으로 PER과 다르게 PBR에서는
1을 기준으로 프리미엄을 계산할 수 있는 지표로 사용합니다.

PBR이 1 이상이라는 건 기업의 자산보다 시가총액이 크다는 의미로, PBR - 1 만큼이 프리미엄으로 이루어져 있다는 걸 의미합니다. 

이미 프리미엄이 쌓여있는 주식그룹에서 오히려 수익이 좋았다는 건

프리미엄을 감안하고도 추가적인 재료가 시장에 풀렸을 수 있는데

단순히 PBR 수치로만 나눈 그룹이라서 주식의 섹터와 무관하게 같은 양상을 띠는 것으로 보아
자산대비 주가가 상승해 왔지만 그 상승해 온 모멘텀 자체를 좋은 시그널로 보고

추가적인 상승에 기대를 하는 논리도 주식시장에서는 잘 통하고 2월 수익률 데이터가 이를 증명하고 있습니다. 

다른 말로 해석해 보면 시장에 모멘텀이 유지되었다고도 볼 수 있습니다. 

 

 

그럼 실제로 2월 1일 데이터를 수집할 당시, 1월 상승 모멘텀에 대한 분위를 계산해서

해당 그룹별로 2월 수익률 데이터도 살펴보겠습니다. 

 

m30의 의미는 'momentum 30 days'를 의미합니다.

즉, 30일간(1월 1일 ~ 2월 1일)의 모멘텀(30일 동안 주가가 상승한 정도)을 10 분위로 나누었고

동일하게 분위수가 클수록 30일간(1월 1일 ~ 2월 1일) 큰 상승을 했던 주식입니다. 

y축은 2월 한 달(2월 1일 ~ 3월 1일) 간 그룹별 수익률을 나타냅니다.

 

과거 모멘텀 그룹별 수익률이 선형적인데
간단히 해석하면 "1월에 많이 올랐던 주식이, 2월에도 많이 올랐다"입니다.

PBR 그룹별 데이터에서 확인했던 것처럼

시장에 모멘텀이 존재했고, 2월에 그 모멘텀이 꾸준히 유지되었다고 볼 수 있습니다. 

이 모멘텀을 이용해서 투자하는 알고리즘이 추세추종 알고리즘인데

해당 알고리즘이 얼마나 강력한지 보여드리겠습니다.

 

최근 1년, 추세추종 알고리즘과 코스피의 수익률 그래프입니다. 

추세추종 전략은 최근 한 달 많이 오른 주식 그룹들을 포트폴리오에 담는 전략인데요
작년에는 본격적인 금리상승으로 주식시장 하락이 본격화되었던 시점인데
추세추종 전략은 하락을 이겨내고 상승 모멘텀이 이를 극복해 내는 모습입니다. 

 

물론 너무 빈번한 주식교체에 따른 수수료와 슬리피지가 발생하지만

모멘텀 전략은 단기적 모멘텀, 장기적 모멘텀에도 효과적입니다. 

해당 백테스트에 대한 내용은 강환국 님의 유튜브, 혹은 systrader79님의 블로그를 참고해도 좋을 것 같습니다. 

 

 

다음은 자산배분에 대해서도 살펴보겠습니다.

저는 주식투자 알고리즘 말고도 

자산배분 알고리즘을 연구하고 고도화하고 있습니다. 

뜬금없지만 요즘 chatGPT가 정말 인기죠?

대중적으로 역사에 기록될 첫 AI 서비스는 chatGPT가 아닐까 싶습니다.

AI도 워낙 분야가 다양해서 chatGPT는 제가 공부하는 분야는 아니지만 
금융시장에서 AI를 적용하기 위해 개인적으로도 많은 공부와 실험을 해보고 있습니다. 

 

그중 인지심리학을 모방해 낸 강화학습을 통한 알고리즘을 구현하고 있는데

그전에 자산배분에 대한 재미있는 데이터를 여러분들께 보여드리려고 합니다. 

 

아래는 자산군을 가져오기 위한 코드인데

asset_list에 자산 상품 ETF 종목 코드들이 담겨있습니다.

from datetime import datetime
import FinanceDataReader as fdr

asset_dict = {}
for code in asset_list:
    start_dt = '20200401'
    end_dt = '20230301'
    asset_dict[code] = fdr.DataReader(code, datetime.strptime(start_dt, '%Y%m%d'), datetime.strptime(end_dt, '%Y%m%d'))

제가 자산배분 알고리즘을 연구하게 된 기반은

레이달리오의 "올웨더 포트폴리오"입니다.

올웨더 포트폴리오는 워낙 유명하기도 하고 제가 영상에서 다루기도 했었는데요

 

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=2, figsize=(20, 15))

for asset in asset_dict:
    _df = asset_dict[asset]
    _df.Change.cumsum().apply(np.exp).plot(ax=axes[0], label=code_name_dict[asset], alpha=0.3)

_df = pd.DataFrame()
for target in target_position_list:
    _df[target] = asset_dict[target]['Change']

_df['total_returns'] = sum([_df[target]*0.25 for target in target_position_list ])
_df['total_returns'].cumsum().apply(np.exp).plot(ax=axes[0], label='정적 자산배분')

axes[0].grid(True)
axes[0].legend()

 

위 그래프는 여러 자산군들의 코로나 시점 이후 주식시장이 회복되던 시점부터 최근까지의 수익률을 나타내고 있습니다.

그리고  올웨더포트폴리오는 아니지만
상관성이 낮은 주식, 채권, 금, 인프라 자산을 동일 비율로 보유하는 전략의 정적 자산배분 전략의 수익률도 추가했습니다.

 


정적 자산배분은 비교적 적은 MDD를 얻을 수 있습니다.
그에 비해 수익률이 저조하지 않냐라고 할 수 있는데

앞서 말했든 우리는 어떤 자산이 상승할지 알 수 없고
결과론적으로 운이 좋게 가장 많이 상승하는 자산을 과거에 선택했다 하더라도,
심한 변동성 때문에 전체 투자가능금액의 일부만 투자했을 것입니다.
(특정 1개 주식에 자신의 모든 전재산을 거시는 분들을 찾아보긴 힘들 것입니다.)
예를 들어 테슬라로 100% 수익을 얻었다라고 말하시는 분들의 총자산이 100% 증가했을까요?
제가 생각하는 올바른 투자알고리즘으로 20% 수익률을 얻었다면 총자산도 20% 증가시키는 것입니다.
그러기 위해선 상관성이 낮은 자산들을 보유하고, 주기적으로 리벨런싱 하여 변동성을 잡는 게 중요합니다.

변동성이란 부분을 제어했기 때문에 전체 자산을 투자하는 게 심리적으로 가능하게 되겠죠

하지만 정적자산배분 말고 동적으로 자산배분을 할 수 있으면 어떨까요?

동적자산배분은 한국에선 강환국 님이 wouter keller의 알고리즘을 응용해서 사용하시는 전략으로도 유명합니다.

간단하게 말하면, 여러 유형의 동적 자산배분이 있지만, 정해진 비율로 자산을 리벨런싱 하지 않고

투자자가 정한 기준과 조건을 통해 자산 비율을 정해 리벨런싱 하는 것입니다.

 

여기서 다시 AI 이야기로 넘어가 볼까요

AI가 대단한 이유는 인간의 의사결정을 모방하게끔 만들어왔으나

인간이 해결하지 못했던 고차원적인 문제를 해결해 내기 때문입니다.

 

사실 AI라는 정의를 인지심리학에 기반한 Rule based 의사결정을 computer power를 통해 수행하면 AI의 일부로 쳐주기도 합니다.

즉, 개발자들이 본인의 뇌를 통해 인지심리학적 조건을 프로그래밍 언어로 구현하여 application으로 작성하고 computer power로 이를 해결하게 하면 AI로 분류는 시킬 수 있습니다. 물론 우리가 기대했던 chatGPT 같은 멋진 AI가 아니라 인간이 짜낸 Rule based의 AI이긴 하지만요.

앞서 말한 동적자산배분의 리벨런싱 조건을 짜내는 것도 Rule based AI로 분류될 순 있습니다. keller의 동적자산배분이 대부분 모멘텀이나 역추세 등의 수치를 보면서 다음 자산의 비중을 동적으로 조절하기 때문입니다. 사실상 리벨런싱 기준이 단순 수치에서 설명가능한 정적인 문장으로 바뀐 것인데. "시장상황을 보고 동적으로 행동하라"는 정적인 문장을 기준으로 리벨런싱 하는걸 동적 자산배분이라고 할 수 있는지도 생각해봐야 하는 아이러니한 상황입니다.

 

그렇다면 chatGPT 같은 멋진 AI는 어떻게 다른 걸까요?

같은 AI이긴 하지만, 우리가 기대하고 있는 AI 수준으로 가기 위해선 Machine Learning(ML), Deep Learning(DL)이 필요합니다.
그러면 Rule based AI와 ML, DL의 차이점은 무엇일까요

바로 문제 해결을 위한 조건/기준들을 "어떻게" 정의하냐인데요

Rule based AI에서는 인간이 이런 조건에선 이렇게 행동했으면 좋겠다고 프로그래밍 언어로 구현했지만

ML/DL은 이런 조건들을 인간이 아닌 데이터로 생성해 내는데 차이점이 있습니다.


문제가 복잡해질수록 조건 1, 조건 2, 조건 3... 여러 조건들이 있지만,
인간이 어느 정도 프로그래밍언어로 구현해내어 설정하는 게 가능하지만 어느정도 제약이 있죠. 

많은 데이터를 수집해서 데이터들의 상관관계나 데이터마이닝 기법을 통해
조건 1, 조건 2, 조건 3... 여러 조건들을 데이터에 기반해서 설정하는 게 가능합니다.

 

데이터가 중요하다고 한 이유가 여기에 있고

데이터가 더 나은 문제해결을 위한 AI의 필수 자원이 된 상황입니다.

동적자산배분에 멋진 AI가 도입된다면, 자산군을 동적으로 움직이게 하기 위한 인간의 "정적인 조건"은 필요 없고

실시간으로 쌓이는 글로벌 데이터를 수집하고 이에 기반한 "동적인 조건"을 만들어내면 시기별로 상관성이 낮은 자산군과 경제상황별로 더 유리한 보상을 얻을 수 있는 자산군을 찾아낼 수 있지 않을까요?

 

위에서 이야기했던 정적자산배분에서
상관성이 낮고 시기적으로 투자기대수익률이 높은 자산을 추가하고 비율을 조정했으면 어떤 결과를 낼 수 있을까요?

AI가 아닌 퀀트 입문자가 백테스트를 하면서 이런저런 자산군들을 넣어보다가 위와 같은 그래프를 발견하는 순간 신이 나서 투자 알고리즘에 적용한다면 Look ahead bias에 빠진 것입니다. 이 이야기는 중요하고 더 깊어질 수 있기 때문에 다음에 또 다뤄 볼 예정이지만, 간단히 이야기하면 흔히 하는 실수 중 하나로 정해진 과거를 기반으로 최고의 수익을 내는 전략은 만들어내는 백테스트를 한다는 것입니다. 하지만 AI는 과거의 데이터 경험에 기반하여 정해진 과거에 최고의 수익을 내줄 자산이 아닌, 과거까지의 데이터가 담긴 현재시점에서 최고의 보상을 제공할 자산군을 찾아줄 수 있다는 것입니다.

 

강화학습을 위해 시장을 환경으로 세팅하고 투자자라는 가상의 에이전트를 두어서
에이전트가 시장의 시그널들을 환경의 상태 단계로 정의하고, 과거 시장데이터를 학습하고
시장의 계절별로 유리한 자산군들을 동적으로 바꾸는 전략을 만들어낼 수 있습니다.


chatGPT가 등장하고 개개인마다 느낀 점들이 다르겠지만

개인적으로 저는 어서 서두를 때라고 생각하고 있습니다.

세상에 가치를 주는 여러 서비스들을 생기는 외적인 모습은 같지만

내부적으론 데이터를 수집하고 분석하고 응용할 수 있고 서비스에 그것을 녹여낼 수 있는 힘이 필요할 때입니다.

저도 공부하면서 늘 부족하고 어렵지만 그래도 문제를 조금씩 개선하고 더 많은 사람들에게 조그만 가치라도 전해드릴 수 있어 

이를 지속할 수 있는 힘이 되는 것 같습니다. 앞으로도 더 지켜봐 주시기 바랍니다. 감사합니다.