generated at
リスク
投資の文脈で「リスク」はリターンの分散らしいけど、標準偏差で計算されることも多いのでどっちなのかはちゃんと読むこと

リターンが同じでもリスクが大きいとどうなるか?
リターンが同じ年利5%でも、リスクが大きいと確率密度関数は経年でこのように変化していく
A:標準偏差5%
B:標準偏差20%
対数正規分布での計算
緑:1.05^{10}
中央値はAもBも一緒になる
例えば10年目の中央値はいずれも約1.65(破線)
この時緑の線以下の分布を比べてみると、リスクの低いAグループの方が多くの人が緑(リスク0で年利5%)に近く、Bの場合元の価格か損失になっている人も多い
トップラインは圧倒的にリスクが高いBの方が高い
リスクが高い賭けをすると大勝ちする少数の人が出るが、理想的な年利5%に到達しない人も多い



正規分布での計算

理解のためのクイズ
Q. 年率リスク0.17VTと現金のみでポートフォリオを組む。許容リスクが5%、17%、34%の人は、それぞれ資産のうち何%をVTとすれば良いか?
現金のリスクは0とみなせる。VTの保持率をα、許容リスクRとすると0.17\alpha+0(1-\alpha)=\rm{R}を解いて
5%の場合 0.05/0.17=0.29
17%の場合 0.17/0.17=1(フル・インベスト)
34%の場合 0.34/0.17=2(資産が足りない)
同じ年率リスクならSharpe ratioが高い方がリターンが大きい
もしVTではなくリスクが40%の個別株Aでリスクを取ろうとするとそれぞれ
0.05/0.4 = 0.125
0.17/0.4=0.425
0.34/0.4=0.85
の資産を入れることになる。17%リスクの投資信託よりも投入できる金額が小さくなることがわかる


--

py
import numpy as np import matplotlib.pyplot as plt from scipy.stats import lognorm # Parameters mean_return = 0.05 risk_A = 0.05 risk_B = 0.20 years = 10 # Function to plot the investment with subtle color variation starting from a visible color def plot_investment_varying_color_adjusted(risk, label_prefix, base_color): colors = plt.cm.get_cmap(base_color, years + 1) for year in range(1, years + 1): # リスク(標準偏差)を計算。リスクは時間の平方根に比例すると仮定して年数の平方根を取る s = risk * np.sqrt(year) # 対数正規分布のスケールパラメータ scale = np.exp(mean_return * year) # 対数正規分布の0.1%点から99.9%点までの範囲で1000個の等間隔な値を生成。分布のほとんど全体をカバー x = np.linspace(lognorm.ppf(0.001, s, scale=scale), lognorm.ppf(0.999, s, scale=scale), 1000) # xの値に対応する確率密度関数(pdf)の値を計算。この値は、対数正規分布に基づいています y = lognorm.pdf(x, s, scale=scale) plt.plot(x, y, label=f'{label_prefix} Year {year}', color=colors(year)) plt.axvline(x=lognorm.median(s, scale=scale), color=colors(year), linestyle='--', linewidth=0.5) # Set up the plot plt.figure(figsize=[14, 6]) # Main plot plt.subplot(1, 2, 1) plot_investment_varying_color_adjusted(risk_A, 'A', 'Blues') plot_investment_varying_color_adjusted(risk_B, 'B', 'Reds') expected_return_line = 1.05 ** 10 plt.axvline(x=expected_return_line, color='green', linestyle='-', linewidth=1, label=f'Expected Return {expected_return_line:.2f}') plt.xlabel('Return') plt.ylabel('Probability Density') plt.title('Investment Returns for A and B Over 10 Years') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', fontsize='small') # Subplot focusing on 0 to 4 plt.subplot(1, 2, 2) plot_investment_varying_color_adjusted(risk_A, 'A', 'Blues') plot_investment_varying_color_adjusted(risk_B, 'B', 'Reds') plt.axvline(x=expected_return_line, color='green', linestyle='-', linewidth=1) plt.xlim(0, 4) plt.xlabel('Return') plt.title('Zoomed-in View (0 to 4)') plt.tight_layout() plt.show()


py
import numpy as np import matplotlib.pyplot as plt # Parameters mean_return_A = 5 risk_A = 5 mean_return_B = 5 risk_B = 20 # Normal distribution function def normal_distribution(x, mean, std_dev): return (1 / (np.sqrt(2 * np.pi * std_dev ** 2))) * np.exp(-(x - mean) ** 2 / (2 * std_dev ** 2)) # Extended range for x values x_extended = np.linspace(-100, 150, 1000) # Define color map for A and B colors_A = plt.cm.Blues(np.linspace(0.4, 1, 10)) colors_B = plt.cm.Reds(np.linspace(0.4, 1, 10)) # Plotting each year's distribution for both A and B with legends plt.figure(figsize=(15, 8)) for year in range(1, 11): # Adjust mean and standard deviation based on year mean_A = mean_return_A * year std_A = risk_A * np.sqrt(year) mean_B = mean_return_B * year std_B = risk_B * np.sqrt(year) # Calculate the PDF for A and B for the given year pdf_A_year = normal_distribution(x_extended, mean_A, std_A) pdf_B_year = normal_distribution(x_extended, mean_B, std_B) # Plotting with specific colors and legends plt.plot(x_extended, pdf_A_year, color=colors_A[year - 1], label=f"Investment A, Year {year}") plt.plot(x_extended, pdf_B_year, color=colors_B[year - 1], label=f"Investment B, Year {year}") plt.title("Probability Density of Returns for Investment A and B Over 10 Years") plt.xlabel("Return (%)") plt.ylabel("Probability Density") plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.grid(True) plt.show()