【初心者向け】相関係数で銘柄間の関係を数値化する方法

※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。

相関係数とは何か

「A株が上がるときにB株も上がる」「円高になると輸出株が下がる」という関係性を数値化したものが相関係数(Correlation Coefficient)です。

相関係数は-1から+1の間の値を取ります。

相関係数の値 意味
+1に近い 強い正の相関(一緒に動く) 同業種の2銘柄
0に近い 相関なし(無関係) 異なる業種・地域
-1に近い 強い負の相関(逆に動く) 株価と債券(一般的に)

分散投資と相関係数の関係

分散投資が効果を発揮するのは、相関の低い資産を組み合わせたときです。相関が+1に近い銘柄ばかりを持っていても、一方が下落すれば全部下落するため分散効果がありません。

目安として相関係数0.7以上の銘柄同士は「ほぼ同じ動きをする」と考え、ポートフォリオに重複して持つ意味が薄れます。

Pythonで相関マトリクスを作る

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns

matplotlib.rcParams['font.family'] = 'Meiryo'

# ==============================
# 設定エリア
# ==============================
PORTFOLIO = {
    "7203.T": "トヨタ",
    "9984.T": "SBG",
    "6758.T": "ソニー",
    "8306.T": "三菱UFJ",
    "9432.T": "NTT",
    "^N225":  "日経平均",
}
PERIOD = "1y"

# ==============================
# 終値データ取得
# ==============================
symbols = list(PORTFOLIO.keys())
names   = list(PORTFOLIO.values())

price_data = {}
for sym in symbols:
    df = yf.Ticker(sym).history(period=PERIOD)
    price_data[sym] = df["Close"]

prices = pd.DataFrame(price_data).dropna()

# 日次リターンに変換
returns = np.log(prices / prices.shift(1)).dropna()
returns.columns = names  # 表示名に変更

# ==============================
# 相関マトリクスの計算
# ==============================
corr_matrix = returns.corr()
print("相関マトリクス:")
print(corr_matrix.round(2).to_string())

# ==============================
# ヒートマップで可視化
# ==============================
fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(
    corr_matrix,
    annot=True,      # セル内に数値を表示
    fmt=".2f",
    cmap="RdYlGn",   # 赤(負の相関)→黄→緑(正の相関)
    vmin=-1, vmax=1,
    ax=ax
)
ax.set_title("銘柄間の相関マトリクス(日次リターン)")
plt.tight_layout()
plt.savefig("correlation_heatmap.png", dpi=150)
plt.show()
print("ヒートマップを保存しました: correlation_heatmap.png")

必要なライブラリのインストール

seabornが未インストールの場合は以下を実行してください。

pip install seaborn

まとめ

  • 相関係数は-1〜+1で2銘柄の関係性を数値化する
  • 分散投資は「相関の低い銘柄を組み合わせる」ことで効果が出る
  • 相関0.7以上の銘柄は実質的な分散効果が薄い
  • ヒートマップを使うと複数銘柄の相関を一目で把握できる
タイトルとURLをコピーしました