"오늘날 농부들이 사용하는 머신러닝의 양은 놀라울 정도로 많다. ……(중략)……. 유사하게 우리가 몇 년 후에 되돌아볼 것이라고 생각하는데, 머신러닝은 자산 관리의 중요한 측면이 될 것이다. 그리고 농업에서와 마찬가지로 이러한 변혁이 하루아침에 일어나지는 않을지언정 앞으로 나아가는 방향은 오직 한 가지뿐임이 분명하다. "
자산운용을 위한 금융 머신러닝 - 마르코스 로페즈 데 프라도
요즘 너무 바빠서 개인 블로그에 많이 소홀해 있었다.그래서 그동안 소홀했던 것을 보상(?)하는 차원으로, 틈틈이 구현해본 투자 로직을 한 번 올려본다. 물론 본 포스트에서 올리는 투자 로직은 당연히 내가 홀로 구상한게 아니며, 삼성증권 퀀트 리서치 페이퍼의 내용을 기반으로 좀 변형한 것이다. (그리고 결론부터 말하자면 내가 구현한 모델의 성과는 매우 좋지 않다.)
우선, 해당 삼성증권 퀀트 리서치 페이퍼의 주된 내용은 나이브 베이즈 모델(Naive Bayes Model ;朴素贝叶斯模型)을 바탕으로한 주식 투자 전략이다. 참고로 나이브 베이즈 모델은 문서 분류기에 주로 뛰어난 성능을 보였는데, 이러한 "분류"라는 성능에 주목해 주식 투자에 접목한 아이디어이다. 그럼 "무엇을 분류하는가?"라는 질문이 나올 수 있는데,주식 종목을 Winner 혹은 Loser로 분류한다. 그러면 그걸 어떻게 분류하는가?라는 꼬리 질문이 나오는데, 그게 바로 나이브 베이즈 모델의 원리와도 직결되는 부분이다.
왼쪽의 Ck가 Winner(C1) 혹은 Loser(C2)라고 가정하자. 그리고 오른쪽의 x1,……,xn은 우리가 생각할 수 있는, 종목이 Winner가 될지 Loser가 될지 결정하는 여러가지 독립변수들 혹은 팩터들(ex : 샤프 지수, ROE,EPS,PER등)이다. 그리고 우리는 오른쪽에 위치한 여러가지 독립변수들을 서로 (조건부) 독립적이라고 가정한다. 그리고 우리는 어떤 종목들에 대해서 아무것도 모른다. 정말 중요한 가정이고 이 모델이 왜 나이브하다고 불리는지 알 수 있게해주는 부분이기도 하다. 그러면 우리는 저 표현식을, "x1,……,xn가 발생했을 때, 종목이 Winner(Loser)일 확률"이라고 해석할 수 있다.참고로 해당 확률을 바로 사후확률이라고 하며, 그게 우리가 바로 알고 싶은 정보이다. 그러면 저 확률은 도대체 어떻게 구할까?
여기서 바로 그 유명한 베이즈 공식이 나온다. 베이즈 공식은 유명하기도 하고 따로 여기서는 다루지 않겠다. 아무튼 베이즈 공식에 따라서 우리는 위에서 구하고 싶은 저 확률을 이렇게 바꿀 수 있다.여기까지 온 후, 다음 단계로 넘어가기 전에 짚고 가야할 점은 바로 P(Ck)와 P(X)이다.
(1) P(Ck)의 경우, 사전 확률이라고도 한다. (Winner 인 종목 수 / 전체 종목 수)라고 볼 수도 있겠다.(반대의 경우 Loser)
(2) P(X)는 여기서 정규화를 위한 부분이다. 뒤에서 이야기하겠지만, 나이브 베이즈 "이진" 분류기라서 P(X)가 큰 의미가 없다. 생략이 가능하다.
우리가 나이브 베이즈 모델을 구축하기 위해서 P(Ck)와 P(X)는 큰 의미가 없다. 우리가 알고 싶은 값은 결국, P(C1|X)와 P(C2|X)이다. 이를 베이즈 공식으로 바꿔서 표현하면 각각 {P(C1)P(X|C1)/P(X)}, {P(C2)P(X|C2)/P(X)}로 변환이 가능하다. 그런데 생각해보면, 나이브 베이즈 분류기는 어떤 종목을 분류할 때, 결국에는 이 두 확률을 기반으로, 즉 어느 확률이 더 큰지 보고 해당 종목이 Winner인지 Loser인지 판단한다. 따라서
{P(C1)P(X|C1)/P(X)} > {P(C2)P(X|C2)/P(X)} OR {P(C1)P(X|C1)/P(X)} < {P(C2)P(X|C2)/P(X)}
라는 문제로 귀결된다. 그렇다면 부등식의 경우라서 P(X)는 제거가 가능하다. 뿐만 아니라, 사전 확률인 P(Ck) = P(C1) = P(C2) = 0.5로 설정 가능한데, 그 이유는 우리는 현재 아무것도 모르는 상태이기 때문이다. 어떠한 종목에 대해서 아무것도 모른다면, 그냥 결과 확률도 각각 0.5로 설정하는 것이 가장 합리적이다. 그렇다면 결국에는 P(C1) = P(C2)이고, 부등식에서는 제거가 가능하다. 이 두 개를 제거하면 이런 식이 나온다.
{P(X|C1) > P(X|C2)} OR {P(X|C1) < P(X|C2)}
여기까지 왔으면 그래서 저게 뭘 하고 싶은건지 궁금할 것이다. 처음에 했던 가정을 떠올려보면, x1,……,xn은 서로 독립이라는 가정이 있었다.그러면 P(X|Ck)는 P(x1|Ck) * P(x2|Ck) * P(x3|Ck) * …… * P(xn|Ck)로 분리가 가능하다. 따라서 우리는 드디어 (X|Ck)라는 우도 함수를 추정할 수 있다. 어떻게 추정하냐고? 밑의 식으로 추정이 가능하다.
그럼 결과적으로, 우리는 "x1,……,xn가 발생했을 때, 종목이 Winner(Loser)일 확률"을 구할 수 있게된다.
지금까지 주식투자 전략을 위한 나이브 베이즈 모형의 로직을 간단히 설계해 봤다. 구체적으로 들어가면 매우 복잡하므로 본 포스트에서는 다루지 않겠다. 다룰 능력도 없고 나랑 비교도 안되게 뛰어나신 분들이 이미 인터넷에 자세하게 정리해 놓으셨다. 다음 포스트부터는 파이썬으로 구현해 본 것을 정리해 보겠다.
'투자 분석 > 퀀트' 카테고리의 다른 글
나이브 베이즈 모형과 주식투자전략 - (2) (1) | 2022.09.26 |
---|
댓글