ポートフォリオのリスク測定

Pythonで学ぶポートフォリオ分析入門

Charlotte Werger

Data Scientist

ポートフォリオのリスク

  • 投資にはリスクがある:個別資産は上下する
  • 期待リターンは確率変数である
  • 平均まわりのばらつきは分散 $\sigma^2$ で測る。ボラティリティの一般的指標
  • $\sigma^2 = \frac{\sum\limits_{i=1}^N (X -\mu)^2}{N}$

綱渡りとしてのリスク

Pythonで学ぶポートフォリオ分析入門

分散

$$

  • 個別資産の分散は異なる:平均まわりの広がりに差がある
  • ポートフォリオ分散は、基礎資産の加重分散の単純合計ではない
  • 資産リターンが相関するため、計算は複雑になる

高分散と低分散の分布

Pythonで学ぶポートフォリオ分析入門

分散と相関はリスクにどう関係するか

$$

  • 資産1と2の相関は $\rho_{1,2}$。一緒にどの程度動くかを示す
  • ポートフォリオ分散は、各資産の分散($\sigma_1^2, \sigma_2^2, …$)、ポートフォリオ内の重み($w_1, w_2$)、および相互の相関を考慮する
  • 標準偏差($\sigma$)は分散($\sigma^2$)の平方根。どちらもボラティリティの指標
Pythonで学ぶポートフォリオ分析入門

ポートフォリオ分散の計算

$$ ポートフォリオ分散の式

  • $\rho_{1,2} \sigma_1 \sigma_2$ は資産1と2の共分散と呼ぶ
  • 共分散は $ \sigma_{1,2} $ とも書ける
  • よって次のように書ける:

書き換えたポートフォリオ分散の式

Pythonで学ぶポートフォリオ分析入門

ポートフォリオ分散を短く書く

ポートフォリオ分散の式

  • 行列表記に書き換えると、コードで扱いやすくなります:

行列表記でのポートフォリオ分散

  • 言い換えると、Python で計算するのは次です:

    ポートフォリオ分散 = 重みの転置 × (共分散行列 × 重み)

Pythonで学ぶポートフォリオ分析入門

Python でのポートフォリオ分散

price_data.head(2)

ticker        AAPL       FB        GE       GM       WMT
date                    
2018-03-21    171.270    169.39    13.88    37.58    88.18
2018-03-22    168.845    164.89    13.35    36.35    87.14
# Calculate daily returns from prices
daily_returns = df.pct_change()
# Construct a covariance matrix for the daily returns data
cov_matrix_d = daily_returns.cov()
Pythonで学ぶポートフォリオ分析入門

Python でのポートフォリオ分散

# Construct a covariance matrix from the daily_returns
cov_matrix_d = (daily_returns.cov())*250
print (cov_matrix_d)

        AAPL          FB          GE          GM          WMT                    
AAPL    0.053569    0.026822    0.013466    0.018119    0.010798
FB      0.026822    0.062351    0.015298    0.017250    0.008765
GE      0.013466    0.015298    0.045987    0.021315    0.009513
GM      0.018119    0.017250    0.021315    0.058651    0.011894
WMT     0.010798    0.008765    0.009513    0.011894    0.041520
weights = np.array([0.2, 0.2, 0.2, 0.2, 0.2])
Pythonで学ぶポートフォリオ分析入門

Python でのポートフォリオ分散

# Calculate the variance with the formula
port_variance = np.dot(weights.T, np.dot(cov_matrix_a, weights))
print (port_variance)

0.022742232726360567
# Just converting the variance float into a percentage
print(str(np.round(port_variance, 3) * 100) + '%')

2.3%
port_stddev = np.sqrt(np.dot(weights.T, np.dot(cov_matrix_a, weights)))
print(str(np.round(port_stddev, 3) * 100) + '%')
15.1%
Pythonで学ぶポートフォリオ分析入門

Ayo berlatih!

Pythonで学ぶポートフォリオ分析入門

Preparing Video For Download...