05.2.1
カントリーリスクプレミアムを可視化する
まとめカントリーリスクプレミアムは、ある国に投資するときに投資家が米国債などの安全資産より上乗せで要求する追加リターンで、国債利回りや CDS スプレッドから推計されます。このページでは日本 1.2%、米国 1.8% からトルコ 5.5% までの 7 か国をサンプルデータにして、sort_values で昇順に並べた棒グラフに axhline で平均 3.2% の点線を重ね、各棒の上に ax.text で数値を書き込みます。続けて Asia・Americas・Africa・Europe の 4 地域で色分けした横棒グラフと、mean・median・std の要約統計量を求めます。読み終えると、DCF 法で WACC に組み込むリスクプレミアムの値を「なぜその国はこの値か」とグラフで説明できるようになります。
直感
#
カントリーリスクプレミアムは、ある国への投資に対して投資家が要求する追加リターンです。国債利回りやCDSスプレッドから推計され、同じ地域内でも経済・政治状況によって大きな差があります。たとえばサンプルの Americas では米国 1.8%、メキシコ 2.9%、ブラジル 3.8% と 2 倍の開きがあります。DCF法による企業価値評価では、WACCの構成要素として資本コストに直接影響するため、定量的な比較が重要です。棒グラフにして平均線を 1 本引くだけで、「平均より上の 4 か国は新興国、下の 3 か国は先進国と中国を除くアジア」という構造が読めます。
7 か国の risk_premium を DataFrame に→
sort_values で昇順に→
ax.bar で棒を描く→
axhline で平均の点線→
ax.text で各棒に数値→
地域で色分けした barh と要約統計量
詳細な解説
#
国別リスクプレミアムの棒グラフ比較
#
次のコードは、7 か国のリスクプレミアムを小さい順に並べた棒グラフを描き、平均値の点線と各棒の数値ラベルを重ねて SVG に保存します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
plt.style.use("scripts/k_dm.mplstyle")
data = pd.DataFrame(
{
"country": ["Japan", "United States", "Brazil", "India", "South Africa", "Turkey", "Mexico"],
"risk_premium": [0.012, 0.018, 0.038, 0.031, 0.042, 0.055, 0.029],
"region": ["Asia", "Americas", "Americas", "Asia", "Africa", "Europe", "Americas"],
}
)
data = data.sort_values("risk_premium")
fig, ax = plt.subplots(figsize=(8, 4.8))
bars = ax.bar(data["country"], data["risk_premium"] * 100, color="#3b82f6")
average = data["risk_premium"].mean() * 100
ax.axhline(average, color="#ef4444", linestyle="--", linewidth=1.2, label=f"平均 {average:.1f}%")
for bar, value in zip(bars, data["risk_premium"]):
ax.text(
bar.get_x() + bar.get_width() / 2,
value * 100 + 0.6,
f"{value*100:.1f}%",
ha="center",
fontsize=10,
)
ax.set_ylabel("リスクプレミアム(%)")
ax.set_title("主要国のリスクプレミアム比較(サンプルデータ)")
ax.set_ylim(0, 6.5)
ax.grid(axis="y", alpha=0.3)
ax.legend(loc="upper left")
output = Path("static/images/finance/visualize/country_risk_premium.svg")
output.parent.mkdir(parents=True, exist_ok=True)
fig.tight_layout()
fig.savefig(output)
|

図の読み方
#
左から日本 1.2%、米国 1.8%、メキシコ 2.9%、インド 3.1% までが平均 3.2% の点線の下、ブラジル 3.8%、南アフリカ 4.2%、トルコ 5.5% が上です。先進国 2 か国が最も低く、新興国の中でもトルコだけが突出して高い、という構造が棒の階段と点線の交点で読めます。
地域別の色分けとランキング
#
地域ごとに色を変えると、先進国と新興国のリスク差がより明確になります。次のコードは同じデータを横棒グラフにし、Asia・Americas・Africa・Europe の 4 色で塗り分けて、Patch で作った凡例を添えます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| region_colors = {"Asia": "#3b82f6", "Americas": "#10b981", "Africa": "#f59e0b", "Europe": "#ef4444"}
data = data.sort_values("risk_premium")
colors = [region_colors[r] for r in data["region"]]
fig, ax = plt.subplots(figsize=(8, 4.8))
bars = ax.barh(data["country"], data["risk_premium"] * 100, color=colors)
for bar, value in zip(bars, data["risk_premium"]):
ax.text(bar.get_width() + 0.1, bar.get_y() + bar.get_height() / 2,
f"{value*100:.1f}%", va="center", fontsize=10)
ax.set_xlabel("リスクプレミアム(%)")
ax.set_title("国別リスクプレミアム(地域色分け)")
ax.grid(axis="x", alpha=0.3)
# 凡例
from matplotlib.patches import Patch
legend_elements = [Patch(facecolor=c, label=r) for r, c in region_colors.items()]
ax.legend(handles=legend_elements, loc="lower right")
fig.tight_layout()
plt.show()
|
リスクプレミアムの分布と要約統計量
#
国ごとのばらつきを数値でも確認します。平均と中央値の差、標準偏差、最大と最小の幅の 4 つで、7 か国がどれくらい散らばっているかを要約します。
1
2
3
4
| print(f"平均: {data['risk_premium'].mean()*100:.2f}%")
print(f"中央値: {data['risk_premium'].median()*100:.2f}%")
print(f"標準偏差: {data['risk_premium'].std()*100:.2f}%")
print(f"最大-最小: {(data['risk_premium'].max() - data['risk_premium'].min())*100:.2f}%")
|
使いどころと落とし穴
#
同じ地域でもリスクプレミアムの差が大きい場合(Americas の 1.8%〜3.8% など)、地域の加重平均や地域インデックスを算出するときに国の重みづけを調整する必要があります。最新データはNYU SternのCountry Default Spreads and Risk Premiumsなどで定期的に更新されます。pd.read_html などの自動取得スクリプトを組み合わせると、月次レポートの棒グラフを手作業なしで更新できます。
プロジェクト評価(資本コスト)に使う場合は、社債スプレッドや為替ボラティリティと合わせて複数指標の比較チャートを作ると説得力が増します。新興国への投資判断では、リスクプレミアムの時系列推移も重要で、数か月で 1〜2 ポイント急上昇していればソブリンリスクの高まりを示唆します。