TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

ポートフォリオ

プログラミングのための確率統計を読んでいるが、ポートフォリオのコラムの内容が興味深かった。

確率0.7で「ア」がでて、確率0.3で「イ」がでるくじがある。
「ア」、「イ」どちらかに賭けて、当たったら賭けた金額の2倍もらえる。

1回であれば「ア」に全財産を賭けるのが期待値が高いが、
くじを何回も繰り返す場合、毎回「ア」に全財産を賭けるよりも、
「ア」と「イ」に分散して賭けた方が、財産が増える確率は上がる。

投資の本とかのポートフォリオの説明でよく見る話しである。

R言語でシミュレーションを行ってみた。

game <- function() {
  return (runif(1) <= 0.7)
}

try_game_100 <- function(p) {
  money <- 1
  
  for (i in 1:100) {
    money_tmp <- money
    if (game() == TRUE) {
      money <- money + money_tmp * p
      money <- money - money_tmp * (1-p)
    } else {
      money <- money + money_tmp * (1-p)
      money <- money - money_tmp * p
    }
  }
  return (money)
}

try_n_time <- function(n, p) {
  v <- c()
  for (i in 1:n) {
    v <- c(v, try_game_100(p))
  }
  return (v)
}

hist(log10(try_n_time(1000, 0.7)), breaks=seq(-70, 15), col="yellow")
hist(log10(try_n_time(1000, 0.99)), breaks=seq(-70, 15), col="red", add=TRUE)

100回連続で、「ア」と「イ」に0.99の割合で賭けた場合と、
0.7の割合でかけた場合で、
それぞれ財産が何倍になったかを、
1000回試行し、ヒストグラムで表示した。

横軸は財産をlog10(10の何乗になったかという意味)で表示している。

f:id:TadaoYamaoka:20150221234752p:plain

赤色が0.99の場合、黄色が0.7の場合


ヒストグラムを見ると、0.7の割合で賭けた方が、財産が増える確率が高い事がわかる。
0.99でははじめの財産をほとんどの場合で失っている。(横軸が0の場合は、はじめと同じ財産。10の0乗は1。)


どの割合で賭けるのがよいかも調べてみた。

> summary(log10(try_n_time(1000, 0.99)))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-64.130 -36.190 -30.200 -30.770 -24.220  -0.268 
> summary(log10(try_n_time(1000, 0.85)))
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-10.8500  -1.8150   0.4451   0.3306   2.7050  10.2400 
> summary(log10(try_n_time(1000, 0.8)))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -6.079   0.544   2.350   2.223   4.156  11.380 
> summary(log10(try_n_time(1000, 0.75)))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -4.338   1.864   3.534   3.413   5.204  10.450 
> summary(log10(try_n_time(1000, 0.7)))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -1.946   2.470   3.574   3.604   4.677   7.989 
> summary(log10(try_n_time(1000, 0.65)))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-0.4349  2.5220  3.3290  3.3330  4.1360  7.0930 
> summary(log10(try_n_time(1000, 0.6)))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-0.1821  2.1070  2.6350  2.6100  3.1640  5.1010 

Meanが平均を表している。
0.7の場合が、Meanが最も高く、
どうやらくじの当たる確率に合わせて分散して賭けた場合が、
最も財産が増える確率が高そうである。

これを理論的に証明しろといわれると、どうやればいいのかわからないが、
こうやってシミュレーションしてみると法則が見えてきて面白い。


株に投資する場合は、輸出企業の株を買ったら、輸入企業も買っとけというのも
納得できた気がする。