Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18

9,876 views

Published on

Published in: Technology

Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18

  1. 1. Rで学ぶ現代ポートフォリオ理論入門 TokyoR #18 2011/10/22 @horihorio
  2. 2. 0.1. 自己紹介>My.Profile $性格$TwitterID *1+ “暇人” *1+ “horihorio” *2+ “物好き”$出身地 $経験アリ統計ソフト *1+ “日本各地転々” *1+ “IBM SPSS”$これまでの仕事 *2+ “IBM Modeler” *1+ “統計分析@金融” *3+ “Matlab” *2+ “主にリスク管理系” *4+ “SAS”$お勉強中 $R使用歴 *1+ “DB, IFRS” *1+ “1ヶ月←え?” 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 2
  3. 3. 0.2. やりたいこと要件定義• 日本株で何か面白い戦略はないか• 面倒臭い、難しいことはしたくない 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 3
  4. 4. ◇ 全体構成 ◇1. 理論編 1. 投資のリターン 2. 投資のリスクの考え方 3. リスク&リターンの考え方 4. トービンの分離定理2. 実践編 1. データの用意 2. ポートフォリオ構築(2資産) 3. ポートフォリオ構築(多資産) 4. CAPM 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 4
  5. 5. 1.1. 投資のリターン投資対象が2つの場合、リターンは以下のとおりRP  w1 R1  w2 R2 Ri  資産iからのリターン wi  資産iへの投資比率投資比率は wi  1だが、個々のwiは、wi  0でも OK(カラ売り) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 5
  6. 6. 1.1. 投資のリターン例1:資産1の期待リターンが12%、資産2の期待リターンが6%、これに 4:6 で投資するRP  w1 R1  w2 R2  0.4  0.12  (1  0.4)  0.06  8.4% 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 6
  7. 7. 1.1. 投資のリターン例2:資産1の期待リターンが12%、資産2の期待リターンが6%、これに w_1:(1-w_1) で投資するRP  w1 R1  w2 R2  0.12w1  0.06(1  w1 )  0.06  0.06w1 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 7
  8. 8. 1.2. 投資のリスクの考え方(とりあえず)リスクを、リターンの標準偏差とする ( 標 準リ 偏スク 差 )【追記】Rって幾何ブラウン運動によるパス生成が楽、と思うと@teramonagi さん が紹介済だった。 http://d.hatena.ne.jp/teramonagi/20101117/1289950470 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 8
  9. 9. 1.2. 投資のリスクの考え方2資産に投資した時のリスク(σ)を求めると、RP  w1 R1  w2 R2  なので  w   w   2 w1w2 12 2 P 2 1 2 1 2 2 2 2 (  標準偏差   ij  共分散) , 相関係数    12 ( 1  2 )  を導入し  w   w   2 w1w2  1 2 2 P 2 1 2 1 2 2 2 2 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 9
  10. 10. 1.2. 投資のリスクの考え方(再掲)例1:資産1のリターンの標準偏差が18%、資産2の期待リターンが12%、相関はゼロとする  w   w   2w1w2  1 2 2 P 2 1 2 1 2 2 2 2  0.4  0.18  0.6  0.12 2 2 2 2  0.010368よって、 P  0.010368  10.2% 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 10
  11. 11. 1.2. 投資のリスクの考え方(再掲)例2:資産1のリターンの標準偏差が18%、資産2の期待リターンが12%、相関はゼロとする  w   w   2w1w2  1 2 2 P 2 1 2 1 2 2 2 2  0.18 w  0.12 (1  w1 ) 2 2 1 2 2 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 11
  12. 12. 1.2. 投資のリスクの考え方あれ?何か下に凸な放物線のような  w   w   2w1w2  1 2 2 P 2 1 2 1 2 2 2 2  ( w1 1  w2 2 )  2(1   ) w1w2 1 2 2 iは非負、 1    1なので P  w1 1  w2 2この式の解釈:分散投資をすれば、個別投資よりリスクを削減することが出来る。 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 12
  13. 13. 1.2. 投資のリスクの考え方相関係数が小さい程、リスク削減効果が大きくなる リ ス ク 削 減 効 果 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 13
  14. 14. 1.3. リスク&リターンの考え方リスク×リターンのグラフを書いてみる リスク リスク ×リターン カ 統 ラ 合 売 り カ リターン ラ 売 り 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 14
  15. 15. 1.3. リスク&リターンの考え方リスク×リターンのグラフで、上半分を、効率的フロンティアという。(下半分を選ぶことはあり得ない) 効率的 フロンティア 選ばれない 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 15
  16. 16. 1.4. トービンの分離定理ポートフォリオ+安全資産(国債)への投資を考える 無リスク(?)& 尐々のリターン 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 16
  17. 17. 1.4. トービンの分離定理色々な組み合わせを考えてみる 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 入門 17
  18. 18. 1.4. トービンの分離定理【トービンの分離定理】安全資産があると、効率的ポートフォリオは、安全資産と接点ポートフォリオの組合せで実現可能 効率的 ポートフォリオ 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 18
  19. 19. ◇ 全体構成 ◇1. 理論編 1. 投資のリターン 2. 投資のリスクの考え方 3. リスク&リターンの考え方 4. トービンの分離定理2. 実践編 1. データの用意 2. ポートフォリオ構築(2資産) 3. ポートフォリオ構築(多資産) 4. CAPM 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 19
  20. 20. 2.1. データの用意【データ準備】1. 株式 • データ:東証1部株式 各日調整後終値 • 母集団:日経225採用銘柄 • 期間:2011/1/4~10/14(193営業日) • 入手方法:次のスライドで2. 安全資産:日本国債 • データ:1年物日本国債利回り • 入手方法:財務省HP「国債金利情報」から加工 http://www.mof.go.jp/jgbs/reference/interest_rate/index.htm 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 20
  21. 21. 2.1. データの用意株式データの取得方法• パッケージ RFinanceYJ を使用 →尐々疑問:どこまでアクセスして良いの???## パッケージ RFinanceYJ の呼び出しlibrary("RFinanceYJ")## (Ticker, 企業名)の2列 リスト。データはHP「日経平均プロフィル」よりコピペ&EXCELNikkei225_ls <- read.csv("Nikkei225_ls.csv", sep=",", header=T)## とりあえずゼロ行列作成Nikkei225_close <- matrix(0, nrow=193, ncol=225)## あとはひたすらループ。配列は怖くてやらなかったfor (i in 1:225){ eval(parse(text=paste("T.", Nikkei225_ls[i,1], “<- quoteStockTsData(", Nikkei225_ls[i,1], ".t,2011-01-01)", sep=""))) eval(parse(text=paste("Nikkei225_close[,", i, "] <- T.", Nikkei225[i,1] ,"[,7]", sep=""))) eval(parse(text=paste("rm(T.", Nikkei225_ls[i,1],")", sep=""))) } 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 21
  22. 22. 2.1. データの用意脱線:(10/14時点)年初比上昇/下降5傑 を見たい上昇 下降 銘柄 年初比 銘柄 年初比9766 コナミ 146.5% 9501 東京電力 11.0%5233 太平洋セメント 140.7% 6767 ミツミ 39.4%5232 住友大阪セメント 133.3% 9107 川崎汽船 43.0%9412 スカパーJ 124.3% 6857 アドテスト 47.1%9433 KDDI 122.3% 6976 太陽誘電 47.7%## 列名を付けたいつもり。絶対良い方法があるに決まっている、が…colnames(Nikkei225_close) <- c(“T.1332”, ~略~,“T.9984”)## 最終日(10/14) / 年初(1/4) を計算して並び替えsort_ls <- t(sort( tail(Nikkei225_close, n=1) / head(Nikkei225_close, n=1) ))## 頭と最後の5件を取得head(sort_ls ,n=5)tail(sort_ls ,n=5) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 22
  23. 23. 2.1. データの用意後で fPortfolio のために、timeSeries型に変換 ## 【前工程】1列目を日付にしたい ## 営業日をPOSIXct型で取得のDUMMY。多分営業日パッケージがある筈 T.1332 <- quoteStockTsData(1332.t,since=2011-01-01, date.end=2011-10-14) ## 結合。1列目のcastが分からず、かなりハマった。 Nikkei225_close <- cbind(Date=as.POSIXct(T.1332[,1]), Nikkei225_close) ## 内容確認 head(Nikkei225_close[1:3]) str(Nikkei225_close[1:3]) ## 【ここから本番】 library(timeSeries) ## timeSeriesオブジェクトへ変換 Nikkei225_close.ts <- as.timeSeries(Nikkei225_close) ## 内容確認 head(Nikkei225_close.ts[1:3]) str(Nikkei225_close.ts[1:3]) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 23
  24. 24. 2.2. ポートフォリオ構築(2資産)試しに、相関が低いのを探してみる## 相関行列(225×225)を作成。計算はほぼ一瞬なのね。へぇ。tmp <- cor(Nikkei225_close.ts)## 最小値とその値を出す組み合わせを探す。min(tmp) ## 最小値which(tmp==min(tmp), arr.ind=TRUE) ## 最小値を出す列名取得結果: SUMCO (3436) と コナミ (9766‎ で、 ) 相関係数は、 -0.899※SUMCO:住友金属と三菱マテリアルのシリコンウエハ事業統合、 コマツ系も合流。半導体用世界首位級(YJ Financeより) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 24
  25. 25. 2.2. ポートフォリオ構築(2資産)確かに相関は低そう ) コナミ(9766‎ SUMCO(3436) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 25
  26. 26. 2.2. ポートフォリオ構築(2資産)SUMCO と コナミ の効率的フロンティア。かなり曲がってる ) コナミ(9766‎ SUMCO(3436) ※注:カラ売りはナシとして描いた 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 26
  27. 27. 2.2. ポートフォリオ構築(2資産)先のソース## @teramonagi さんのをコピペ改変## 元ソース:http://d.hatena.ne.jp/teramonagi/20090712/1247387723# ポートフォリオ用ライブラリロードlibrary("fPortfolio")# SUMCO(3436)とコナミ(9766)を抽出data <- as.timeSeries( cbind(Nikkei225_close.ts$T.3436, Nikkei225_close.ts$T.9766) )# 作成するフロンティアの条件設定。フロンティア上のポートを100個作成。conditions <- portfolioSpec()setNFrontierPoints(conditions) <- 100# データ、効率的フロンティアの作成efficientFrontier <- portfolioFrontier(data ,conditions)# 効率的フロンティアを描画plot(efficientFrontier,1) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 27
  28. 28. 2.2. ポートフォリオ構築(2資産)更に1年国債を混ぜ、効率的フロンティアを描画 ) コナミ(9766‎ SUMCO(3436) 1年国債 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 28
  29. 29. 2.2. ポートフォリオ構築(2資産)先のソース## 今度は日本国債をポートフォリオに追加# 1年国債データを用意JGB1YR <- read.table("JGByield.csv", header=F, sep=",")colnames(JGB1YR) <- c("DATE","YR1")# 3資産でデータ作成data <- as.timeSeries( cbind(Nikkei225_close.ts$T.3436, Nikkei225_close.ts$T.9766,JGB1YR$YR1) )# 前掲の繰り返しconditions <- portfolioSpec()setNFrontierPoints(conditions) <- 100efficientFrontier <- portfolioFrontier(data ,conditions)plot(efficientFrontier,1)# 各2資産を保有した場合をプロットplot(efficientFrontier,6) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 29
  30. 30. 2.2. ポートフォリオ構築(2資産)国債を混ぜた絵を見て気づくこと• 理系屋→国債を原点にすると(下に平行移動)式が綺麗• 投資家→要は、国債比の期待超過リターンが重要なのね リ Before 超 After タ 過 ー リ期 ン ポート タ待 フォリオ ー ン ポート フォリオ 国債 リスク リスク 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 30
  31. 31. 2.2. ポートフォリオ構築(2資産)国債とポートフォリオとの接点を結ぶ線を資本市場線といい、式で書くと、こんな感じ:リスクを 、リターンを rとすると 分子:期待超過リターン 切片:国債 E rP   rFE rCML   rF    CML P 引数の意味: • リスク・プレミアム CML→資本市場線 • シャープ比 という F →安全資産 P →株の組合せ(ポートフォリオ) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 31
  32. 32. 2.3. ポートフォリオ構築(多資産)で、データを対国債比の期待超過リターンに変換## 単位株・株価数値の水準を揃える。初値を1に基準化し、国債との超過リターンにする## 平均・分散は各々 (¥mu-国債)/初値, ¥sigma/初値 になる# 初期化Nikkei225_adj <- c()# 初値で割った列ベクトルを次々結合for (i in 2:226) {Nikkei225_adj <- cbind(Nikkei225_adj,Nikkei225_close[,i]/Nikkei225_close[1,i])}# 国債からの超過リターンに変換Nikkei225_adj <- Nikkei225_adj - JGB1YR[,2]/100# 営業日をくっつけるNikkei225_adj <- cbind(Date=as.POSIXct(Nikkei225_close[,1]), data.frame(Nikkei225_adj))#列名をくっつけるcolnames(Nikkei225_adj) <- c("Date","T.1332", ~略~,"T.9984")## timeSeriesオブジェクトへ変換Nikkei225_adj.ts <- as.timeSeries(Nikkei225_adj)Nikkei225_adj.ts <- Nikkei225_adj.ts - JGB1YR[,2]/100## 内容確認head(Nikkei225_adj.ts[1:3]); str(Nikkei225_adj.ts[1:3]) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 32
  33. 33. 2.3. ポートフォリオ構築(多資産)次は3資産を考える。 SUMCO (3436) , コナミ (9766‎)に、旭硝子 (5201) 追加←コナミと2番目に低い相関 (-0.887) ) コナミ(9766‎ ) 旭硝子(5201‎ SUMCO(3436) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 33
  34. 34. 2.3. ポートフォリオ構築(多資産)3資産の効率的フロンティアは、2資産+1資産となる ) コナミ(9766‎ まず以下の組合せ SUMCO: 17.9% コナミ: 38.3% SUMCO(3436) 次に 旭硝子: 43.9% ) 旭硝子(5201‎ を追加 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 34
  35. 35. 2.3. ポートフォリオ構築(多資産)先のソース## 3資産での効率的フロンティアdata <- as.timeSeries( cbind(Nikkei225_adj.ts$T.3436, Nikkei225_adj.ts$T.5201, Nikkei225_adj.ts$T.9766) )# 作成するフロンティアの条件設定conditions <- portfolioSpec()# 効率的フロンティアの作成efficientFrontier <- portfolioFrontier(data ,conditions)# 今度は効率的フロンティアの描画関数を使ってみるtailoredFrontierPlot(efficientFrontier, risk = c("Sigma"), twoAssets=TRUE)# 接点ポートフォリオを取得## 余談:get*** なるコマンドで色々な指標が取れるp.tan <- tangencyPortfolio(data)getWeights(p.tan) 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 35
  36. 36. 2.3. ポートフォリオ構築(多資産)資産の組み合わせ次第では、比率ゼロも出てくる SUMCO(3436) 旭硝子: 32.9% 日本板硝子 日本板硝子: 67.1% ) (5202‎ ) 旭硝子(5201‎ 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 36
  37. 37. 2.3. ポートフォリオ構築(多資産)で、日経225銘柄を全部投入。接点ポートフォリオの結果は以下のとおり 銘柄 組入割合 1812 鹿島 14.5% 4502 武田薬品 40.4% 4503 アステラス 7.3% 4523 エーザイ 27.4% 5233 太平洋セメント 0.5% 6366 千代田化工建設 4.2% 7751 キャノン 1.8% 8304 あおぞら銀行 3.9% 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 37
  38. 38. 2.3. ポートフォリオ構築(多資産)(あまり役立たない)効率的フロンティアのお絵かき 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 38
  39. 39. 2.3. ポートフォリオ構築(多資産)ポートフォリオのお値段は、単位株数でしか取引できないため、約3.4億かかる。個人では無理 銘柄 10/14 単位 (A)*(B) 構成 終値(A) 株数(B) 割合1812 鹿島 259 1,000 259,000 14.5% 鹿島を145,4502 武田薬品 3,585 100 358,500 40.4% 武田を404, …として4503 アステラス 2,865 100 286,500 7.3% 計算4523 エーザイ 3,085 100 308,500 27.4%5233 太平洋セメント 152 1,000 152,000 0.5%6366 千代田化工建設 870 1,000 870,000 4.2%7751 キャノン 3,445 100 344,500 1.8%8304 あおぞら銀行 190 1,000 190,000 3.9% 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 39
  40. 40. 2.4. CAPM (Capital Asset Pricing Model)そういえば、こんなお話がある【CAPM第一定理】安全資産があると、市場の均衡状態ではマーケット・ポートフォリオ(後述)は接点ポートフォリオと一致。よって、マーケット・ポートフォリオは効率的ポートフォリオ リ タ マーケット・ポートフォリオ ー ン = 接点ポートフォリオ ポートフォリオ 国債 2011/10/22 リスク Rで学ぶ現代ポートフォリオ理論入門 40
  41. 41. 2.4. CAPM【マーケット・ポートフォリオ】市場に供給されるすべての証券のバスケット → 日経平均?ならば、日経平均 vs お手製ポートフォリオを比較しよう## 日経平均取得library("RFinanceYJ")N225 <- quoteStockTsData(998407.O,since=2011-01-04, date.end=2011-10-14)## 作成ポートフォリオの系列作成data <- as.timeSeries(cbind( 0.1450 * Nikkei225_adj.ts$T.1812 + 0.4040 * Nikkei225_adj.ts$T.4502 + 0.0734 * Nikkei225_adj.ts$T.4503 + 0.2742 * Nikkei225_adj.ts$T.4523 + 0.0053 * Nikkei225_adj.ts$T.5233 + 0.0417 * Nikkei225_adj.ts$T.6366 + 0.0177 * Nikkei225_adj.ts$T.7751 + 0.0388 * Nikkei225_adj.ts$T.8304) )## 日経平均と、作成ポートフォリオの結合作業N225 <- cbind( Date=as.POSIXct(N225[,1]) , data.frame(N225[,5]/N225[1,5] - JGB1YR[,2]/100) ,data.frame(data) )N225.ts <- as.timeSeries(N225); colnames(N225.ts) <- c("Nikkei225","Create") 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 41
  42. 42. 2.4. CAPMCAPMの御託とは違うが、日経平均には勝っている 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 42
  43. 43. 2.4. CAPM最適ポート探索は10/14までのデータを使用。この構成比で、10/20終値に当ててみる 項目 日経平均 お手製 勝 リターン(平均値) -7.29% 0.17% イン か利 リスク(標準偏差) 6.31% 1.22% な、サンプル で 【参考】相関係数 0.335 … アウト リターン(平均値) -7.51% 0.29% ?い いサンプル リスク(標準偏差) 6.38% 1.21% の 留意事項 • 東日本大震災のショック有、CAPMの前提が成立? • 所要3.4億円 等々 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 43
  44. 44. 3.1. まとめ• 相関係数が小さい程、リスク削減効果が大きくなる• 【トービンの分離定理】安全資産があると、効率的ポートフォリオは、安全資産と接点ポートフォリオの組合せで実現可能• RFinanceYJを使用し東証の株価を取得し、fPortfolioを使って効率的ポートフォリオを作成• 【CAPM第一定理】マーケット・ポートフォリオは効率的ポートフォリオ → を確認しようとした※ CAPM第一定理があるので、当然?CAPM第二定理 (βの話)もあるが、今回は準備時間切れで放置 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 44
  45. 45. 3.2. 参考資料【ファイナンス理論】• 「一人で学べるファイナンス理論」佐野三郎 http://selflearn.web.infoseek.co.jp/• 2011年証券アナリスト1次レベルテキスト 第3回 「現代ポートフォリオ理論」、小林孝雄、本多俊毅【R初心者が使った資料】• R-Tips,舟尾 暢男 http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html• 以下Blogから引用コピペ 里さん(@ yokkuns) http://d.hatena.ne.jp/yokkuns/ てなもなぎさん(@teramonagi) http://d.hatena.ne.jp/teramonagi/ 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 45

×