どうでもしか勝たん

格が違うので卍卍卍

ポートフォリオ選択理論(Markowitz, 1952)

はじめに

今回から何度かに分けて金融系の記事を載せていきます。
主に金融経済学と呼ばれる分野に対する簡単(かつ本質的)な紹介をします。
実例に基づくPythonのコードを載せることで、納得感を抱いていただけるようにしました。
あくまで過去の研究の紹介であり、何か新しい発見をもたらすものではないことをご承知おきください。
予定としては以下のような3回に分けて記事を掲載しようと思います。

  1. ポートフォリオ選択理論(Markowitz, 1952)
  2. 資本資産価格モデル(Sharpe, 1964)
  3. 3ファクターモデル(Fama and French, 1993)

投資行動の原理

賢くお金稼ぎ、もとい資産運用をしたいという場合どのような行動をすれば良いのでしょうか。
例えば昨今で一番爆発力があるのは仮想通貨とかハイテク株に資産を投じることだと思いますが、なぜ誰もがそうするわけではないのでしょうか。
この問いについてはおそらく多くの人が「リスクが大きいから」と答えるかと思います。
その一方で、もっとも低リスクでお金を増やす方法である銀行預金は最近敬遠され気味です。
これはなぜかというと、「リターンが少ないから」でしょう。
つまり、人間は「リスクが少なく・リターンが高い」投資を追い求める存在なのです。
これはトレードオフとも呼ばれ、両方を同時には実現できないという点で大きな課題となっています。
これに対して「ポートフォリオ選択理論」という形で一定の答えを出したのがHarry Markowitzです。
今回は1952年に発表された論文、PORTFOLIO SELECTION*1の内容をご紹介します。

使用データと基本統計量

今回は米国のIBM社・American Express(AXP)社に投資することを考えます。*2
2社の株価はYahoo! Financeから取得し、年ベースに直したものを使用します。

#Import Libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import levy

# functions
def log_rtn(data):
    lg_data = np.log(data)
    lg_data_sft = lg_data.shift()
    rtn = lg_data - lg_data_sft
    rtn = rtn.dropna(how="any")
    return rtn

def load(name):
    data = pd.read_csv(name+".csv")
    data.columns = ["date", name]
    data.date = pd.to_datetime(data.date)
    data.set_index('date', inplace=True)
    return data

ライブラリをimportして関数を宣言して

# Load Data
IBM= load("IBM")
AXP = load("AXP")
# Log Return
IBM = log_rtn(IBM)
AXP = log_rtn(AXP)
# Concatenate
# "data" represents historical (yearly) returns as a matrix
data = pd.concat([IBM, AXP], axis=1, join="inner")

res = np.zeros([2,2])
res[0] = data.mean()*100
res[1] = data.std()*100
res = pd.DataFrame(res, index=["Mean", "Std"], columns=["IBM", "AXP"])
display(res)
display(data.corr())
  1. それぞれの銘柄に対して年次収益率を計算する
  2. 年次収益率の平均・標準偏差を計算する

という形でIBM・AXPのリターン特性を出しました。単位は全て(%/Year)です。

IBM AXP
Mean 3.956971 7.029903
Std 24.478995 30.758780

IBMは年平均収益率が3.9%, 収益率のブレを表す標準偏差が24.4%
AXPはそれぞれ7.0%, 30.7%となっております。

また、相関行列は以下のようになります。

IBM AXP
IBM 1.000000 0.478393
AXP 0.478393 1.000000

この2銘柄間の相関係数は0.47であることがわかります。
以上の計算は価格ベースではなくて、収益率ベースで行なっていることにご注意ください。(理由はこちら:見落としがちな相関係数の話 - ii_da_ba_shi’s blog

モデリングにおける「仮定」

もっとも大事なことを今から書きます。現代ポートフォリオ理論における仮定、いわば注意書きです。
実際の金融市場は複雑すぎるので、いくつかの仮定を置くことでモデリングしているのですが、その中でもっとも強い2つの仮定を以下に記します。

将来のリターン特性(資産の収益率の平均・標準偏差相関係数)は過去のものと一致する

すなわち、IBMは今後も年率3.9%で成長し、AXPの収益率の標準偏差はずっと30.7%だと仮定しているわけです。
この仮定が正しいと言えないことは自明にわかりますが、未来を予測することは困難なので、仕方なくこの仮定を受け入れるわけです。

リターンは収益率の平均で、リスクは収益率の標準偏差で定義する

前者はいいでしょう。一方で後者については議論の余地がありそうです。
そもそもリスクという言葉はとても漠然としていると思いませんか?
人によって何を避けたいと思うかは違いますから、誰にとっても納得がいくリスクを定義することは不可能です。
ですが、多くの人が納得するであろう指標として「収益率のブレ具合、すなわち標準偏差」をリスクと定義することとします。

これらをどうしても受け入れられない方には回れ右していただいて、話を続けましょう。

分散投資定量的評価

さて、この2社に対して投資を行うのですが、どのような投資手法がいいのでしょうか。
例えば、一社に全部Betする方法、それもいいと思います。
リスクを取って大きなリターンを狙うならAXP、ローリスクローリターンを望むならIBMということになります。
一方で、分散投資、すなわち2社に投資を分散させる方法もあります。
Markowitzの業績は、この分散投資におけるリスクとリターンを定式化したことにあります。
以下の式が分散投資ポートフォリオにおけるリターンおよびリスクです。

\begin{eqnarray}
w &=& 
\begin{pmatrix}
w1 & w2 \\
\end{pmatrix}, \sum_{i=1}^{2} w_i = 1 \\
\mu_p &=&  \sum_{i=1}^{2} E(R_i)w_i \\
\sigma_p &=& \sqrt{
\begin{pmatrix}
w1 & w2 \\
\end{pmatrix}
\begin{pmatrix}
\sigma^2_{1} & \sigma_{12} \\
\sigma_{12} & \sigma^2_{2} \\
\end{pmatrix}
\begin{pmatrix}
w1 \\ 
w2 \\
\end{pmatrix}
}
\end{eqnarray}

理論的背景としては、多次元正規分布の和です。
2つの銘柄は独立ではないため、単純な平均・分散の足し合わせではないというところに注意しましょう。

res = np.zeros([100, 2])
for i in range(100):
    w = np.array([1-i/100, i/100])
    mu_p = np.dot(w, data.mean())
    sig_p = np.sqrt(np.dot(np.dot(w, data.cov()), w))
    res[i] = [mu_p, sig_p]
res = pd.DataFrame(res, columns=["mu_p", "sig_p"])*100
res.plot(kind="scatter", x="sig_p", y="mu_p")

実際に投資割合を少しずつ変えながらプロットしたものが以下の図になります。
各点はポートフォリオへの配分割合を1%ずつ動かしたときのリスク・リターンのプロファイルです。
f:id:ii_da_ba_shi:20190915172701p:plain
こうして見てみると、一番収益率の良い投資がAXP100%(リスク30.7%, リターン7.0%)であることは間違いありませんが、一番リスクの低い投資はIBM100%(リスク24.4%, リターン3.9%)ではなく、AXPとIBMへの分散投資であることがわかります。具体的にはIBMに29%, AXPに71%の分散投資を行うと、リスクは23%で済むようです。
これが分散投資の威力です。なぜ分散投資によってリスクが低減するのかということは感覚的な説明にとどめますが、一言で言うとするなら、銘柄間の相関係数が小さければ小さいほど、リスクが小さくなるということです。反対の動きをする銘柄を組み合わせることでリスクを減らすことができます。

ひとまず1回目はこの辺で終わりとします。次回はこの続きから

*1:https://doi.org/10.1111/j.1540-6261.1952.tb01525.x

*2:この2社を選んだ理由は特にないのですが、前者のサマーインターン選考で散々待たされた上に落とされたのはちょっと根に持ってます