この記事ではCAPMの基本的な概念とそのメリット、デメリットについて詳しく解説します。また、具体的な計算手順を紹介し、投資ポートフォリオの最適化にどのように役立つかを説明します。
CAPMとは
CAPM(Capital Asset Pricing Model)は投資リスクとリターンの関係を説明するためのモデルです。リスクとリターンの関係が数式として説明されているため、資産の期待収益率を計算するのに使用されます。
CAPMのメリット
基本的なメリットは以下です。
- 簡単:単純な数式でリスクとリターンの関係を説明
- リスクとリターンを評価する指標:リスクに対するリターンを評価するための基準を提供
これらのメリットを応用することで、例えば
- 特定の資産が過小評価・過大評価されているかの判断
- ポートフォリオ構築
などを簡単に行えたりします。
CAPMの悪い点
- 現実の市場を完全に反映していない
- 情報がすべての投資家に同時に届いて同時に行動を始めることを前提として理論が作られている
- 感情などで株価が動くことを反映できていない
- リスクフリーレートの選定の難しさ
- 理論上はリスクがないことを前提としているが、よく計算に用いられる国債には信用リスクや流動性リスクが存在する
- ベータ値の変動
- ベータ値は過去のデータに基づいて計算されるため、将来のリスクを正確に反映していない
- 考慮するファクターが一つのみ
- CAPMは市場リスクプレミアムという単一のリスク要因だけを考慮します。しかし、現実の投資環境には多くのリスク要因(例えば、流動性リスク、信用リスク、国際リスクなど)が存在します
- (これを解決する方法としてFama-Frenchの3ファクターモデルやCarhartの4ファクターモデルなどのマルチファクターモデルが考案されている)
CAPMの計算式
\[
E(R_i) = R_f + \beta_i \left( E(R_m) – R_f \right)
\]
\[
\begin{align}
E(R_i) &: \text{資産iの期待リターン} \\
R_f &: \text{リスクフリーレート} \\
\beta_i &: \text{資産iのベータ} \\
E(R_m) &: \text{マーケットポートフォリオの期待リターン} \\
E(R_m)−R_f &: \text{マーケットリスクプレミアム} \\
\end{align}
\]
ベータの計算式
\[
\beta_i = \frac{\text{Cov}(R_i, R_m)}{\text{Var}(R_m)}
\]
\[
\begin{align}
\beta_i\ &: \text{資産 i のベータ} \\
\text{Cov}(R_i, R_m) &: \text{資産 i のリターンとマーケットリターンの共分散。2つのリターンがどの程度連動するかを示す。} \\
\text{Var}(R_m) &: \text{市場リターン (r_m) の分散。市場リターンの変動性を表す。} \\
R_i &: \text{資産iのリターン} \\
R_m &: \text{マーケットリターン(計算時にはインデックスなどが用いられる)} \\
\end{align}
\]
※ 線形回帰でも求められますが分散と共分散のみで計算できるこちらがラクです。
CAPMの計算手順
- 資産のベータ値 \( \beta_i \) を計算する。過去のデータを元に求めます。
- 無リスク利子率 \( R_f \) を取得する。10年国債の利回りがよく使用されます。
- マーケットポートフォリオの期待収益率 \( E(R_m) \) を取得する。インデックスのリターンデータが用いられます(アメリカの資産であればS&P500、日本であれば日経平均など)。
- CAPM方程式に値を代入して資産の期待収益率 \( E(R_i) \) を計算する。
Pythonで計算してみる
import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime
# 日付範囲の設定
start_date = "2020-01-01"
end_date = datetime.today().strftime('%Y-%m-%d')
# データの取得
aapl = yf.download("AAPL", start=start_date, end=end_date)
vti = yf.download("VTI", start=start_date, end=end_date)
tnx = yf.download("^TNX", start=start_date, end=end_date) # 米国10年国債利回り
# リターンの計算(ログリターンを使用)
aapl['Returns'] = np.log(aapl['Adj Close'] / aapl['Adj Close'].shift(1))
vti['Market Returns'] = np.log(vti['Adj Close'] / vti['Adj Close'].shift(1))
# 米国10年国債利回りの設定(1年あたりのリターンを使用)
tnx['Risk Free Rate'] = tnx['Adj Close'] / 100 # 利回りを小数点で表す
# 直近のリスクフリーレートを取得
risk_free_rate = tnx['Risk Free Rate'].iloc[-1] / 252 # 1日あたりのリターンに換算
# データを結合してNaNを削除
data = pd.concat([aapl['Returns'], vti['Market Returns']], axis=1).dropna()
# 共分散と分散をpandasを使って計算
covariance = data['Returns'].cov(data['Market Returns'])
market_variance = data['Market Returns'].var()
beta = covariance / market_variance
# 市場の期待リターン(リスクフリーレートを加味)
expected_market_return = data['Market Returns'].mean() * 252
expected_return_aapl = risk_free_rate * 252 + beta * (expected_market_return - risk_free_rate * 252)
# 結果の表示
print(f"AAPLのβ: {beta:.4f}")
print(f"市場の期待リターン: {expected_market_return:.4f}")
print(f"AAPLの期待リターン(CAPMによる): {expected_return_aapl:.4f}")
AAPLのβ: 1.1452 市場の期待リターン: 0.1258 AAPLの期待リターン(CAPMによる): 0.1384
CAPMにより資産の期待リターンが13.8%/yearであることがわかりました。(投資家が期待するリターンであり、実際に得られるリターンではないことにご注意ください)
最後に
この記事を通じて、CAPMの基本とその応用についての理解が深まったでしょうか?CAPMを活用することで、リスクとリターンのバランスを取った投資判断が可能になります。しかし、市場の複雑さを完全に反映するわけではないため、マルチファクターモデルも併せて検討することが重要です。
ポートフォリオ構築に関連する他のモデルを知りたい方は下記のリンク集をぜひご活用ください。