본문 바로가기

Data & AI

[Data] 1월 주식 데이터 분석과 인공지능의 필요성

길었던 하락을 지속했던 2022년이 끝나고 첫 한 달간 주식 시장 데이터 리뷰입니다. 

 

앞으로 매달 주기적으로 주식 데이터 리뷰를 진행할 예정입니다.

 

우리가 매일 보는 주가 외에 한 달 동안 눈에는 보이지 않았던 시장의 시그널들을 찾아보는 게 목표입니다. 

1월 주식시장 랠리와 관련된 유튜브 영상(할투, 소몽)

제가 가끔 챙겨보는 유튜브 채널들에서도 1월 랠리에 대해서 다루고 있습니다. 

워낙 1월에 많은 상승이 있었고, 상승에 기대어 조금씩 주식 시장에 관심을 갖는 사람들도 늘어나게 되었습니다.

 

나스닥 100 경우 1월 한 달 8.83% 상승했고 S&P500, 다우지수도 크게 상승했습니다.  

 

한국 주식시장의 경우도 나스닥100 지수와 비슷하게 상승했습니다. 

 

1개월간 코스피 지수를 추종하는 ETF를 매수했으면 9% 가까운 수익을 거둘 수 있었습니다. 

 

정성적인 이유로는 기준금리의 최상단에 다가워지면서 기대감에 상승한다고 합니다.

 

그렇다면 이 기대감으로 상승했던 한 달간의 시장을 좀 더 자세히 들여다보겠습니다.

 

저의 AI 알고리즘은 매일 주식 가치지표 데이터를 수집합니다.

 

가치지표로는 PER, PBR, ROE, 영업이익 등이 있습니다.

 

1월 1일 기준 저의 AWS DynamoDB에 수집된 데이터를 가져와보겠습니다. 

 

총 2558개의 주식의 가치지표를 가지고 있습니다. 

그중 간단한 지표들만 가져와서 데이터를 분석해 보겠습니다. 

 

그리고 한 달간의 주식데이터를 가져오겠습니다. 

 

FinanceDataReader 라이브러리를 통해 가져왔고,

 

target_dt = '20230101', today_dt = '20230131'으로 파라미터가 세팅되어


1월 한 달간의 모든 주식 데이터를 조회/수익률을 계산하고 df_dict 딕셔너리에 담아둡니다. (주식종목코드 : 1달 주식 수익률)

 

import FinanceDataReader as fdr
import numpy as np
from datetime import datetime
# target_dt = '20230101'

today_dt = datetime.now().strftime('%Y%m%d')

df_dict = {}

for code in df.code:
    df_dict[code] = fdr.DataReader(code, target_dt, today_dt)['Change'].cumsum().apply(np.exp).iloc[-1]

 

이제 주식 수익률을 계산했으니

 

가치지표들을 기준으로 시장 데이터를 좀 더 분석해 보겠습니다. 

 

가져왔던 데이터들을 일단 하나의 DataFrame으로 합쳤고, 

 

가장 대표적으로 사용되는 PER, PBR 등에 대해서 살펴보겠습니다. 

 

df['per_qt'] = pd.qcut(df.PER, q=[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1], labels=[1,2,3,4,5,6,7,8,9,10])
df.groupby(['per_qt']).agg({'PER':'mean'}).plot(kind='bar')

per_qt로 PER 분위수를 계산하고 분위별 PER 평균을 막대차트로 나타내어보았습니다.

 

분위가 적을수록 PER도 낮습니다. 

 

참고로 PER이 음수인 경우는 주당 순이익(EPS)이 음수란 뜻입니다. 

 

 

이제 PER 분위별로 1월 한 달간 수익이 어느 정도인지 구분해서 출력해 보겠습니다. 

import matplotlib.pyplot as plt
fig, axes = plt.subplots(figsize=(20, 10))
(df.groupby('per_qt').agg({'returns':'mean'})-1).plot(kind='bar', ax=axes)

 

PER 분위별 수익의 평균입니다. 

전반적으로 높은 수익률을 기록하고 있으며 중간 분위일수록 수익이 적습니다. 

이 데이터에는 PER이 음수인 데이터들이 있으니 이를 필터링 해보겠습니다.
 

PER 양수인 주식들 중에서

 

분위가 낮을수록(저PER일수록) 수익률이 저조함을 볼 수 있습니다.
 
흔히 PER이 낮은 주식은 저평가되었다고 이야기합니다. 
 
하지만 시장 결과는 정반대죠?

 

일단 PBR 분위별로도 데이터를 살펴보겠습니다.

PBR 분위별 PBR 평균

 

import matplotlib.pyplot as plt
fig, axes = plt.subplots(figsize=(20, 10))
(df[df.PBR > 0].groupby('pbr_qt').agg({'returns':'mean'})-1).plot(kind='bar', ax=axes

PBR 같은 경우는 저 PBR의 경우에도 의미 있는 수익을 보여주었습니다. 


우리가 흔히 알고 있는 자산대비 저평가받는 주식에 수익을 기대하는 것에 부합합니다.  

 

 

그렇다면 왜 PER에선 우리가 아는 것과 다른 결과가 나왔고

 

PBR에서는 기대했던 결과가 나올까요?

 

개인적인 저의 생각을 "심리"와 "현금" 두 단어로 설명을 해보겠습니다.

 

 

주식에는 숫자로 측정되기 어려운 영역이 주식참여자들의 심리라고 생각합니다. 

 

1월 상승장은 길었던 하락장에 정말 오랜만의 상승장이었습니다. 

 

주식 시장 참여자들 저마다 매수할 종목에 대한 매수 기준과 원칙이 있겠지만

 

대부분은 오르는 주식을 따라 사는 경우가 많습니다. 

 

주식 가격이 오르면 자연스럽게 PER도 함께 높아지고 

 

상대적으로 높은 PER의 주식임에도 주식 참여자들의 심리에 맞물려 더 상승하는 모멘텀을 유지하지 않았을까 생각합니다.

 

 

 

그렇다면 PBR에선 왜 인간의 심리가 적용되지 않았을까

 

지금은 몇 년 만에 다시 고금리 시대로 향하고 있습니다. 물가상승률보다 기준금리가 높아지기 시작했고

 

현금은 쓰레기다라고 외치던 많은 유튜브 영상들이 사라지고

 

지금은 현금 모을 때라는 영상들로 채워지고 있습니다. 

 

Cash is Trash -> Cash is King으로 변하고 있습니다. 

 

금리가 높아지면 시중에 돈이 줄고 돈이 귀해지게 됩니다. 

 

PBR은 기업의 자산대비 주가입니다. 

 

자산이라고 해도 감가상각이 적용되는 실물자산과 현금성자산을 비교해 보긴 해야겠지만

 

자산이 많으면 급한 현금이 필요할 가능성이 낮습니다. 

 

고금리 시대에 많은 자산, 그리고 그에 반한 낮은 주가는 충분히 매력적으로 받아들여질 수 있어

 

시장의 자연스러운 선택을 받았을 수 있습니다.

 

 

 

 

하지만 진짜 이런 현상이 발생된 원인은 개개인의 생각과 의사결정이

고차원으로 융합되어 발현된 사건이고

 

지금 이걸 해석하는것도 결과론적인 해석이 될 수 있습니다.

 

즉, 시장은 1차원적인 생각을 넘어 시간 개념을 포함한 다차원으로 얽혀있습니다.

 

시장을 분석하기 위해선 우리 눈에 보이는 1차원적인 데이터(예를 들면 주가, 주관적 생각 따위)로는 시장을 해석할 수 없습니다. 

 

시장엔 많은 참여자들, 주식과는 상관없다고 생각했던

전혀 다른 분야의 대안데이터를 비롯해 많은 다양한 차원의 데이터들이 얽혀있습니다. 

 

그렇다고 인간이 직관적으로 더 높은 차원의 원인이 되는 특성들을 찾아낼 수 없습니다. 

 

마치 3차원에 사는 우리가 5차원, 6차원이 어떻게 시각화될지 모르는 것과 비슷합니다. 

 

 

저는 이런 고차원의 영역을 AI로 해석하려고 연구하는 사람입니다. 

제가 결과론적일 수 있고 개인적인 주관이 담길 수 있음에도 이런 데이터를 리뷰를 해보는 것도  더 나은 AI를 만들기 위함입니다. 

 

AI를 만드는건 요리사를 양성하는 것과 비슷합니다.

 

우리가 요리사에게 기초적인 재료만 주면 그에 준하는 수준의 요리를 기대합니다. 

 

하지만 잘 가공된 고급 식재료를 주면 그만큼 기대하는 결과물도 높을 것입니다. 

 

제가 AI에게 주식 가격데이터만 제공한다면

 

1월 한달 PER보다 PBR 지표가 더 의미 있을 것이다라고 해석할 수 있었을까요?

 

제가 주식 가격데이터와 미국 기준금리 데이터를 제공해주었다면

 

현재 다른 시기보다 금리가 높으며, 현금이 중요하다는 걸 알아차리고

 

PER보다 PBR이 더 의미 있는 지표가 될 것이라고 생각하기 더 쉬웠을 것입니다. 

 

우리가 1차원의 영역을 벗어나려고 노력해 1.2차원 수준의 데이터 특성이라도 찾아서 AI에게 쥐어주면

 

AI는 더 높은 차원의 문제와 상관관계를 분석해 볼 수 있습니다. 

 

워낙 다양하고 깊이 있는 학문이고, 적용하기 위해 많은 연구가 동반되어야 합니다. 

 

이 과정을 의미 있는 스토리들로 채우고

 

언제나 공유하고 베푸는 마음으로 임하겠습니다.