共分散の完全ガイド:定義・計算・応用と実装上の注意点

はじめに

共分散(covariance)は、統計学や機械学習、金融工学などで広く使われる基本的な概念です。2つの確率変数がどのように同時に変動するかを定量化し、データ間の相関構造を理解するための第一歩となります。本コラムでは定義から性質、計算方法、応用例(PCAやポートフォリオ理論、回帰)、実装上の注意点まで、実務で役立つ深掘り解説を行います。

共分散の定義

2つの確率変数 X, Y の共分散は次のように定義されます。

Cov(X, Y) = E[(X - μX)(Y - μY)]

ここで E[...] は期待値、μX = E[X], μY = E[Y] です。確率分布に基づく母集団(population)共分散です。直感的には、X が平均よりも大きいときに Y も平均より大きければ正の値、反対なら負の値を取ります。

標本共分散(サンプル共分散)

実際のデータから共分散を推定する場合、標本共分散を使います。サンプル {x1,...,xn}, {y1,...,yn} に対する不偏推定量は次のようになります。

s_xy = 1/(n-1) * Σ_{i=1}^n (xi - x̄)(yi - ȳ)

ここで x̄, ȳ はそれぞれの標本平均です。分母が n-1 なのは不偏性を保つためで、母分散・母共分散の期待値を一致させるためです。一方、機械学習や行列計算で扱うことの多い「慣用的な」定義は分母を n とすることもあります(特に確率分布の対数尤度を最大化する場合や最大尤度推定で)。用途に応じてどちらを使うか明確にすることが重要です。

性質と単位依存性

  • 共分散は対称:Cov(X, Y) = Cov(Y, X)。
  • 分散は共分散の特殊例:Var(X) = Cov(X, X)。
  • 線形性:Cov(aX + b, cY + d) = ac * Cov(X, Y)。定数項は共分散に影響しません。
  • 単位に依存:共分散の値は X と Y の単位に依存するため直接比較は難しい。これが相関係数(コリレーション)を使う理由のひとつです。

相関係数との違い

相関係数(Pearson の積率相関係数)は共分散を各変数の標準偏差で除した無次元量です。

ρ_{XY} = Cov(X, Y) / (σX σY)

この値は -1 から 1 の範囲に収まり、変数間の線形関係の強さを示します。単位に依存しないため、異なるスケールの変数同士の比較に適しています。ただし非線形関係を捕捉しない点に注意が必要です。

共分散行列(Covariance Matrix)

多変量データでは共分散行列が使われます。d 次元ランダムベクトル X の共分散行列 Σ は、要素として各ペアの共分散を持つ対称行列です。

Σ_{ij} = Cov(X_i, X_j)

共分散行列は常に半正定値(positive semidefinite)です。つまり任意のベクトル z に対して z^T Σ z ≥ 0 が成立します。これは分散の定義から直ちに従います。固有分解や特異値分解(SVD)はこの行列の構造解析で重要な役割を果たします(例:主成分分析)。

応用例:主成分分析(PCA)

PCA はデータの分散が最大になる直交方向(主成分)を見つける手法です。共分散行列の固有ベクトルが主成分方向、固有値がその方向の分散量を示します。データを中心化(平均0にする)してから共分散行列を計算するのが基本で、スケーリング(標準化)を行うかどうかは解析目的によります。

応用例:ポートフォリオ理論(マルコヴィッツ効率的フロンティア)

金融において、資産の共分散行列はポートフォリオのリスク(分散)を決定する中心的な要素です。ポートフォリオの分散は w^T Σ w(w は資産配分ベクトル)で与えられ、共分散が低い資産の組み合わせでリスクが低減されることが分かります。したがって、資産間の共分散の精度は最適配分の決定に直結します。

回帰分析との関係

単回帰の傾きは共分散と分散の比で表せます。

β = Cov(X, Y) / Var(X)

ここから、共分散が回帰係数の直感的な源泉であることが分かります。共分散がゼロなら線形回帰の傾きはゼロ(説明変数 X による線形説明力がない)となります。

数値的注意点と実装

  • 中心化(平均引き算):共分散計算ではデータを中心化することが前提。平均を差し引かないと共分散は大きく歪む。
  • 数値安定性:大きな値の差による桁落ちやオーバーフローに注意。2乗和を直接計算する naive な方法は不安定です。
  • オンラインアルゴリズム:ストリーミングデータ向けに Welford 法の拡張で分散と共分散を逐次更新できます。メモリ効率が良く、数値安定性も高いです。
  • 並列計算:大規模データではデータチャンクごとに部分和を計算し、後で合成する方法が有効です。合成時には平均と共分散の補正が必要です。

Welford のアルゴリズム(共分散版)

Welford 法の共分散版は次のような更新式で実装できます(擬似コード的説明):

初期化: n=0, meanX=0, meanY=0, C=0
n をインクリメントして各観測 (x,y) を受け取るごとに:
n_new = n + 1
dx = x - meanX
dy = y - meanY
meanX = meanX + dx / n_new
meanY = meanY + dy / n_new
C = C + dx * (y - meanY) // ここで meanY は更新後の値を使う
最終的な不偏分散/共分散は C / (n - 1)

この方法は 1 パスで安定に共分散を計算できます。

実務上の落とし穴

  • 標本サイズが小さい場合、共分散推定は不安定でノイズが大きい。正則化(リッジ的なスキームや縮小推定)を検討する。
  • 外れ値に敏感:外れ値は共分散を大きく歪める。ロバスト共分散推定(M-estimator、Minimum Covariance Determinant など)を検討する。
  • 非線形関係を見落とす:共分散は線形依存しか捉えない。非線形相関は検出できないため、スピアマンの順位相関など他の手法が必要な場合がある。
  • 標準化の判断:PCA などで標準化するか否かは、変数のスケールと解釈に依存する。スケール差が大きい場合は標準化するのが一般的。

共分散の高速計算とライブラリ

多くの数値計算ライブラリに共分散計算の最適実装が含まれています(例えば NumPy の cov、Pandas の cov、R の cov)。これらは内部で数値安定な手法や BLAS を活用した行列演算を使って高速化されています。大規模データや分散環境では Spark MLlib の統計モジュール等を使うとよいでしょう。

例:簡単な直感的シナリオ

身長と体重のデータを考えると、身長が高い人は体重も重くなる傾向があるため正の共分散になります。一方、降水量と屋外ビール販売量などが負の共分散になるとは限りません(この例は単純化)。共分散の符号と大きさを解釈する際は、データのスケール・測定単位・分布形状を常に考慮してください。

まとめと実務の勘所

共分散はデータ間の線形な同時変動を捉える最も基本的な統計量です。共分散行列は多変量解析の核であり、PCA、回帰、ポートフォリオ最適化など多くの手法で中心的役割を果たします。一方で単位依存性、外れ値への感度、非線形関係の見逃しといった制約があるため、適切な前処理(中心化、場合により標準化)、数値安定な実装(Welford 法など)、ロバスト推定や正則化の検討が重要です。

参考文献