まとめ
- ワッサースタイン距離は、質量を移動させるコストとして分布間の差を測ります。
- 1 次元の例で計算手順を確認し、多次元での近似手法も紹介します。
- 正規化や計算コストなど実務での注意点を整理します。
1. 定義と直感 #
1 次元離散分布 \(P\) と \(Q\) の 1-Wasserstein 距離は、累積分布関数 (CDF) の差を積分した量として表せます。
$$ W_1(P, Q) = \int_{-\infty}^{\infty} |F_P(x) - F_Q(x)| , dx $$
多次元の場合は最適輸送問題として定式化され、分布をもう一方へ移す最小コストを求めます。単に平均が異なるだけでなく、ばらつきや形状の違いも反映されます。
2. Python による計算例 #
import numpy as np
from scipy.stats import wasserstein_distance
x = np.random.normal(0, 1, size=1_000)
y = np.random.normal(1, 1.5, size=1_000)
dist = wasserstein_distance(x, y)
print(f"Wasserstein distance: {dist:.3f}")
scipy.stats.wasserstein_distance は 1 次元の距離を計算します。多次元の場合は pot(Python Optimal Transport)ライブラリの Sinkhorn 距離などの近似解法が実務でよく使われます。
3. 特長と比較ポイント #
- 形状の違いに敏感:平均が同じでも分散やモードの数が異なれば距離が大きくなります。
- ロバスト性:KL のようにサポートがずれて無限大になることがなく、外れ値にも比較的強い指標です。
- 計算コスト:高次元では最適輸送の計算が重いため、Sinkhorn 正則化などの高速化手法を活用します。
4. 実務での活用例 #
- 生成モデル評価:生成分布と実データの差異を総合的に把握。
- 品質検査・シミュレーション:ヒストグラム全体の違いを捉えたい場面で有効。
- 時系列モニタリング:期間ごとの分布変化を追跡し、閾値を超えたらアラートを出す。
5. 注意点 #
- 数値スケールが大きいと距離も大きくなるため、標準化や正規化を行ってから比較すると解釈しやすくなります。
- 距離が小さくても平均や分散の差が残る場合があるため、他指標との併用が推奨されます。
- Sinkhorn 距離は正則化パラメータの設定で結果が変わるため、比較目的に応じてチューニングしましょう。
まとめ #
ワッサースタイン距離は、位置と形の両方を考慮して分布の違いを測る指標です。1 次元では手軽に計算でき、多次元でも近似解を活用すれば実務に取り入れられます。KL や JS など他の距離と組み合わせて、分布比較を多角的に行いましょう。