Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

Spearman

概要

スピアマン順位相関係数 ρ は、パラメータ x_i と目的関数 y の間の単調な関係の強さを測るノンパラメトリック統計量です。 生の値ではなく順位に置き換えてから相関を取ることで、値が線形関係に従わなくても、順序(大小関係)が保たれていれば高い値を示します。 たとえば y が x の 3 乗に比例するような関係では、値そのものは直線から大きく外れますが、順位は完全に一致するため ρ は 1 になります。

Importance チャートでは |ρ|(絶対値)を表示します。 正負の方向は問わず「どれだけ強く関係しているか」だけを評価するため、目的関数を増やすパラメータと減らすパラメータが同じ高さの棒として並びます。 方向まで知りたい場合は、係数の符号が読める Ridge や、応答の形状そのものを描く PDP と合わせて確認してください。


数式

Step 1: 順位変換

n 個のトライアルに対し、各変数の値を順位に変換します。

x=[3.1,  1.2,  4.5,  2.0]    rank(x)=[3,  1,  4,  2]x = [3.1,; 1.2,; 4.5,; 2.0] ;\longrightarrow; \mathrm{rank}(x) = [3,; 1,; 4,; 2]

ここでの「各変数」とは、比較する 2 系列(パラメータ xix_i と目的関数 yy)のそれぞれを指します。 順位付けは各系列を、その系列自身の値の大小に基づいて独立に行います。 xx の順位は xx の値から、 yy の順位は yy の値から決まります。 「目的関数の値に応じてパラメータを並べ替える」という意味ではない点に注意してください。

また、トライアルの対応関係(行)は固定したまま、 xx 列と yy 列をそれぞれ独立に順位へ変換します。 行の対応を保ったまま列ごとに順位へ置き換えることで、「 xx の順位と yy の順位が一致して動くか(=単調な関係があるか)」を測れます。

たとえば 4 トライアルで次の値が得られたとします(行=トライアルの並びは固定です):

trial xx yy rank(x)\mathrm{rank}(x) rank(y)\mathrm{rank}(y)
A 3.1 10.0 3 2
B 1.2 30.0 1 4
C 4.5 5.0 4 1
D 2.0 20.0 2 3
rank(x)\mathrm{rank}(x)xx 列の値の大小、 rank(y)\mathrm{rank}(y)yy
列の値の大小から、それぞれ独立に決まっています。

同値タイの処理: 同じ値が複数ある場合、それらの順位の平均を割り当てます(平均順位法)。

x=[1.0,  2.0,  2.0,  3.0]    rank(x)=[1,  2.5,  2.5,  4]x = [1.0,; 2.0,; 2.0,; 3.0] ;\longrightarrow; \mathrm{rank}(x) = [1,; 2.5,; 2.5,; 4]

整数パラメータや、水準数の少ないカテゴリを符号化した列では同じ値が何度も現れるため、多くのトライアルが同じ平均順位を共有します。 連続パラメータと並べて |ρ| を比べるときは、この違いを念頭に置いてください。

Step 2: ピアソン積率相関係数を順位に適用

Step 1 で得た順位列を Rx=rank(x)R_x = \mathrm{rank}(x)Ry=rank(y)R_y = \mathrm{rank}(y) とします。 Rx,iR_{x,i}ii 番目のトライアルにおける xx の値の順位、 Ry,iR_{y,i} は同じトライアルにおける yy の値の順位を表します。 Rˉx,Rˉy\bar R_x, \bar R_y はそれぞれの順位列の平均(タイがなければ n+12\frac{n+1}{2})です。

この順位列 Rx,RyR_x, R_y に対してピアソン積率相関係数を計算します。

ρ=Corr(Rx,Ry)=i(Rx,iRˉx)(Ry,iRˉy)i(Rx,iRˉx)2i(Ry,iRˉy)2\rho = \mathrm{Corr}(R_x, R_y) = \frac{\sum_i (R_{x,i} - \bar R_x)(R_{y,i} - \bar R_y)}{\sqrt{\sum_i (R_{x,i} - \bar R_x)^2,\sum_i (R_{y,i} - \bar R_y)^2}}

タイがない場合は以下の簡易式と等価です:

ρ=16idi2n(n21)\rho = 1 - \frac{6\sum_i d_i^2}{n(n^2 - 1)}

ここで di=Rx,iRy,id_i = R_{x,i} - R_{y,i}(順位の差)です。


補足: ピアソン積率相関係数とは

Step 2 で用いるピアソン積率相関係数の定義や性質は、ピアソン積率相関係数を参照してください。

スピアマン相関は、これを生の値ではなく順位列に適用したものです。 順位は 1, 2, 3, … と等間隔に並ぶため、順位どうしの線形な連動を見ることが、元の値の単調な連動を見ることに対応します。


複数目的関数への対応

スピアマン相関 ρ は、目的関数 yky_k ごとに独立に計算されます:

ρk(pj)=ρ(pj,yk)\rho_k(p_j) = \rho(p_j, y_k)

目的関数をまたいだ平均は行いません。 (パラメータ, 目的関数)の組ごとにスコアを保持し、Importance チャートは現在選択されている目的関数 kkρk(pj)|\rho_k(p_j)| のみを表示します。 目的関数セレクタを切り替えると、その目的関数のスコアが再計算されて再描画されます。

目的関数ごとにスコアを分けて持つことで、多目的最適化において重要なパラメータが目的関数ごとに入れ替わる様子を、セレクタを切り替えながら追えます。


特性・限界

強み:

  • 外れ値に頑健です(値そのものでなく順位を使うため)
  • 非線形でも単調な関係なら捉えられます
  • 前提分布なし(ノンパラメトリック)
  • 計算が高速: O(n log n)

弱み:

  • 非単調な関係(U 字形など)は検出できません
  • パラメータ同士の交互作用(x_1 と x_2 が組み合わさった効果)は捉えられません
  • スケールを持たないため、どの程度影響するかの量的評価が難しいです

弱みのうち実務でもっとも効いてくるのは、1 つめの非単調な関係です。 たとえば目的関数が定義域の中央付近で最小になる U 字形の場合、前半の上昇と後半の下降が打ち消し合うため、|ρ| は 0 に近い値になることがあります。 実際には強く効いているパラメータを取りこぼすことになります。 全パラメータの |ρ| が一様に低いときは、Spearman の値をそのまま「効いていない」と読まないでください。 このような場合は PDP で応答の形状を確かめるか、RF-ANOVASobol のような分散ベースの手法に切り替えます。


使用場面の目安

  • トライアル数が少ないとき(目安 n < 50)
  • まず全パラメータを手早くスクリーニングしたいとき
  • 目的関数の形状が未知のとき

いずれも、目的関数がどんな形をしているか、まだわからない段階での使い方です。 Spearman が使うのは順位だけです。 極端な値が数点混ざっても順位が 1 つ入れ替わる程度の影響で済むため、少数サンプルでも結果が大きく振れにくくなります。

参考文献

  • Spearman, C. (1904). The proof and measurement of association between two things. American Journal of Psychology, 15(1), 72–101. https://doi.org/10.2307/1412159