brunch

You can make anything
by writing

C.S.Lewis

by Raphael Lee Mar 05. 2018

[번역] 포트폴리오 최적화 I

삼남매 아빠 = 애국자

원본 주소: Markowitz’s Efficient Frontier in Python [Part 1/2]

개인적으로 의미를 정확하게 이해하기 위해 번역하였으며, 파이썬 코드는 페이지 흐름을 위해 이미지로 붙여 넣었으며, 실제 코드는 위의 원본 링크에서 보시는 것을 권장합니다.


Image Credit: http://hmarkowitz.com

Harry Markowitz 의 금융과 경제에 관련한 세상에 대한 공헌은 아무리 강조해도 충분하지 않을 만큼 지대합니다. 그는 1952년에 발표한 "포트폴리오 선택"에 대한 획기적인 논문을 통해 "현대 포트폴리오 이론(Modern Portfolio Theory, 이하 MPT)"의 선구자로 넓게 인정받고 있습니다. 그 공헌으로 1990년에 노벨경제학상을 수상하였습니다.

MPT는 모든 비즈니스와 금융 군에 있어 사실상 세계가 연결되어 있다고 주장합니다. 이 글(2 종류의 데이터로 구성하는 것)에서는 이론에 대한 기반을 설명하는 방식으로 실제 주식 데이터를 사용하여 파이썬으로 구현하여 보여줄 것입니다.


그래서, MPT는 무엇이고 왜 파이썬 구현하는 수고를 들여서까지 어떻게 동작하는지 이해해야 할까요?

대부분의 이론처럼 MPT는 실제 세상에 대한 몇 가지 가정을 가지고 개발되었습니다. MPT를 설명하는 것은 그 가정을 표현하는데서부터 시작합니다.


MPT의 가정

- 투자자는 이성적이고 가능하면 언제나 위험을 피하려 합니다.

- 투자자는 그들이 투자한 최대 결과물을 얻으려 합니다.

- 모든 투자자는 기대하는 수익을 극대화시키기 위한 목적을 공유합니다.

- 시장에서 수수료와 세금은 고려하지 않습니다.

- 모든 투자자는 투자 결정을 위한 모든 필요한 정보에 대해 같은 자료와 레벨에 접근할 수 있습니다.

- 투자자는 위험도에 무관하게 자금을 조달할 수 있습니다.


MPT는 리스크를 싫어하는 투자자가 현 수준의 리스크에서 최대의 수익을 내는 포트폴리오를 어떻게 구성하는지에 대한 내용입니다. MPT로부터 얻는 획기적인 점은, 다양한 투자에 대한 리스크와 수익의 특징에 대해 독립적으로 분석할 필요는 없으나, 투자자금을 어떻게 구성하느냐에 따라 포트폴리오의 성과에 영향 미친다는 것입니다. 그러므로, 이 MPT에서 가정하는 것은 투자자가 더 높은 수익률을 얻기 위해서는 추가적인 리스크가 발생한다는 것으로 가정합니다. 즉, 하이리스크 하이리턴입니다. (High risk, High Reward)


이 이론에서 근본적으로 주목할 점은 투자자를 위해 주어진 수준의 리스크 대비 최대 기대 수익을 제공하는 효율적인 영역(Efficient Frontier)이라 부르는 방식으로 포트폴리오를 구성할 수 있는 가능성이 있다는 것입니다.

인내심이 약한 투자자는 최저 리스크 또는 최악의 상황을 가정하여 그것 대비 최대 수익성을 얻으려 하며, 반대의 경우도 마찬가지입니다. 투자자의 리스크에 대한 인내심은 포트폴리오의 효율에 대한 유형을 결정합니다.

아래 다이어그램은 효율적인 영역(Efficient Frontier)에 대한 전반을 보여줍니다.


이전 글에서 다룬 바와 같이 증권에 대해 포트폴리오 구성을 달리하면 그에 대한 기대 수익률은 당연히 다르게 나타납니다

Markowitz 의 증명 이후 중요한 것 중 하나는 포트폴리오 구성에 대해 다양한 효율로 구성이 가능하다는 것입니다. 간단하게 증권에 대한 다양한 비중으로 포트폴리오를 구성한 후, 투자자들이 자산과 각각의 포트폴리오 내에서 위험 대비 수익률이 자연스럽게 변하는 과정에서, 투자자가 설정한 위험 대비 최대 기대 수익을 달성하도록 하며, 그 과정에 대해 살펴볼 것입니다. 


그래서, 실제 주식 데이터를 사용하여 파이썬으로 어떻게 효율적인 영역(Efficient Frontier)을 생성하는지 설명하겠습니다.


Quandl에서 첫 데이터를 입수해 봅시다.

데이터 입수 코드

코드 수행 결과는 다음과 같습니다.

data.head() 의 결과


다음은 논쟁 절차가 있는 약간 작은 데이터입니다. ticker를 기준으로 수정 종가를 정렬합니다.

Output of table.head()

정렬하는 코드 수행 결과는 다음과 같습니다.


이제 거의 다 했습니다. 효율적인 영역(Efficient Frontier)을 얻기 위해, 우리는 가상의 포트폴리오 조합에 대한 시뮬레이션이 필요합니다. (이 경우에 50,000 종류의 다른 조합에 대한 포트폴리오입니다.)

포트폴리오 시뮬레이션 코드

아래는 코드 수행 결과입니다.

Output of df.head()

좋아요! 복잡한 과정은 지금 끝났습니다. 우리의 효율적인 영역(Efficient frontier)에 대해 그래프로 표현해 봅시다.

그래프로 표현하는 코드

짜잔!

효율적인 영역 (Efficeint Frontier)

꽤 긴 글이었습니다만, 저는 여러분이 MPT에 대해 잘 이해할 수 있었기를 바랍니다. 다음 글은 이번 글에서 생성한 세트로 최적의 포트폴리오를 찾는 것으로 MPT 시리즈를 마무리할 예정입니다.


모든 소스코드는 깃허브 페이지에 공개되어 있으며, 깃허브를 사용하지 않는다면 이 포스트의 소스 코드를 사용하시길 바랍니다.



작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari