銀行員 RとPythonに出会う

Rネタを中心に、いろいろと更新していきます

Rと効率的フロンティアとCAPM(1)

ブログを始めたものの、さっそくネタ探しにやっきになってます。

いろいろ探索していると以下のような面白いエントリーが。 。。
www.analyze-world.com

smrmkt.hatenablog.jp

www.analyze-world.com

 

おお!

まさにこんな分析をやってみたかったんです。

 

上に挙げた2つのエントリーは、それぞれ不動産賃貸、売買の事例を分析したものです。

ネタとしても着眼点としても、とにかく非常に興味深かったです。僕も故郷である千葉県を題材にしてやってみたいと思います。

あと、不動産絡みだと不動産投資(大家さんになること)の分析なんかも面白いかなと思っています。収益物件の売買データ等々は一般人では手に入れることはできなそうですが。。。

ハーバード・ビジネススクールが教える不動産投資ゲーム

ハーバード・ビジネススクールが教える不動産投資ゲーム

 

この本は、僕が大学院で履修した「不動産投資とファイナンス」という授業で実際に使用したものですが、自身が不動産投資案件のファイナンスをする側(融資する側)をやっていたこともありのめり込んでしまいました。

収益物件への投資問題が昨今騒ぎになっていますが、購入者側(特にサラリーマン投資家)と仲介・売主側とでは情報の非対称性が大きいことは容易に想像できるので、せめてその投資効果が妥当なものか一定のロジックの元提供できれば少しは役に立てそうです。

この本のエッセンス、Shinyで実装してみようかな。

ということで、タイトル通り全然身近なネタでもないですが、今回は一発目なのでオリジナルネタでいきます。

といってもパッと思い浮かばなかったので、ファイナンス理論から効率フロンティアをRで復習します。

www.r-bloggers.com

 

前書き

知ってる人は飛ばして下さい

ファイナンスの基本概念の一つは「リスクとリターンのトレードオフ」です。

同じリスクだったら、より大きいリターンを期待できる選択肢を選びますよね。

逆に期待リターンが同程度であれば、リスクが低い方を選びます。

リスクとは危険を指すものでなく、ただ単純に将来の結果のばらつきの大きさを指します。

さて、ここで株式投資を考えると、どのように資産配分するのが良いのでしょうか?

どの銘柄にどの程度の金額を、どれくらいの割合で投資すれば良いのか、要するにどんなポートフォリオを作れば良いのか、それに対するソリューションを1952年にハリーマーコヴィッツというアメリカの経済学者が出しました。

(勿論、全部現金で持っていても良いわけですが、積極的な意思決定によってオール現金と言えればオーケーだと思います。この話はCAPMで・・・)

マーコヴィッツの理論はModern Portfolio Theoryと呼ばれ、現代ファイナンス理論の礎となっておりノーベル賞も受賞しています。

それでは、Rを用いて見ていきます。

今回は日経225銘柄から、皆が良く知るという理由で、トヨタ自動車ソフトバンク武田薬品工業をチョイスします。

# 必要なライブラリのインポート

library(data.table)

library(quantmod)

library(tidyverse)

library(XML)

library(scales)

library(ggplot2)



# quantmodでヤフーファイナンスよりデータを取得

TOYOTA <- loadSymbols("7203",src="yahooj",auto.assign=FALSE)

TAKEDA <- loadSymbols("4502",src="yahooj",auto.assign=FALSE)

SOFTBANK <- loadSymbols("9984",src="yahooj",auto.assign=FALSE)

おまけですが、chartSeries()関数を使うことで、チャートを簡単に描くことができます。

chartSeries(TOYOTA)

f:id:d_s:20180824231235p:plain

後の工程を考えて、データセットを成型しておきます。

# データ成型の関数を定義

make_df <- function(ts, name){

  df <- as.data.table(ts)

  df$ticker <- name

  df <- df[,c(1,8,7)]

  colnames(df) <- c('date', 'ticker', 'price')

  return(df)

}



TOYOTA <- make_df(TOYOTA, 'TOYOTA')

TAKEDA <- make_df(TAKEDA, 'TAKEDA ')

SOFTBANK <- make_df(SOFTBANK, 'SOFTBANK')



# データフレームを結合

dt <- rbind(TOYOTA, TAKEDA, SOFTBANK)

dt[, date := as.Date(date)]

# 価格指数の作成

dt[, idx_price := price/price[1], by = ticker]

これで準備が整いました。

これからいよいよ本番に入っていきます。

手始めに指数化した株価をプロットしてみます。

# 価格指数をプロット

ggplot(dt, aes(x = date, y = idx_price, color = ticker)) +

  geom_line() +

  # Miscellaneous Formatting

  theme_bw() + ggtitle("Price Developments") +

  xlab("Date") + ylab("Pricen(Indexed 2007 = 1)") +

  scale_color_discrete(name = "Company")

f:id:d_s:20180825002557p:plain

それにしてもソフトバンクすさまじいですね。

このチャートは2007年からスタートしていますが、ソフトバンクボーダフォンを買収したのは2006年のこと。

当時はプレミアムがたっぷり乗った相当な高値掴みのLBOと言われていたみたいですが、当時バリュエーションした人が今このチャートを見たら卒倒するでしょうね。¥

といってもこれも孫さんの手腕だからこそなのだと思います。

2013年~の急上昇もすさまじいですが、アベノミクスさることながらスプリント買収劇などありましたね。

# 前日比リターンを計算

dt[, ret := price / shift(price, 1) - 1, by = ticker]

# shiftした分naを除去

tab <- dt[!is.na(ret), .(ticker, ret)]

# 期待リターン(平均)とボラティリティ(標準偏差)を算出

tab <- tab[, .(er = round(mean(ret), 5)*100,

               sd = round(sd(ret), 5)*100),

           by = "ticker"]

上記を実行するとこんなアウトプットがコンソールに出ると思います。

ticker er sd
1: TOYOTA 0.012 1.918
2: TAKEDA -0.008 1.538
3: SOFTBANK 0.082 2.527

*er(期待リターン),sd(標準偏差)は共に100掛けして%にしてあります

ちょっと今回はサンプル選び(というより期間の取り方か)に失敗した感が否めませんが、チャートを見ての通りソフトバンクのリターンが一番高い一方で、ボラティリティ(リスク)も一番高く出ています。

先に述べたように、このリスクとリターンのトレードオフ関係が感覚としても見れたと思います。

f:id:d_s:20180825010144p:plain

これだけ見ると、ソフトバンクが最高の選択肢に見えるのですが、複数の銘柄を組み合わせてリスクを低減しながら最良のリターンを狙いたいところです。

どのようにポートフォリオを組むことができるのか、次の記事で効率的フロンティアを描いてみます。