見出し画像

人生設計に応じた資産シミュレーション

サブテーマ:個人の生活設計に応じたシミュレーション


1 初めに

 前回まで、定率・定額取り崩しシミュレーションをしてきましたが、個人の年齢も収入も今後の生活も違うなかできちんとしたシミュレーションができているとはいえない箇所もありました。
 今回は、個人の人生設計あと10年は今の給料をもらって、支出は〇〇円、11年後は退職する。ただし5年後に車を買うし、年金がもらえるなど想定に応じたシミュレーションを実行できるコードを用意してみました。

今回のまとめ:

個人の計画に応じたシミュレーションが実行できる
実施例)10年間年収500万円、11年後から120万円(年金or副業)
    開始時の金融商品*投資額1000万円+現金300万円
    *オルカン相当 年率リターン7%、リスク14%の場合
 →失敗確率 4.6%
  (500回シミュレーションして資金が0になる割合)


知人よりプログラム部分が難しくてよくわからないとご指摘をいただきました。そのためこのチャンネルでは、PYTHONを使った米国株投資に関わるさまざまな調査の結果OUTPUTにこだわった記事にします。投資に関わる身近な疑問にも答えていきますので、投資リテラシー向上にお役立ちを目指します!!
 なお、全ての解析データは引き続き、PYTHONを活用してコード全文も掲載します。Googleコラボで動作確認したコードですので、まずは”コピペ”でチャレンジできます。これから勉強始めたい方にも、プログラミングで何ができるのかを知る良いチャンスとなればと思っていますので応援お願いします!!


2 豆知識

1)失敗確率の定義

 今回算出する失敗確率の定義は、投資商品がある確率(ここではオルカン相当の年率リターン7%、リスク0.14%)とした場合、ランダムにその確率で毎年発生させた場合を500回。その500回の中には例えば今年は7%上がったとしても来年は30%ダウン、次の年も14%ダウンするような年率のリターンは確率的にはありえます。自身がもっている投資商品の特性と、自身の人生設計に応じた収入・支出計算時に、資産が0となる回数を確率であらわしてみることにより、老後やFIRE後の生活において資産が枯渇しそうかどうかを数値化してみました。

3 実践

1)実施内容

 投資商品はオルカン相当として切り取る区間によって変動はありますが、今回は年率リターン7%リスク14%として実施しました。(算出方法等は過去の記事でもいろいろなパターンで計算してみてますので興味があればそちらをどうぞ)
 実施例においては2024年から2046年まで、初めの10年間年収500万円、11年後から120万円(年金or副業)をイメージしていますが、各年の収入・支出をEXCLE等で計算しそのテーブルで計算することも可能としてます。また前提としての初期の金融商品投資額(実施例は1000万円)で、全額投資商品ではリスクが高すぎるので、ある一定金額を現金として保管している前提(実施例は300万円)としています。
 この前提におうじて、毎年年の初めに支出+現金保有額を取り崩し、残りを運用するというシミュレーションを実行します。
 出力する結果は、中央値、下位20%、10%、5%(運が悪いとこれぐらい)と500回のシミュレーションのうち、資産が0となった場合を失敗確率として出力します。

2)実践 

実際にモンテカルロシミュレーションしますが、コード自体は今までと変わりません。(初期投資額や運用期間、投資商品を変えた場合等は、それぞれのパラメーターをいじって実行すると簡単に実行できますので、ぜひトライしてみてください。)

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

# 年毎の収入・支出データ
years = np.arange(2024, 2046)
income = np.array([5000]*10 + [1200]*(len(years)-10))
expenses = np.array([3600]*len(years))

# パラメータ設定
initial_cash = 3000  # 確保する現金(千円)
initial_investment = 10000  # 投資元本(千円)
annual_return = 0.07  # 年率リターン
annual_risk = 0.15  # リスク(年次標準偏差)
simulations = 500  # シミュレーション回数

# シミュレーション用の配列を作成
years_simulation = len(years)
final_assets = np.zeros((simulations, years_simulation))

# モンテカルロシミュレーション
for s in range(simulations):
    cash = initial_cash
    investment = initial_investment

    for i in range(years_simulation):
        # 収入と支出を考慮
        cash += income[i] - expenses[i]

        # 投資リターンのシミュレーション
        investment_return = np.random.normal(annual_return, annual_risk)
        investment = investment * (1 + investment_return)

        # 現金確保後の余剰資金を投資
        if cash > initial_cash:
            excess_cash = cash - initial_cash
            investment += excess_cash
            cash = initial_cash

        # 総資産の記録
        final_assets[s, i] = cash + investment

# 資産枯渇リスクの計算
depletion_count = np.sum(final_assets <= 0, axis=1)
depletion_risk = np.mean(depletion_count > 0)

# 各年における中央値、下位20%、10%、5%の値を計算
percentiles = [50, 20, 10, 5]
results = np.percentile(final_assets, percentiles, axis=0)

# グラフのプロット
plt.figure(figsize=(12, 8))
plt.plot(years, results[0], label='Median', color='green')
plt.plot(years, results[1], label='20th Percentile', linestyle='--', color='blue')
plt.plot(years, results[2], label='10th Percentile', linestyle='--', color='purple')
plt.plot(years, results[3], label='5th Percentile', linestyle='--', color='orange')

plt.axhline(y=initial_investment + initial_cash, color='black', linestyle=':', label='Initial Investment + Cash')

plt.xlabel('Year')
plt.ylabel('Total Assets (千円)')
plt.title('Monte Carlo Simulation of Investment Over Time')
plt.legend()
plt.grid(True)
plt.show()

print(f"資産が枯渇するリスク: {depletion_risk * 100:.2f}%")

実行した結果が下記です。
 中央値でみれば(=ほとんどの場合)は資産は減らずむしろ増えています。ただし4.6%の確率で資産が0となる場合があって、下位5%にはいってしまえば人生破綻してしまいます。このリスクを減らすには、いずれかの期間において、収入を増やす、支出を減らす、退職を遅らせる等の多少の工夫でほぼ安泰な引退生活が送れるようになるように思えます。

3)さらに細かい設計でシミュレーション

毎年の収入と、支出のような形で各個人の人生設計に応じたテーブルで同じ計算をさせることが可能です。
 たとえば、車を買うので、2026年は+300万円とか、
 5年後からは子供が自立するので・・・、年金がもらえるので・・・
 この年は家の補修がある、大型家電の買い替えサイクル、、
 今回は年毎に手書きテーブルを用意してみましたが、EXCLEで作成しCSVで読み込みシミュレーションのようなこともできます。
 ぜひご自身の人生設計プランで資産推移をシミュレーションしてみてください。

# 年毎の収入・支出データ
years = np.arange(2024, 2046)
income = np.array([6100, 6100, 6300,  1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700,,,,])
expenses = np.array([3800, 3800, 4100, 6300, 4300, 6000, 6000, 7500, 7500,  3500, 3500, 3500,,,,])


4 最後に

 今回は各個人の人生設計に応じたシミュレーションが実施できるコードを紹介してみました。私自身このコードでシミュレーションしてみましたが、将来のことはわからないものの確率的にはこうなりそうだとういうイメージがより具体的になりました。ご自身の人生プランを再確認する良い機会になるのではとも考えましたのでご紹介させていただいた次第です。
 このサイトでは引き続き金融リテラシー向上及びPYTHONプログラミングに関した情報を発信していきますので、ぜひ応援よろしくお願いします。

記事の感想、要望があれば下記X(旧Twitterまで)
*今後の記事に活用させていただきます!!



以下、過去記事、AI時系列予測等のご紹介
他サイトですがココならで、A I(LSTM)を使った株価予測の販売もやってます。こちらではFREDから、失業率や2年10年金利、銅価格等結果も取得しLSTMモデルで予測するコードとなってますので興味があれば見てみてください。またその他2件も米国株投資とは直接関係はありませんがプログラム入門におすすめです。



チャンネル紹介:Kota@Python&米国株投資チャンネル

過去の掲載記事:興味PYがあればぜひ読んでください。
グラフ化集計の基礎:S &P500と金や米国債を比較してます。

移動平均を使った時系列予測


この記事が気に入ったらサポートをしてみませんか?