mcpField
C
correlation-analysis

correlation-analysis

github.com/agiprolabsデータ・データベース456471 回インストール8 週間前に更新
リポジトリ

correlation-analysis について

暗号資産のポートフォリオ分析や取引に向けた相関分析スキルです。相関の推定、時間変化やテール依存の分析、クラスタリングなどを扱い、参考資料と分析スクリプトも含みます。

主な機能

  1. 01Pearson・Spearman・Kendall相関
  2. 02ローリング相関とEWMA相関
  3. 03相関行列と固有値分析
  4. 04階層クラスタリングとテール依存
  5. 05相関レジームの監視
  6. 06行列・ローリング分析スクリプト

活用シーン

  1. 01ポートフォリオの分散効果の評価
  2. 02ペアトレード候補の特定
  3. 03市場ストレス時の同時下落リスク分析
  4. 04相関に基づくリスククラスターの分類

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill correlation-analysis

インストール後、Claude Code で/correlation-analysisを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
methodology.md
portfolio_applications.md
scripts/
correlation_matrix.py
rolling_correlation.py

詳細

相関分析

分散評価、リスク管理、ペアトレードのシグナル生成、ポートフォリオ構築に向けた、資産間の相関分析です。

相関が重要な理由

相関は、資産がどのように連動するかを測定します。暗号資産市場では、以下の理由から非常に重要です。

  • 分散投資:相関の高い資産を保有しても、分散投資の効果は得られません。実質的に、1つの資産に集中投資しているのと同じです
  • リスク管理:ポートフォリオのリスクは、個々の資産のボラティリティだけでなく、相関構造にも左右されます
  • ペアトレード:一時的に乖離した相関の高い資産は、平均回帰の機会を生み出します
  • ポートフォリオ構築:最適な配分には、正確な相関推定が必要です
  • 暴落への備え:テール依存性を理解することで、資産が同時に暴落するかどうかを明らかにできます

相関の手法

ピアソン相関

正規性を仮定した線形相関です。最も一般的ですが、暗号資産では最も頑健性に欠けます。

import pandas as pd
import numpy as np

# Always compute on returns, never on prices
returns_a = prices_a.pct_change().dropna()
returns_b = prices_b.pct_change().dropna()

pearson_corr = returns_a.corr(returns_b)  # default is Pearson
  • 範囲:-1(完全な逆相関)から+1(完全な連動)まで
  • 前提:線形関係、正規分布に従うリターン、外れ値がないこと
  • 制約:暗号資産のリターンは裾が重いため、ピアソン相関では極端な連動性が過小評価されます
スピアマン順位相関

値を順位に変換してから、順位に対してピアソン相関を計算します。単調な関係(線形関係に限りません)を捉えます。

spearman_corr = returns_a.corr(returns_b, method='spearman')
  • 外れ値や非線形関係の影響を受けにくい
  • リターン分布の裾が重いため、暗号資産に適しています
  • 正規性が成り立つ場合、ピアソン相関より検出力がやや低くなります
ケンドールのタウ相関

一致ペアと不一致ペアを数えます。3つの手法の中で最も外れ値に強い方法です。

kendall_corr = returns_a.corr(returns_b, method='kendall')
  • 3つの手法の中で最も外れ値に強い
  • 大規模なデータセットでは計算に時間がかかります
  • 小標本や、大きく偏ったデータに最適です

ローリング相関

静的な相関では、レジームの変化が隠れてしまいます。ローリング相関を使うと、関係性の推移を確認できます。

ウィンドウベースのローリング相関
# Rolling Pearson correlation
rolling_corr = returns_a.rolling(window=60).corr(returns_b)

# Multiple windows for different time horizons
windows = {
    'short': 20,    # ~1 month of trading days
    'medium': 60,   # ~3 months
    'long': 120,    # ~6 months
}
for label, w in windows.items():
    df[f'corr_{label}'] = returns_a.rolling(w).corr(returns_b)
EWMA 相関

指数加重方式で、直近の変化により素早く反応します。

def ewma_correlation(x: pd.Series, y: pd.Series, span: int = 60) -> pd.Series:
    """Compute EWMA correlation between two return series."""
    cov_xy = x.mul(y).ewm(span=span).mean() - x.ewm(span=span).mean() * y.ewm(span=span).mean()
    std_x = x.ewm(span=span).std()
    std_y = y.ewm(span=span).std()
    return cov_xy / (std_x * std_y)
一般的なウィンドウ
ウィンドウ日数用途
短期20戦術的な取引、ペアのエントリー/エグジット
中期60戦略配分、レジーム検出
長期120ポートフォリオ構築、戦略的配分

相関行列の分析

全行列の計算
# Build return matrix for multiple assets
returns = pd.DataFrame({
    'BTC': btc_returns,
    'ETH': eth_returns,
    'SOL': sol_returns,
    'AVAX': avax_returns,
})

# Correlation matrix (Pearson)
corr_matrix = returns.corr()

# Spearman (better for crypto)
spearman_matrix = returns.corr(method='spearman')
固有値分解

相関行列を分解し、影響を与える要因を特定します。

eigenvalues, eigenvectors = np.linalg.eigh(corr_matrix.values)

# Sort descending
idx = eigenvalues.argsort()[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]

# First eigenvalue = market factor (explains most variance)
# Subsequent eigenvalues = sector/style factors
market_factor_pct = eigenvalues[0] / eigenvalues.sum() * 100
  • 第1固有ベクトル:市場要因です。これが支配的な場合(分散の60%超)、すべての資産が連動します
  • 後続の固有ベクトル:セクター要因またはスタイル要因です
  • 小さな固有値:ノイズ/個別リスクです
最小分散ポートフォリオ
from numpy.linalg import inv

cov_matrix = returns.cov()
ones = np.ones(len(cov_matrix))
inv_cov = inv(cov_matrix.values)

# Minimum variance weights
weights = inv_cov @ ones / (ones @ inv_cov @ ones)

階層的クラスタリング

相関の類似性に基づいて資産をグループ化し、自然なクラスターを特定します。

from scipy.cluster.hierarchy import linkage, fcluster
from scipy.spatial.distance import squareform

# Convert correlation to distance
dist_matrix = np.sqrt(2 * (1 - corr_matrix.values))
np.fill_diagonal(dist_matrix, 0)

# Hierarchical clustering
condensed = squareform(dist_matrix)
linkage_matrix = linkage(condensed, method='ward')

# Cut at threshold to get clusters
clusters = fcluster(linkage_matrix, t=1.0, criterion='distance')

用途:

  • セクターの特定:同じクラスター内の資産は、同様の動きをします
  • 分散投資:分散効果を最大化するため、各クラスターから1つの資産を選択します
  • リスク配分:個々の資産ではなく、クラスター間でリスク予算を配分します

テール依存性

正規相関では、暴落時の連動性が過小評価されます。テール依存性は、資産が極端なリターンを同時に経験する頻度を測定します。

下側テール依存性
def tail_dependence(x: pd.Series, y: pd.Series, quantile: float = 0.05) -> float:
    """Estimate lower tail dependence coefficient.

    Measures P(Y < q | X < q) for quantile q.
    Higher values mean assets crash together more often.
    """
    threshold_x = x.quantile(quantile)
    threshold_y = y.quantile(quantile)
    joint_extreme = ((x < threshold_x) & (y < threshold_y)).sum()
    marginal_extreme = (x < threshold_x).sum()
    return joint_extreme / marginal_extreme if marginal_extreme > 0 else 0.0
暗号資産特有のテールの動き

暗号資産市場では、テール依存性は通常の相関を上回る傾向があります。

  • 2つのアルトコイン間の通常の相関が0.6の場合、テール依存性は0.8になることがあります
  • 市場がパニックに陥ると、すべてのリスク資産の相関が1.0に近づきます
  • つまり、分散投資の効果は、それが最も必要なときに失われます

レジーム依存の相関

相関は一定ではなく、市場レジームによって変化します。

レジーム典型的な相関意味
強気(上昇トレンド)0.4–0.7中程度 — ある程度の分散効果が期待できます
レンジ相場0.2–0.5低め — 分散効果が最も高い環境です
弱気(暴落)0.8–0.95非常に高い — 分散効果が失われます
回復0.5–0.7暴落時の高水準から低下
相関レジームの変化の検出
def correlation_zscore(rolling_corr: pd.Series, lookback: int = 252) -> pd.Series:
    """Z-score of rolling correlation vs its own history."""
    mean = rolling_corr.rolling(lookback).mean()
    std = rolling_corr.rolling(lookback).std()
    return (rolling_corr - mean) / std

# Flag regime shift when z-score exceeds threshold
zscore = correlation_zscore(rolling_corr_60d)
regime_shift = zscore.abs() > 2.0

暗号資産特有の相関パターン

典型的な相関の範囲
ペア通常の範囲備考
BTC / ETH0.7–0.9主要銘柄の中で最も高い
BTC / SOL0.6–0.85SOLはボラティリティが高く、相関はやや低め
BTC / アルトコイン0.5–0.8時価総額とセクターによって異なります
ミーム / BTC0.2–0.5通常時の相関は低め
ミーム / ミーム0.1–0.4通常時は低いものの、テール依存性は高い
ステーブルコイン / BTC-0.1–0.1ほぼゼロであるべきです
主な観察事項
  • ほとんどのアルトコインはBTCとの相関が高く(0.6–0.9)、市場要因が支配的です
  • ミームトークンとPumpFunトークンは、通常時の相関は低めですが、テール依存性は高めです
  • SOLエコシステムのトークンは、SOL価格と強い相関があります
  • ステーブルコインはリスク資産と無相関であるべきです。相関が見られる場合は調査してください(デペッグリスク)
  • 相関は高ボラティリティのレジームで高まる傾向があります
  • 新規トークンのローンチ直後は、価格発見が安定するまで一時的に相関が低くなる場合があります

他のスキルとの連携

  • risk-management:相関を使用して、ポートフォリオ全体のVaRとストレスシナリオを計算します
  • portfolio-analytics:相関行列を最適配分アルゴリズムに活用します
  • regime-detection:相関レジームの変化をレジーム分類の入力として使用します
  • cointegration-analysis:相関の高いペアは、共和分検定の候補になります
  • position-sizing:相関を考慮したサイズ調整により、相関資産への集中を防ぎます

ファイル

参考資料
  • references/methodology.md — 相関の公式、統計的検定、推定方法
  • references/portfolio_applications.md — 分散指標、ペアトレード、リスク分解
スクリプト
  • scripts/correlation_matrix.py — 複数資産の相関行列、クラスタリング、分散指標
  • scripts/rolling_correlation.py — ローリング相関、レジーム検出、テール依存性分析

コメント