コピュラの基礎:5つの代表的なコピュラの特徴と可視化

はじめに

金融市場では、複数の資産価格が互いにどのように影響しあうかを理解することが重要です。例えば、ある株が上がるとき、別の株も一緒に上がるのか、それとも下がるのか。このような関係性を分析することで、リスク管理や投資戦略を立てることができます。従来は相関係数を用いていましたが、相関係数は線形の関係しか捉えられず、複雑な依存関係を表現できませんでした。そこで、近年注目されているのが「コピュラ」です。コピュラは、各資産の個別の変動パターン(周辺分布)とは別に、資産間の依存構造だけを取り出して表現する強力なツールです。

この記事を書いたひと

デジタルリアクタ合同会社 代表
機械学習・統計、数値計算などの領域を軸としたソフトウェアエンジニアリングを専門としています。スタートアップからグローバル企業まで、さまざまなスケールの企業にて、事業価値に直結する計算システムを設計・構築してきました。主に機械学習の応用分野において、出版・発表、特許取得等の実績があり、また、IT戦略やデータベース技術等の情報処理に関する専門領域の国家資格を複数保有しています。九州大学理学部卒業。日本ITストラテジスト協会正会員。

対象読者:

  • 金融市場のデータ分析に携わる方
  • リスク管理やポートフォリオ最適化に関心のある方
  • 統計学や確率論の基礎知識がある方

記事のポイント:

  • コピュラの基本的な概念と、その金融分野での有用性を解説します。
  • 代表的な5つのコピュラ(正規、t、Clayton、Gumbel、Frank)について、それぞれの特徴を説明します。
  • Pythonを用いて各コピュラからサンプルを生成し、視覚的に比較します。

コピュラとは

コピュラは、複数の確率変数の間の依存構造を記述する関数です。周辺分布と依存構造を分離できる点が、従来の相関係数にはない大きな特徴です。

例えば、2つの資産AとBを考えます。

  • Aが大きい値を取るとき、Bも非常に高い確率で大きい値を取る。
  • Aが小さい値を取るとき、Bはそれほど影響を受けず、必ずしも小さい値を取るとは限らない。

このような非対称な依存関係も、コピュラを使えばモデル化できます(この例はGumbelコピュラで表現可能です)。重要なのは、コピュラで依存構造を定義した上で、各資産の周辺分布は自由に選べることです。例えば、「AとBはtコピュラで結びついているが、Aは正規分布、Bは対数正規分布に従う」といった状況も表現できます。

代表的なコピュラの実装と可視化

ここでは、以下の5つの代表的なコピュラについて、その特徴を解説し、Pythonで可視化します。copulaeライブラリを使用します。

  • 正規コピュラ (Gaussian Copula)
  • tコピュラ (Student's t Copula)
  • Claytonコピュラ
  • Gumbelコピュラ
  • Frankコピュラ
import numpy as np
import matplotlib.pyplot as plt
from copulae import GaussianCopula
from copulae.archimedean import ClaytonCopula, GumbelCopula, FrankCopula
from copulae.elliptical.student import StudentParams, StudentCopula

# サンプル数
n_samples = 3000

# 各コピュラの定義(2次元の場合)
gaussian_copula = GaussianCopula(dim=2)
gaussian_copula.params = 0.8

t_copula = StudentCopula(dim=2, df=2)
t_copula.params = StudentParams(df=2, rho=[0.8])

clayton_copula = ClaytonCopula(dim=2, theta=6.0)
gumbel_copula = GumbelCopula(dim=2, theta=6.0)
frank_copula = FrankCopula(dim=2, theta=15.0)

上記のコードでは、各コピュラのインスタンスを作成し、パラメータを設定しています。n_samplesで指定した数のサンプルを生成し、それらをプロットすることで、各コピュラの特性を視覚的に確認します。

# 各コピュラからサンプルを生成
gaussian_samples = gaussian_copula.random(n_samples)
t_samples = t_copula.random(n_samples)
clayton_samples = clayton_copula.random(n_samples)
gumbel_samples = gumbel_copula.random(n_samples)
frank_samples = frank_copula.random(n_samples)

# 可視化
plt.figure(figsize=(15, 10))

plt.subplot(2, 3, 1)
plt.scatter(gaussian_samples[:, 0], gaussian_samples[:, 1], s=5, alpha=0.5)
plt.title('Gaussian Copula')

plt.subplot(2, 3, 2)
plt.scatter(t_samples[:, 0], t_samples[:, 1], s=5, alpha=0.5)
plt.title('Student t Copula')

plt.subplot(2, 3, 3)
plt.scatter(clayton_samples[:, 0], clayton_samples[:, 1], s=5, alpha=0.5)
plt.title('Clayton Copula')

plt.subplot(2, 3, 4)
plt.scatter(gumbel_samples[:, 0], gumbel_samples[:, 1], s=5, alpha=0.5)
plt.title('Gumbel Copula')

plt.subplot(2, 3, 5)
plt.scatter(frank_samples[:, 0], frank_samples[:, 1], s=5, alpha=0.5)
plt.title('Frank Copula')

plt.tight_layout()
plt.show()

各コピュラの特徴

コピュラ 特徴 パラメータ 適用例
正規コピュラ 対称的な依存構造。テール依存性は弱い。 ρ (相関係数) 複数の資産のリターンが正規分布に従うと仮定できる場合。
t-コピュラ 対称的な依存構造。正規コピュラより強いテール依存性を持つ。 dfが十分に大きいと正規コピュラに収束する。 ρ (相関係数), df (自由度) 金融市場の同時ショックなど、極端な事象が同時に起こりやすい場合。
Claytonコピュラ 下側テール依存が強い(左下の領域にサンプルが集中)。上側テール依存は弱い。 θ (依存度の強さ) 市場の下落局面で、複数の資産が同時に大きく値下がりする傾向をモデル化する場合。
Gumbelコピュラ 上側テール依存が強い(右上の領域にサンプルが集中)。下側テール依存は弱い。 θ (依存度の強さ) 市場の上昇局面で、複数の資産が同時に大きく値上がりする傾向をモデル化する場合。
Frankコピュラ 中間的な値での依存が強い。テール依存性は比較的弱い。 θ (依存度の強さ) 極端な変動よりも、通常時の資産間の緩やかな連動性をモデル化する場合。

これらの図と表から、各コピュラが生成するデータの分布と、それに対応する依存構造の違いが明確に理解できます。なお、copulaeライブラリでは、実際のデータをもとに、パラメータをフィッティングできます。実務では、データを用意して、パラメータを推定し、シミュレーションに使ったり、パラメータ自体の比較を行ったりすることになります。

まとめ

コピュラは、金融市場における資産間の複雑な依存関係を表現するための強力なツールです。

  • 多様な依存構造の表現: 正規コピュラやtコピュラは対称的な依存関係を、ClaytonコピュラやGumbelコピュラは非対称な依存関係(テール依存)を捉えることができます。
  • 周辺分布からの独立性: 依存構造と周辺分布を分離して扱えるため、各資産の特性に応じた柔軟なモデリングが可能です。
  • 実務への応用: リスク管理、ポートフォリオ最適化、デリバティブの価格評価など、様々な金融分野で活用されています。

実務においては、分析対象となるデータの特徴を十分に理解し、適切なコピュラを選択することが重要です。

お気軽にご相談ください!

弊社のデジタル技術を活用し、貴社のDXをサポートします。

基本的な設計や実装支援はもちろん、機械学習・データ分析・3D計算などの高度な技術が求められる場面でも、最適なソリューションをご提案します。

初回相談は無料で受け付けております。困っていること、是非お聞かせください。