[리뷰] R을 이용한 퀀트 투자 포트폴리오 만들기



제이펍 출판사의 "R을 이용한 퀀트 투자 포트폴리오 만들기(이현열 저)"를 읽고 작성한 리뷰입니다.

표지


퀀트 포트폴리오 전략의 기초에서 백테스트에 이르기까지 데이터 사이언스가 금융 도메인 지식을 만났을 때 필요로하는 핵심 지식들을 깔끔하고 이해하기 쉽게 정리한 책이다.

구현 과정은 R 언어를 활용하는데 요소요소 R의 강점을 잘 표현하고 있어 R을 제대로 쓰기에도 좋은 지침서라는 생각이 든다. 크롤링 과정으로 R의 Tidyverse 철학을 느껴볼 수 있고, 8장의 dplyr 데이터 분석 패턴이라는 징검다리를 건너, 각종 논문에 등장하는 수식을 통계 패키지를 활용해 한두줄의 코드로 깔끔하게 분석하는 과정을 통해 R을 어떻게 사용해야 하는지 거침없이 표현하고 있다.

책을 읽으며 느꼈던 장점과 단점을 중심으로 리뷰를 시작해보겠다.


  • 책의 백미, 퀀트의 기초
    본 도서의 백미는 9 ~ 13장에 이르는 퀀트의 기초 내용을 간결하고 쉽게 정리한 점이다. 퀀트를 제대로 이해하려면 금융 공학에 대한 기본 지식, 논문 등의 연구 자료, 수식 및 도출 과정들이 모두 포함되어야 할 텐데 이들을 모두 포함하면 너무 난잡해지거나 분량 측면에서 감당하기 어려운 책이 되었을 것이다.

    필수 내용들이 하나도 빠지지 않으면서도 설명은 전체 맥락을 이해하는데 필수적인 부분만 다루고 수식 또한 논문 수준의 수식보다는 직관적으로 일반인들이 이해하기 쉬운 형태의 전개로 표현하는 등 짧은 지면에 핵심을 잘 간추리는 저자의 전달력에 놀랐다. 마치 논문과 구현의 경계에서 가장 쉬운 지름길을 찾아가는 과정 같았다.

    증권사에서 핀테크 스타트업에 이르기까지 풍부한 실전 경험을 바탕으로 패스트캠퍼스에서 R과 퀀트 투자 강의를 맡으며 퀀트 투자의 대중화를 위해 노력한다는 저자의 소개가 무색하지 않게 실력이 뛰어난 고수가 전달력까지 좋으면 이런 멋진 책이 탄생하는 구나 라는 생각이 들었다.

    그동안 퀀트 관련 여러 책들을 읽어봤고 논문들도 찾아봤는데 블랙-숄즈 방정식과 같이 이미 고전이 되어버린 방정식을 구현해본다던가, 기초를 건너뛰고 최근 주류인 딥러닝의 CNN, GAN 같은 기술을 접목할 때마다 기본 실력이 부족해서 답답했던 기억이 있다.

    반면 본 도서에서는 포트폴리오 운용 전략에 해당하는 종목 선정, 포트폴리오 구성, 백테스트 및 평가에 이르는 일련의 기초 과정의 핵심이 잘 정리되어 있어 그동안 내가 어떤 기초가 부족했던 것인지 일종의 미싱 링크를 찾은 느낌이었다.


본 서에서 다루는 퀀트의 기초 내용을 간단히 소개하면 다음과 같다.

  • 종목선정
    • 팩터(Factor) : 수익률에 영향을 미치는 요소
    • 베타(Beta) : 개별 주식이 전체 주식시장 변동에 반응하는 정도
    • 저변동성 효과 : 변동성이 낮은 종목들의 수익률이 높은 효과
    • 모멘텀 : 추세. 상승 추세는 지속적으로 상승하고, 하락 추세는 지속적으로 하락하는 관점
    • 밸류 : 기업의 가치. PER, PBR, PCR, PSR 등
    • 퀄리티 : 기업의 우량성. F-Score FSCORE_211
    • 섹터 중립 포트폴리오 : 모멘텀 등 팩터들이 특정 섹터의 호황기에 동일 섹터의 모든 종목이 함께 움직이는 경향인 쏠림 현상을 제거한 포트폴리오 구성 방법
    • 조엘 그린블라트 마법의 공식 구현
    • 멀티팩터 포트폴리오 : 위에서 배운 모든 팩터들과 이론들을 결합하여 지표를 설정해보는 과정으로 복습에도 도움이 되고 데이터 사이언스가 금융이라는 도메인을 만났을 때 어떤 작업이 이루어지는지 기본 흐름을 맛볼 수 있었다.
  • 포트폴리오 구성
    • 최소분산 포트폴리오 : 변동성이 최소인 포트폴리오로 고정된 분산-공분산 행렬에 대한 변동성이 최소가 되는 가중치 w를 찾는 최적화 문제 최소분산_266
    • 최대분산효과 포트폴리오 : 상관관계가 낮아질수록 포트폴리오의 변동성이 낮아진다는 효과를 이용하여 분산효과를 최대로 하는 포트폴리오 구성 방법 최대분산_267
      최대분산_277
    • 위험균형 포트폴리오 : 특정 자산의 비중을 증가시켰을 때 전체 포트폴리오의 위험성 증가 여부를 확인하여 위험 기여도를 산정. 편미분 개념.
    • 인덱스 및 인핸스트 인덱스 포트폴리오 : 액티브, 패시브 전략별 포트폴리오
  • 포트폴리오 백테스트
    • 현재 전략을 과거부터 실행 시 어떤 성과가 발생하는지 테스트해보는 과정
    • 60대 40 포트폴리오 백테스트 : 주식과 채권에 각각 60%, 40% 투자를 가정
    • 시점 선택 전략 백테스트 : 메브 파버의 논문을 활용한 전략으로 과거 10개월 이평선을 활용
    • 동적 자산배분 백테스트 : 지금까지 배운 모든 것들을 응용해보는 과정인데 이 파트가 없었으면 반쪽자리 백테스트가 되었을 것이다. 이 책이 가치있다고 생각한 부분 중 하나이며 앞서 배웠던 것들을 유기적으로 연결해볼 수 있다. 동적자산_321
  • 성과 및 위험 평가
    • 백테스트로 구한 수익률의 성과 및 위험성을 평가하는 과정.
    • QMJ 팩터 : 우량성이 높은 종목들을 매수하고, 낮은 종목들을 공매도 하는 전략을 지수 형태로 표기

  • R의 강력함을 잘 표현하는 책(R vs Python)
    이 책의 또 다른 장점 중 하나는 R을 제대로 쓰면 얼마나 강력한지 무기가 될 수 있는지 보여준다는 점에 있다. 개인적으로 프로그래머이기에 Python을 더 많이 활용하고는 있지만 몇가지 특수한 상황은 R과 영원히 작별할 수 없게 만들곤 한다.

    첫째, dplyr 패키지를 활용한 일련의 데이터 분석 과정은 Python의 Pandas를 활용할 때보다 고정된 패턴이 있어 조금 더 직관적이고 생산적이다.

    Python의 최대 장점은 유연성에 있다고 생각한다. 데이터가 어떻게 생겨먹고 분석 기법이 무엇이든 뭐든지 표현하고 가공할 수 있다. 반면 그 유연성이 때로는 독이 되어 능숙하지 않은 기법을 찾아 쓸 때는 많은 시행착오를 거쳐야 하고 그 만큼 시간이 낭비되어 생산성을 저해하곤 한다.

    반면 R은 유연성이 다소 떨어질진 몰라도 join, glimpse, rename, mutate, filter, summarize, arrange, group by 등으로 이어지는 dplyr의 마법의 분석 패턴을 하나 잘 익혀 놓으면 Tabular 형식의 데이터 80%는 이 패턴 하나로 몇분 만에 깔끔하고 직관적으로 분석할 수 있다. 이 책에서는 8장의 절반만 할애해서 R의 핵심 기능을 너무 잘 표현하고 있다.

    프로그래밍에도 좋은 패턴과 예제 하나를 잘 익혀두면 나머지는 시간과 경험의 문제에 지나지 않는다. 비슷한 예로 웹프로그래밍을 처음 배울 때 게시판 예제 하나만 잘 짜도 대부분의 웹 프로그래밍 80%는 익히는 셈이라 할 수 있다. 나머지 디테일한 부분은 그저 시간과 경험의 싸움일 뿐이다.

    시중에 나온 R 서적이 상당히 많은데 내용은 충분하지만 기능별로 모두 파편화되어 돌아서면 잊어먹기 딱 좋은 구성이다. 하지만 이 책은 달랐다. 8장에서 펼쳐지는 데이터 분석의 기본 패턴을 잘 익혀놓으면 명확한 개념의 큰 물줄기를 얻을 수 있다. 더불어 주식 종목정보 분석이라는 흥미로운 유인책은 나름의 학습 동기를 부여해주기에 분석의 과정을 더욱 이해하기 쉬워지며 dplyr가 가지는 R의 매력을 여실히 보여준다.

    둘째, Tidyverse로 대표되는 R의 철학은 상당히 매력적인데 이 책이 그 장점을 잘 활용하고 있다. 예를 들면 JavaScript에는 Callback 지옥이 한 때 유명했는데 쉽게 말하자면 괄호의 지옥이다.

    A(B(C()))와 같이 일련의 함수 호출 과정속에 인자 혹은 옵션 몇가지만 추가되면 괄호속에 파묻혀 직관적으로 한 눈에 잘 들어오지 않는다. 이를 해결하기 위해 Promise나 async, wait 등의 기법이 나왔는데 Tidyverse에서는 이를 해결하지 위해 파이프 오퍼레이터(%>%)를 활용하여 논리적인 기능의 흐름의 경계선을 명확히 구분하여 직관적인 이해를 돕는다.

    셋째, 통계에 특화된 R의 기능이다. 9장의 예제에서도 나오지만 베타(개별 주식이 전체 주식 시장의 변동에 반응하는 정도)를 구하는데 필요한 R의 코드는 고작 한 줄이다. ‘'’R lm(ri ~ rm) ‘’’ 긴 통계학의 역사적인 아이디어를 포뮬러를 활용해 한 줄의 명령어로 쉽게 파악할 수 있다는 점은 R에서 쉽게 손을 뗄 수 없는 매력 중 하나이다.

    그 외에도 ggplot2가 Python 진영의 시각화 라이브러리에 비해 월등한 점, bookdown 패키지 등 산출물과의 연계 기능이 뛰어난 점, 유연성을 포기하고 일정 패턴을 가짐으로써 초보자의 진입 장벽이 낮다는 점 등이 부수적인 장점이라고 생각한다.

    물론 그렇다고 Python이 가진 범용 프로그래밍 언어 고유의 장점을 상쇄할 순 없다. 예를 들어 주식 데이터의 캔들 그림을 인풋 데이터로 활용하여 CNN으로 예측 분석 모델을 구현한다거나, RNN을 활용하여 주가 방향성을 분류, 오토인코더를 활용하여 주가 데이터를 생성하는 등의 딥러닝 위주 프로그래밍은 Python이 훨씬 편리하며 End-to-End의 구현, Serving과 배포 측면에서도 R이 Python을 따라가기엔 부족한 느낌이 든다.

    이런 이유들로 인해 조금 귀찮을지라도 Python과 R 두마리 토끼를 쫓게 되었는데 이 중 R의 장점을 이 책에서 잘 표현하고 있기에 R을 유기적으로 이해하고 빠르게 활용하고 싶은 독자에게 많은 도움이 될 수 있는 책이라는 생각이 들었다.


  • 기타(크롤링 등 프로그래밍 언어로써의 R)
    평소 크롤링은 Python 언어를 활용하는 편이라 이 책을 통해 R을 이용해 크롤링 하는 방법을 처음으로 접했는데 문법이 단순하고 코드량도 적어 참 깔끔하다는 생각을 했다. 프로그래머가 아닌 분들에게는 R 크롤링도 좋은 선택이 되겠다는 생각이 들었다.

    그 외 각종 공시정보를 어느 사이트에서 얻을 수 있는지, 제공되는 API에는 어떤 것들이 있고 발급 받는 방법 등이 잘 정리되어 있어 조사하는 시간을 줄일 수 있다는 점도 책의 장점이다.

    책의 전반부(1 ~ 7장)는 주로 크롤링과 데이터 수집, 가공에 대한 내용을 다루고 있는데 과정 중간마다 R의 기본 문법을 잘 정리해주고 있어 R의 다양한 기능 중 필요한 것만 쏙 뽑아먹는 느낌이었다.

    이 책은 어느정도 R 문법을 아는 분들을 대상으로 쓰여진 책이지만 난 오히려 이 책으로 굵직한 맥락을 숙지하고 필요할 때 거꾸로 레퍼런스를 찾아보는 것이 시간대비 학습 능률에 도움이 되겠다는 생각이 든다.

    개인적으로는 후반부(8 ~ 13장)에 관심이 많아 해당 부분 위주의 리뷰를 작성했지만 독자마다 필요로 하는 지식이 다를 수 있으므로 R의 기본 문법과 크롤링 등의 기능에 관심있는 독자라면 전반부(1 ~ 7장)의 내용도 매우 유익할 것 같다.


  • 아쉬운 점
    개인적으로 너무 마음에 들었던 책인지라 칭찬 일색으로 일관했기에 다소 아쉬웠던 점도 정리해 보려한다.

    • 퀀트 트레이딩 전략 및 심화 과정도 자세히 다루는 후속편이 나왔으면 좋겠다. 저자 분의 내공과 전달력이면 이 부분도 왠지 자신감이 생길것 같다. 물론 그러면 또 어렵다고 악평을 하는 독자 분들이 많아지는 것도 알고 있다. 책을 좋아하는 사람으로써, 입문서보다는 중급서에 관심이 많아지게 된 세월 때문에 이해하기 어려우면 비추하는 리뷰 문화에 할 말이 참 많다..

    • 딥러닝과 융합된 R의 모습도 보고 싶은데 이 역시 본 도서에서 다룰 일은 아니고 후속편으로 등장했으면 좋겠다. 적고 보니 후기작에 대한 의견이 되어버린 것 같은데 사실 범위 정도를 제외하고는 본 도서를 흠잡기 어렵다.


수식과 기본을 놓치지 않고도 퀀트의 기초 지식을 쉽게 습득하고 싶은 분들께, R을 R답게 활용하고 싶은 분들께, 데이터 사이언스가 금융 도메인 지식을 만나면 어떻게 활용되는지 알고 싶은 분들께 추천드린다.






© 2019.04. by theorydb

Powered by theorydb