如何比较排名列表

Val*_*oni 6 compare list ranking

我有两个排名项目列表.每个项目都有一个排名和一个相关的分数.得分决定了排名.这两个列表可以包含(通常也可以)不同的项目,即它们的交集可以为空.我需要采取措施来比较这些排名.是否有众所周知的算法(在文献或现实世界系统中)?距离的度量应考虑分数以及项目的等级.

Mik*_*ley 15

这个问题以前从未得到过回答,但我仍然认为这对很多人来说很重要:

普通相关性测试不能满足您的两个要求,即列表的非联合性等级的重要性.除此之外,其中大多数(例如Kendall-Tau)不考虑订单:

>>> from scipy.stats import kendalltau
>>> kendalltau([1,2,3,4,5], [2,1,3,4,5])
KendalltauResult(correlation=0.79999999999999982, value=0.050043527347496564)
>>> kendalltau([1,2,3,4,5], [1,2,3,5,4])
KendalltauResult(correlation=0.79999999999999982, value=0.050043527347496564)
Run Code Online (Sandbox Code Playgroud)

第一个比较应该产生比第二个更小的值,因为列表的头部比尾部更重要(第二个要求).

除此之外,我们可以看到两个列表需要具有相同的大小并且具有相同类型的元素(第一个要求)

可能的方法:

满足您所有需求的措施称为秩偏差重叠.这是所谓的基于平均值的重叠的概括,这在本博客中得到了很好的说明.同一个人也推出了RBO 的实现.

2018年1月更新:

  • 另一个用于python 3.5.2 的RBO实现


ale*_*_sp 5

也许不能完全解决问题,但绝对值得一看Kendall 的加权 tau

当顺序很重要时,它提供了一种计算排名列表之间相似性的更好方法,因为它允许基于排名顺序的任意加权。

例如,人们可能对增加列表前 20 项中的相似性而不是统一加权更感兴趣。

scipy 中也有一个很好的实现。


小智 1

有许多方法可以比较前 k 个(排名)列表。有些计算起来非常简单,需要做出一些简化的假设,而另一些则不那么简单,但在评估列表之间的排名相似性时更加严格。我最近发现的一篇论文使用信息论和数据压缩的概念,以统计上有意义的方式处理这个问题:http://arxiv.org/abs/1310.0110