生物物理計算化学者の雛

主に科学に関する諸々を書き留めています。

リスクの影響考えて年利10%で月5万円の積み立てを30年間継続して得られる資産をシミュレートしてみた

某ファンドが月5万円の積み立てを年利10%で30年間行えば1億円になるという件で盛り上がっています。
http://kirik.tea-nifty.com/diary/2013/02/post-b4a9.html

このリンク先にあるように、毎年10%の利回りを継続できれば、毎月5万円の積み立てで30年後には1億857万円の資産を形成できます。
ところが現実の投資には不確実性があり、定期預金・国債のようなケースを除けば毎年のリターンは一定にはならず、ばらつきが生じます。
このばらつきは「リスク」と呼ばれ、投資結果を考える上で無視することはできません。
今回はRを使って毎月5万円の積み立てを「平均利回り10%」とし、「利回りの標準偏差(リスク)」を様々に変えて30年間積み立てのシミュレートを行いました。

利回りのリスクって?

まず大雑把にリスクの説明をしておきます。
ここでは利回りは正規分布に従う乱数(正規乱数)とし、「利回りのばらつき(標準偏差)」をリスクと定義します。
例えばリスクが少ない場合(平均利回り10%、リスク2%)は毎年の利回りはこんな感じです。

> # 平均10%、標準偏差2%の正規乱数を30個生成して、%として表示
> sprintf("%2.1f", rnorm(30, mean=0.1, sd=0.02)*100)
 [1] "9.3"  "9.6"  "10.3" "8.1"  "13.8" "10.3" "8.5"  "8.8"  "10.3" "10.2"
[11] "11.0" "8.6"  "4.9"  "8.6"  "9.8"  "12.2" "10.1" "11.7" "7.9"  "9.9" 
[21] "8.7"  "7.9"  "13.6" "10.9" "10.5" "11.5" "8.9"  "7.1"  "7.5"  "9.4" 

おおよそ10%から±2%程度の利回りとなります。

一方リスクが高い場合(平均利回り10%、リスク30%)はこんな感じです。

> sprintf("%2.1f", rnorm(30, mean=0.1, sd=0.3)*100)
 [1] "-10.2" "51.8"  "-19.1" "-19.9" "10.3"  "36.6"  "-27.1" "21.9"  "-9.1" 
[10] "29.2"  "18.2"  "3.1"   "9.3"   "-8.5"  "-22.5" "33.3"  "-65.2" "-21.4"
[19] "5.1"   "-41.1" "-16.8" "23.6"  "13.8"  "16.4"  "12.5"  "-13.8" "25.4" 
[28] "-13.7" "9.6"   "-0.7" 

+51.8% 〜 -65.2% まで幅広い利回りが出現することがわかります。

様々なリスク値でのシミュレート結果

平均利回り10% に対し、リスク 2%, 5%, 10%, 18%, 30%, 40% の6通りのシミュレートを行いました。
それぞれのリスクはおおよそ以下のような投資に対応します。

  • リスク2%は低リスクな国内債券投資
  • リスク5%は国内債券8割、株式2割の低リスク投資
  • リスク10%は国内債券5割、株式5割の投資
  • リスク18%はハイリスクとされる100%株式、あるいはヘッジファンドの平均リスク
  • リスク30,40%は一攫千金を狙えるレベルのリスク(例. 高レバレッジの信用取引、FX等)

参考:
GPIF(年金積立金管理運用独立行政法人)の想定リスク
某社資料中の各アセットのリスクリターン図

GPIFは株式の期待リターンを6-8%としていますので、10%というリターンを狙うには「100%株式のリスク18%」を超えるリスクをとる必要があると考え、リスク30%、40%もシミュレーションを行いました。

それぞれのリスクに対して毎月5万円積み立て30年間を10万回繰り返した結果を以下に示します。

リスク 全試行の
平均
>1億円の比率
目標達成
<1億円の比率
目標未達
<0.5億円の比率 <0.18億円の比率
積立元本割れ
2% 1.085億円 84.9% 15.1% 0% 0%
5% 1.084億円 62.4% 37.6% 0.1% 0%
10% 1.087億円 50.7% 49.3% 3.3% 0%
18% 1.087億円 40.6% 59.4% 22.0% 1.0%
30% 1.098億円 29.7% 70.3% 47.5% 16.1%
40% 1.098億円 22.4% 77.6% 62.6% 36.1%

平均利回り10%は固定してシミュレートしており、全試行の平均資産額は1.08億円程度とリスクが0の場合と同じになります。

ところがリスクが大きくなればなるほど30年後資産額のばらつきは大きくなってしまいます。
リスクが国内債券並に小さければ8割以上の投資家は目標の1億円を達成することができますが(リスク2%で84.9%)、リスクが株式・ヘッジファンド並になると半分程度の、そして30%、40%という高リスクだと3割以下の投資家しか1億円を達成できません。
その一方で凄まじい収益を上げる試行があり、リスク40%の施行10万回のうち最大の資産額は507億円に達していました。

しかも30%、40%の高リスクでは平均利回り10%で運用したとしても、元本を下回ってしまう確率が16.1%、36.1%と無視できない程度に大きくなってきます。

この結果から運用業者が極めて有力かつ良心的であり、平均利回り10%での投資をきちんと実行してくれたとしても、その投資手法がどの程度のリスクをとっているのかが不明であるならば、30年後に実際にいくらになっている確率が高いのかは見積もれませんので、皆様投資の際にはご注意ください。


2013/02/27追記
複利運用時のリスクについて分かりやすい解説がありましたので紹介しておきます。
連載:リスク資産の複利確率(28)〜最終回「総集編」


2013/03/05追記
リスクを考慮して「1億円達成に必要な年数」をシミュレートしました。
リスク込みで年利10%月5万円の積み立てを何年間継続すれば1億円になるかシミュレートしてみた


ウォール街のランダム・ウォーカー <原著第10版>―株式投資の不滅の真理

ウォール街のランダム・ウォーカー <原著第10版>―株式投資の不滅の真理

[asin:B009AAJEL2:detail]

投資シミュレーションのRのソース

# 毎月一定額investPerMonthを積み立てて、
# 平均利回りmeanInterestRate、
# 利回りの標準偏差(リスク)stdInterestRateで投資したときの
# 30年後の資産額を計算する関数
#   各年の利回りは正規分布に従う乱数により計算される
after30Years <- function(investPerMonth, meanInterestRate, stdInterestRate){
  numMonth <- 30
  interestRateList <- rnorm(numMonth, mean=meanInterestRate, sd=stdInterestRate)

  total <- (investPerMonth*12) * (1+interestRateList[1]) 
  for(i in 2:numMonth){
    total <- ((investPerMonth*12) + total) * (1+interestRateList[i])
    if(total < 0) total <- 0
  }
  return(total)
}

# 算出したヒストグラムから、x以下の値となる
# 確率を算出する関数
calcPercentLessX <- function(h, x){
  i <- 1;
  total <- 0;
  while(h$mids[i] < x){
    total <- total + h$counts[i]
    i <- i + 1
  }
  total <- total /  sum(h$counts)
}

# 平均年利回り10%、年利回りの標準偏差(=リスク)が2%の場合
#  (国内債券並みの低リスク)
sampleNum <- 100000          # 試行の回数
return30years <- 1:sampleNum # サイズsampleNumの配列を用意
for(i in 1:sampleNum){       # 30年投資をsampleNum回繰り返す
  # 30年投資をシミュレート、結果を億円単位に換算する
  #   リスク2%
  return30years[i] <- (after30Years(50000, 0.1, 0.02)) / 100000000
}
# 0.02億円刻みででヒストグラムを作成して表示する
breakX <- (max(return30years) - min(return30years)) / 0.02
h <- hist(return30years, breaks=breakX, xlim=c(0,4))
mean(return30years)         # 全ての試行での30年後の平均資産額
(calcPercentLessX(h, 1.0))  #    1億円に満たなかった確率
(calcPercentLessX(h, 0.5))  #  0.5億円に満たなかった確率
(calcPercentLessX(h, 0.18)) # 0.18億円(積み立ての元手)を下回った確率


# 平均年利回り10%、年利回りの標準偏差(=リスク)が5%の場合
#  (株式2割、債権8割程度のリスク)
for(i in 1:sampleNum){
  # リスク10%
  return30years[i] <- (after30Years(50000, 0.1, 0.05)) / 100000000
}
breakX <- (max(return30years) - min(return30years)) / 0.02
h <- hist(return30years, breaks=breakX, xlim=c(0,4))
mean(return30years)         # 全ての試行での30年後の平均資産額
(calcPercentLessX(h, 1.0))  #    1億円に満たなかった確率
(calcPercentLessX(h, 0.5))  #  0.5億円に満たなかった確率
(calcPercentLessX(h, 0.18)) # 0.18億円(積み立ての元手)を下回った確率


# 平均年利回り10%、年利回りの標準偏差(=リスク)が10%の場合
#  (株式と債権に半々投資した場合並みのリスク)
for(i in 1:sampleNum){
  # リスク10%
  return30years[i] <- (after30Years(50000, 0.1, 0.1)) / 100000000
}
breakX <- (max(return30years) - min(return30years)) / 0.02
h <- hist(return30years, breaks=breakX, xlim=c(0,4))
mean(return30years)         # 全ての試行での30年後の平均資産額
(calcPercentLessX(h, 1.0))  #    1億円に満たなかった確率
(calcPercentLessX(h, 0.5))  #  0.5億円に満たなかった確率
(calcPercentLessX(h, 0.18)) # 0.18億円(積み立ての元手)を下回った確率


# 平均年利回り10%、年利回りの標準偏差(=リスク)が18%の場合
#  (ヘッジファンド・株式並みのリスク)
for(i in 1:sampleNum){
  # リスク18%
  return30years[i] <- (after30Years(50000, 0.1, 0.18)) / 100000000
}
breakX <- (max(return30years) - min(return30years)) / 0.02
h <- hist(return30years, breaks=breakX, xlim=c(0,4))
mean(return30years)         # 全ての試行での30年後の平均資産額
(calcPercentLessX(h, 1.0))  #    1億円に満たなかった確率
(calcPercentLessX(h, 0.5))  #  0.5億円に満たなかった確率
(calcPercentLessX(h, 0.18)) # 0.18億円(積み立ての元手)を下回った確率


# 平均年利回り10%、年利回りの標準偏差(=リスク)が30%の場合
for(i in 1:sampleNum){
  # リスク30%
  return30years[i] <- (after30Years(50000, 0.1, 0.30)) / 100000000
}
breakX <- (max(return30years) - min(return30years)) / 0.02
h <- hist(return30years, breaks=breakX, xlim=c(0,4))
mean(return30years)         # 全ての試行での30年後の平均資産額
(calcPercentLessX(h, 1.0))  #    1億円に満たなかった確率
(calcPercentLessX(h, 0.5))  #  0.5億円に満たなかった確率
(calcPercentLessX(h, 0.18)) # 0.18億円(積み立ての元手)を下回った確率


# 平均年利回り10%、年利回りの標準偏差(=リスク)が40%の場合
for(i in 1:sampleNum){
  # リスク40%
  return30years[i] <- (after30Years(50000, 0.1, 0.40)) / 100000000
}
breakX <- (max(return30years) - min(return30years)) / 0.02
h <- hist(return30years, breaks=breakX, xlim=c(0,4))
mean(return30years)         # 全ての試行での30年後の平均資産額
(calcPercentLessX(h, 1.0))  #    1億円に満たなかった確率
(calcPercentLessX(h, 0.5))  #  0.5億円に満たなかった確率
(calcPercentLessX(h, 0.18)) # 0.18億円(積み立ての元手)を下回った確率

Rクックブック

Rクックブック