본문 바로가기
투자 분석/퀀트

나이브 베이즈 모형과 주식투자전략 - (1)

by swcha02 2022. 9. 26.

 

"오늘날 농부들이 사용하는 머신러닝의 양은 놀라울 정도로 많다. ……(중략)……. 유사하게 우리가 몇 년 후에 되돌아볼 것이라고 생각하는데, 머신러닝은 자산 관리의 중요한 측면이 될 것이다. 그리고 농업에서와 마찬가지로 이러한 변혁이 하루아침에 일어나지는 않을지언정 앞으로 나아가는 방향은 오직 한 가지뿐임이 분명하다. "

자산운용을 위한 금융 머신러닝 - 마르코스 로페즈 데 프라도

 

요즘 너무 바빠서 개인 블로그에 많이 소홀해 있었다.그래서 그동안 소홀했던 것을 보상(?)하는 차원으로, 틈틈이 구현해본 투자 로직을 한 번 올려본다. 물론 본 포스트에서 올리는 투자 로직은 당연히 내가 홀로 구상한게 아니며, 삼성증권 퀀트 리서치 페이퍼의 내용을 기반으로 좀 변형한 것이다. (그리고 결론부터 말하자면 내가 구현한 모델의 성과는 매우 좋지 않다.)

 

우선, 해당 삼성증권 퀀트 리서치 페이퍼의 주된 내용은 나이브 베이즈 모델(Naive Bayes Model ;朴素贝叶斯模型)을 바탕으로한 주식 투자 전략이다. 참고로 나이브 베이즈 모델은 문서 분류기에 주로 뛰어난 성능을 보였는데, 이러한 "분류"라는 성능에 주목해 주식 투자에 접목한 아이디어이다. 그럼 "무엇을 분류하는가?"라는 질문이 나올 수 있는데,주식 종목을 Winner 혹은 Loser로 분류한다. 그러면 그걸 어떻게 분류하는가?라는 꼬리 질문이 나오는데, 그게 바로 나이브 베이즈 모델의 원리와도 직결되는 부분이다.

 
출처: 위키피디아

 

왼쪽의 Ck가 Winner(C1) 혹은 Loser(C2)라고 가정하자. 그리고 오른쪽의 x1,……,xn은 우리가 생각할 수 있는, 종목이 Winner가 될지 Loser가 될지 결정하는 여러가지 독립변수들 혹은 팩터들(ex : 샤프 지수, ROE,EPS,PER등)이다. 그리고 우리는 오른쪽에 위치한 여러가지 독립변수들을 서로 (조건부) 독립적이라고 가정한다. 그리고 우리는 어떤 종목들에 대해서 아무것도 모른다. 정말 중요한 가정이고 이 모델이 왜 나이브하다고 불리는지 알 수 있게해주는 부분이기도 하다. 그러면 우리는 저 표현식을, "x1,……,xn가 발생했을 때, 종목이 Winner(Loser)일 확률"이라고 해석할 수 있다.참고로 해당 확률을 바로 사후확률이라고 하며, 그게 우리가 바로 알고 싶은 정보이다. 그러면 저 확률은 도대체 어떻게 구할까?

 

 
출처 : 위키피디아,볼드체 X는 위의 " x1,……,xn"를 의미

 

여기서 바로 그 유명한 베이즈 공식이 나온다. 베이즈 공식은 유명하기도 하고 따로 여기서는 다루지 않겠다. 아무튼 베이즈 공식에 따라서 우리는 위에서 구하고 싶은 저 확률을 이렇게 바꿀 수 있다.여기까지 온 후, 다음 단계로 넘어가기 전에 짚고 가야할 점은 바로 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)}

 

출처 : 위키피디아, 위의 논리에 따라 여기서 P(Ck)는 생략 가능

여기까지 왔으면 그래서 저게 뭘 하고 싶은건지 궁금할 것이다. 처음에 했던 가정을 떠올려보면, 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

댓글