データとエンジニアリングのよもやま話

データ活用が推進できるためのエンジニアリングに関するブログの筈..

No.27 Portfolio Optimization with Excel part.1

今回は、またまた、テーマを変えて、金融ポートフォリオの最適化をやってみたいと思います。
まずは、Excelでトライします。

今、読んでいる本が、以下の「ザ・クォンツ 世界経済を破壊した天才たち」なんですが、
ポートフォリオ理論の話が幾分登場します。(現代金融論の中では必ず登場しますものね。)

ザ・クオンツ  世界経済を破壊した天才たち

ザ・クオンツ 世界経済を破壊した天才たち

それに、ちょいと触発?を受け、以前に受講したOR学会主催のセミナーの復習を兼ねて、
Excelを利用して、ポートフォリオの最適化をやってみたいと思います。
テキストは、以下の「Excelで学ぶOR」を利用します。(第7章 不確実性下の意思決定を参照)

Excelで学ぶOR

Excelで学ぶOR

まずは、簡単な例からやってみたいと思います。(基本的にテキストの内容をトレースする形で進めます。)

例えば、以下の3つの銘柄があった場合、どれくらいずつ投資すると良いか?といった問題があるとします。

銘柄 冷夏 平年並み 猛暑 期待値
1. Aビール社 -10 -3 6 2
2. Bエネジー社 6 3 1 5
3. Cガス社 10 15 -10 -1
確率 1/3 1/3 1/3

# 各数値は、各社のあるシナリオ(冷夏等)に対するリターンを指します。
 また、確率は、各シナリオが発生する確率を指します。

この時、必須となる条件は、確実に、各銘柄への投資配分率を合計すれば、「1」になること。
そして、各銘柄の投資配分率は、「0以上」を満たすとします。
(つまり、空売りはしないと仮定します。)

まず、考え方としては、投資するわけですから、投資リターンは高いほど良いわけです。
投資リターンは、上記の表の「期待値」を使います。
つまり、ここだけの内容で考えれば、期待値(期待収益率)を最大化する問題として定式化されます。
→ 目的関数は、 2x_1 + 5x_2 - x_3 となります。 正確には、 max_{x} {2x_1 + 5x_2 - x_3} となります。
  Aビール社への投資配分率を  x_1とします。以下、同様です。

# 制約条件まで含めた定式化は以下の通りです。
 max_{x} {2x_1 + 5x_2 - x_3}
 s.t. {x_1 + x_2 + x_3 = 1, x_1, x_2, x_3 \geq 0}

もう少し、よりモデル式らしく記述するならば、ポートフォリオ収益率を R(x) = \sum R_jx_jとすると、
その期待値 E[R(x)] = u_jx_j が目的関数となります。
つまり、 u_jとは、 R_jの期待値というわけです。

ただ、これだけだと、リターン最大化となる組合せは、 ({x_1}^{*}, {x_2}^{*}, {x_3}^{*}) = (0, 1, 0)となってしまい、
結局は、期待値が一番大きかったBエナジー単独の投資となり、ポートフォリオの意味がありません。

もう一つ、重要な考え方があります。リスクをなるべく抑えることです。
ここでのリスクは、「投資収益率のばらつき(分散(標準偏差))」を使います。
つまり、この内容だけを考えれば、期待収益率のばらつきを最小化する問題として定式化されます。
→ 期待収益率のばらつき(ポートフォリオ分散)を V[R(x)]とするならば、
   V[R(x)] = E[(R(x) - E[R(x)])^2] = E[(\sum(R_j-u_j)x_j)^2]となり、
  最終的には、 \sum\sum\sigma_{ij}x_ix_j と記述できます。 \sigma_{ij}は、分散共分散行列を指します。

さて、最初の問題に戻り、ポートフォリオ分散を最小化する投資配分率を求めてみます。
詳しくは、テキストを参照して頂くとして、Excel上でのやり方は、以下のような表を作成します。

1. Aビール社 2. Bエネジー社 3. Cガス社 ポートフォリオ
投資配分率 0 0.5 0.5 1
冷夏 -10 -3 6 1.5
平年並み 6 3 1 2
猛暑 10 15 -10 2.5
期待収益率 2 5 -1 2
標準偏差 8.641 7.483 6.683 0.500

# ポートフォリオ列の投資配分率は、各銘柄の配分率の合計(SUM)を入力。
 各シナリオのポートフォリオ列は、投資配分率とシナリオの積の和(SUMPRODUCT)を入力。
 期待収益率と標準偏差は、各シナリオに対するポートフォリオのリターンの平均(AVERAGE)と
標準偏差(STDEV)を入力。

そして、Excelのソルバー機能を利用して、最適化問題を解きます。
こちらも、詳細はテキストを参照して頂くとして、
・目的セルは、ポートフォリオ標準偏差のセルを指定し、目的値は「最小値」とする。
・変数セルは、投資配分率のセルを指定し、制約条件欄に、ポートフォリオの投資配分率合計=1と設定する。
・最後に、解決方法を指定し、解決ボタンをクリックする。

ポートフォリオ分散が最小化される投資配分率は、(0, 0.472, 0.528)となりました。

今回は、非常に簡単な3銘柄の場合で最適値問題をExcelで解きましたが、もう少し増やしても大丈夫です。..と言って良いのか、変数は、500個が限度のようですね。

次回は、上記の続きでマーコヴィッツの平均・分散モデルを取り上げていきたいと思います。
(次回もExcelを利用します。)

参考

今回の記事での表は、以下の記事を参考にさせて頂きました。こんな便利なものをあるのですね!