Kendallタウ ランク距離は、2 つのランキング リスト間のペアごとの不一致の数をカウントするメトリック (距離関数)です。距離が大きいほど、2 つのリストは類似していないことになります。Kendall タウ距離は、バブル ソートアルゴリズムが 1 つのリストを他のリストと同じ順序に配置するために実行するスワップの数に相当するため、バブル ソート距離とも呼ばれます。Kendall タウ距離は、 Maurice Kendallによって作成されました。
意味
2 つのリストと間の Kendall タウ順位距離は、とがそれぞれ との要素の順位である 場合です 。
2 つのリストが同一の場合は 0 になり、一方のリストが他方のリストの逆の場合は (リストのサイズ)になります。
ケンドールタウ距離は次のように定義されることもある。
どこ
- Pは、および内の異なる要素の順序付けられていないペアの集合である。
- = 0、iとjが同じ順序である場合、
- = 1、iとjが逆の順序である場合
ケンドールのタウ距離は、不一致なペアの合計数として定義することもできます。
ランキングにおけるケンドールのタウ距離: 順列 (またはランキング) は、0 から N-1 までの各整数が 1 回ずつ出現する N 個の整数の配列です。
2つのランキング間のケンドールタウ距離は、2つのランキングで異なる順序になっているペアの数です。たとえば、0 3 1 6 2 5 4と1 0 3 6 4 2 5の間のケンドールタウ距離は4です。これは、0-1、3-1、2-4、5-4のペアが2つのランキングで異なる順序になっているが、他のすべてのペアは同じ順序になっているためです。[1]
正規化されたケンドールタウ距離 は、したがって区間[0,1]内にあります。
Kendall タウ距離関数が(ここで、 と はそれぞれと の要素の順位)の代わりに として実行される場合、三角不等式は保証されません。リストに繰り返しがある場合にも、三角不等式が失敗することがあります。そのため、メトリックを扱っているわけではありません。
ケンドールタウ距離の一般化バージョンは、さまざまな項目やランキングのさまざまな位置に重みを与えるために提案されています。[2]
ケンドールタウ順位相関係数との比較
ケンドールのタウ距離()は、統計で使用されるケンドールのタウ順位相関係数()と混同しないでください。
これらは 、
または、より簡単に言うと 、正規化された距離は上記を参照)
距離は 0 から までの値です。(正規化された距離は 0 から 1 までです)
相関関係は -1 から 1 の間です。
等しいものの間の距離は 0 で、等しいものの間の相関は 1 です。
反転間の距離は、反転間の相関は-1です。
たとえば、ランキング A>B>C>D と A>B>C>D を比較すると、距離は 0、相関は 1 になります。
ランキングA>B>C>DとD>C>B>Aを比較すると、距離は6、相関は-1です。
順位を比較すると、A>B>C>DとB>D>A>Cの距離は3、相関は0です。
例
5 人のグループを身長と体重で順位付けするとします。
ここで、人 A は最も背が高く、3 番目に重い、人 B は 2 番目に背が高く、4 番目に重い、というようになります。
これら 2 つのランキング間のケンドール タウ距離を計算するには、各人を他のすべての人とペアにして、リスト 1 の値がリスト 2 の値と逆の順序になっている回数を数えます。
値が逆の順序になっているペアが4つあるので、ケンドールタウ距離は4です。正規化されたケンドールタウ距離は
値が 0.4 の場合、2 つのリスト間でペアの 40% の順序が異なることを示します。
ケンドールタウ距離の計算
Python での単純な実装 ( NumPyを使用) は次のとおりです。
numpyを npとして インポートする
def normalised_kendall_tau_distance ( values1 , values2 ):
"""ケンドールのタウ距離を計算します。""" n = len ( values1 ) assert len ( values2 ) == n , "両方のリストの長さは同じである必要があります" i , j = np . meshgrid ( np . arange ( n ), np . arange ( n )) a = np . argsort ( values1 ) b = np . argsort ( values2 ) ndisordered = np . logical_or ( np . logical_and ( a [ i ] < a [ j ], b [ i ] > b [ j ]), np . logical_and ( a [ i ] > a [ j ], b [ i ] < b [ j ])) . sum () return ndisordered / ( n * ( n - 1 ))
ただし、これにはメモリが必要となり、大規模な配列では非効率的です。
2 つのランキング が与えられた場合、 となるように項目の名前を変更することができます。すると、ケンドールのタウ距離を計算する問題は、における反転の数、つまりとなるようなインデックス ペアの数を計算することに簡略化されます。この数を計算するアルゴリズムはいくつかあります。
- マージソートに基づく単純なアルゴリズムには時間がかかる。[3]
- より高度なアルゴリズムには時間が必要である。[4]
以下は基本的な C 実装です。
#include <stdbool.h>
int kendallTau ( short x [], short y [], int len ) { int i , j , v = 0 ; bool a , b ;
( i = 0 ; i < len ; i ++ ) { ( j = i + 1 ; j < len ; j ++ ) {
a = x [ i ] < x [ j ] && y [ i ] > y [ j ]; b = x [ i ] > x [ j ] && y [ i ] < y [ j ];
もし( a || b ) v ++であれば;
}
}
戻り値: abs ( v ); }
float normalize ( int kt 、int len ) { return kt / ( len * ( len - 1 ) / 2.0 ); }
参照
参考文献
- ^ 「アプリケーションの並べ替え」。
- ^ Ravi KumarとSergei Vassilvitskii (2010). ランキング間の一般化距離(PDF)。
- ^ Ionescu, Vlad. 「順列における「反転」の数を計算する」。Stack Overflow 。 2017年2月24日閲覧。
- ^ Chan, Timothy M.; Pătraşcu, Mihai (2010). 「Counting Inversions、Offline Orthogonal Range Counting、および関連する問題」。離散アルゴリズムに関する第 21 回 ACM-SIAM シンポジウムの議事録。p . 161。CiteSeerX 10.1.1.208.2715。doi : 10.1137 / 1.9781611973075.15。ISBN 978-0-89871-701-3。
- Fagin, R.; Kumar, R.; Sivakumar, D. (2003). 「上位 k リストの比較」. SIAM Journal on Discrete Mathematics . 17 (1): 134–160. CiteSeerX 10.1.1.86.3234 . doi :10.1137/S0895480102412856. S2CID 6249357.
- Kendall, M. (1948)。順位相関法。Charles Griffin & Company Limited。
- Kendall, M. (1938). 「順位相関の新しい尺度」Biometrika . 30 (1/2): 81–89. doi :10.2307/2332226. JSTOR 2332226.
外部リンク
- オンラインソフトウェア: ケンドールのタウ順位相関を計算する
- QuickVote — 2 つのインタラクティブなランキング リスト間の Kendall タウ距離を計算し、リスト間のペアごとの不一致を表示する Web サイト。
