1、适用场景
网络节点重要性排名、人力资源干部作训排名、小组竞赛打分排名等任何输出为排名结果的系统。下面将以小组竞赛为例介绍常见的排序方法计算过程。
例1:有7个评委对4个候选人进行强制排名,最后根据评委的排名数据给出4位候选人的综合排名结果7位评委的详细评价数据见表1:
被评价人/评价人 | L1 | L2 | L3 | L4 | L5 | L6 | L7 |
---|---|---|---|---|---|---|---|
E1 | 3 | 1 | 3 | 4 | 2 | 2 | 2 |
E2 | 1 | 3 | 4 | 3 | 1 | 4 | 3 |
E3 | 2 | 2 | 2 | 2 | 3 | 3 | 1 |
E4 | 4 | 4 | 1 | 1 | 4 | 1 | 4 |
2、常见排序方法
常见的排名方法有“均值法”和“top计数法”等:“均值法”是对候选人的排名(分数)求平均,最后根据平均值的大小进行排序;而“top计数法”是提前设定一个阈值如前2名(分数>80),然后统计大于阈值的评价次数,最后根据次数的大小进行排序。
注:任何方法都会基于一定的假设,所以没有哪种方法是“普适”的,所以任何方法的结果都是可解释的。
均值法
用均值法求解上述例1的候选人综合排名结果,如下表2所示:
被评价人/结果 | 排名均值 | 排名 |
---|---|---|
E1 | 2.43 | 2 |
E2 | 2.71 | 3 |
E3 | 2.14 | 1 |
E4 | 2.71 | 3 |
top计数法
用均值法求解上述例1的候选人综合排名结果,如下表3所示:
被评价人/结果 | top1计数 | 排名 |
---|---|---|
E1 | 1 | 3 |
E2 | 2 | 2 |
E3 | 1 | 3 |
E4 | 3 | 1 |
由结果可知,“均值法”和“top计数法”都存在相同排名情况。
尝试解释相同排名情况:由表1,可知被评价人的所有排名数据以及所有评价人给出的排名序列数据,之前的“均值法”和“top计数法”都只用到了被评价人的排名数据,并没有利用相互排名差,这有时候是“不公平”的,并且统计的颗粒度不够细,所以偶尔会导致相同排名结果。
注:若不计较结果的颗粒度,这些结果都是基于各自的假设得出的结好果(均值法基于平均最优即为最优,top计数法基于top计数多为最优),但若要求结果不允许有重复排名的情况,那么这两种方法均不达标。当然,在许多情况下,这些方法都是很好的排序方法。
那么,是否可以找到一种方法使得大部分情况下不存在结果重复的情况呢?——>SpringRank*:基于弹性势能+针对有向带权重网络>>>求解网络中各节点重要性的弹性势能排序算法。
SpringRank
SpringRank(SR)针对的场景是有向带权重网络,损失函数是网络中节点间的弹性势能,SR设各节点的重要性因子为未知数,然后利用重要性因子的差值作为形变长度来计算弹性势能,最后最小化所有节点的弹性势能之和,此时整个网络系统对应的能量最低,所以系统最稳定,即得到了节点重要性的最优解。这里对SR不做更详细的介绍,若感兴趣的可以查看原文,在本文最后有引用,需要的自取。
排序场景都是可以转化为网络场景的,因为排序对象之间是相互关联的,所以可以将排序对象看作是相互连通的网络,这样就可以用SR方法来进行Ranking,下面本文就例1介绍如何应用SR模型进行Ranking,SR模型的求解步骤如下:
- 首先,我们假设被评价人是一些节点,并设他们的排名为节点的重要性;
- 接着,每个评价人都会给出一个被评价人的排名序列,则被评价人间的相互排名可以映射为节点间的连线,连线的权重可以是相互排名的高低次数(频数)或排名差(距离),至此排名场景即转化为了排名网络场景;
- 然后,两两节点间的连线已经连好,下一步需要构造相互排序矩阵,该矩阵记录着两两节点的相对排名高低次数(频数)或排名差(距离);
- 最后,利用SR模型构造损失函数,并通过求解总能量极小值获得全局最优解——所有被评价人的重要性因子,即被评价人的Ranking结果。
本文利用python编写了SR模型,带入固定格式的输入数据(表1)即可直接获得Ranking结果,源代码参见下文。例1的结果如下表4所示: