リスクパリティポートフォリオの構築手法の紹介
近年、リスクパリティ(別名:リスク等価)によるポートフォリオ構築が注目を集めています。従前より広く知られてきた平均分散モデルによるポートフォリオ構築は、ポートフォリオのリスク水準が選択可能である反面、期待収益率()の推定が難しく入力変数が安定的ではないという大きな欠点がありました。これに対して、リスクパリティは分散のみを入力変数とした、リスクベースのポートフォリオ構築手法です*1。一般的には分散は期待収益率と比べて推定が行いやすいと言われており、よってリスクベースのポートフォリオ構築手法は、平均分散モデルよりも入力変数がロバストであると言えます。また、リスクパリティポートフォリオはシャープレシオ比で優れた投資成果も指摘されています*2。
リスクパリティによるポートフォリオ構築は、「リスク量が同じならば、それによって得られるリターンには資産間での差は無い」という立場を取ります。具体的には、「ポートフォリオ内の各アセットクラスのリスク寄与度を均一にする」ことで、ポートフォリオの構築を実現します。
では「ポートフォリオ内の各アセットクラスのリスク寄与度を均一にする」とはどういうことか、数学的に考えてみましょう。リスク寄与度は、資産の微小変動に対するポートフォリオの総リスク微小変動として定義すると、数式では以下のように記述できます。なおを資産の投資比率、をポートフォリオ全体のリスク(標準偏差)とします。
資産のリスク寄与度
ここで、
これがポートフォリオに組み入れるすべての資産について等しくなるようなを求めるポートフォリオ選択問題を考えると。
これがリスクパリティのコンセプトです。ところが上記の数式をよく検討してみると、投資比率をあらわすを変動させた時に、両辺のまでもが変わってしまい、解析的には解けそうにありません。
このような問題を非線形方程式と呼び、数値的な解法が提唱されています。当ブログでは既存の論文*3、またその他コースマテリアル*4を参考にして、Newton法による数値解を求めるアルゴリズムを独自にR言語で実装しました。
rm(list=ls(all.names=TRUE)) #全変数をクリア epsilon <- 0.0001 #R: 相関行列の入力 R <- matrix( c(1,0.16,-0.06,-0.05 ,0.16,1,-0.25,0.27 ,-0.06,-0.25,1,0.56 ,-0.05,0.27,0.56,1) ,nrow=4,ncol=4) #var: リスクベクトルの入力 var <- diag(c(0.0540,0.2215,0.1325,0.1959),nrow=4,ncol=4) V <- var %*% R %*% var N <- nrow(V) #w: 初期条件, y_0: 初期条件 w <- matrix(1/N,N) y_n <- matrix(cbind(t(w), 0.3)) i <- 0 while (1) { lambda <- rev(y_n)[1] w = y_n[1:N] J_n <- rbind(cbind(V+lambda*diag((1/w)^2),(-1)*1/w),cbind(t(matrix(1,nrow=N,ncol=1)),0)) #F_n F_n <- rbind(V %*% w - lambda*(1/w),t(matrix(1,nrow=N,ncol=1)) %*% w -1) y_n1 <- y_n - solve(J_n) %*% F_n if ((sqrt(sum((y_n1 - y_n)*(y_n1 - y_n))) < epsilon)) { break } y_n <- y_n1 #i: Newton法の繰り返し回数を計測 i <- i + 1 } #y_n[1]〜y_n[N]までが各資産の投資比率をあらわす #y_n[N+1]は各資産のリスク寄与度をあらわす print(y_n) #sigma: ポートフォリオのリスク sigma <- sqrt(t(w) %*% V %*% w) print(sigma) #y_n[N+1]は各資産のリスク寄与度だから、その総計はポートフォリオのリスク=sigmaに一致 print(sqrt(y_n[N+1]*N))
入力すべき変数はR:相関行列 および var:リスクベクトルの2つです。上記の例では国内債券、国内株式、外国債券、外国株式の4資産にフォーカスし、年金積立金管理運用独立行政法人(GPIF)の公表している4資産のリスク・相関係数を利用しています*5。その実行結果、すなわちリスクパリティポートフォリオにおける投資比率は以下の通りです。
> print(y_n)
[,1]
[1,] 0.5444692977 → 国内債券54%
[2,] 0.1298101306 → 国内株式13%
[3,] 0.2181479252 → 外国債券22%
[4,] 0.1075726465 → 外国株式11%
[5,] 0.0009178011
Rとvarの入力を変えていただければ何資産でも対応できますので、是非試してみてください。
*1:"Risk-Parity versus Mean-Variance", UBS Quant Keys, 16 May 2014
*2:"リスクパリティ・ポートフォリオはこれからも優れるのか", 大森(三井住友信託銀行), 2013
*3:"Efficient Algorithms for Computing Risk Parity Portfolio Weights", Denis Chaves, Jason Hsu, Feifei Li, and Omid Shakernia, 2012
*4:"EE103 - Applied Numerical Computing (Fall 2011-12)", Prof. L. Vandenberghe UCLA