评分和排名算法

排名是非常高频的需求,通常伴随着某种决策行为,比如投资行为,比赛投注行为,商品选购,等等。排名的对象五花八门,理财产品,参赛队伍,商品,网页,视频,等等。排名就是为这些对象产生一个有序的列表,可以先为对象产生一个评分,然后基于评分产生有序列表,也可以不产生评分直接产生最终的有序列表。
排名问题形式简答,但解答却可能不简单,为具体场景设计合适的排名方法,是一个比较困难的问题。

梅西法

梅西法的思路是队伍的评分需要反应两只队伍对局时获胜方的优势:

r i − r j = y k r_i - r_j = y_k rirj=yk

其中 r i , r j r_i,r_j ri,rj 为待求解的队伍的评分(未知数), y k y_k yk 表示表示一场比赛中获胜方取得的优势,也就得分差值。n 支队伍总共进行了 m 场比赛,产生一个包含 n 个未知评分由 m 个线性方程组成的线性方程组,记为:

X r = y Xr = y Xr=y

其中 X 为稀疏矩阵,每一场比赛对应矩阵的一行,对应行中位置 i 的元素值为 1, 位置 j 的元素值为 -1, 其余元素为 0. y 为比赛得分的差值组成的列向量。

由于 X 矩阵比较稀疏,梅西发现经过调整得到方程组:

X T X r = X T y X^TXr = X^Ty XTXr=XTy

M = X T X , p = X T y M = X^TX,p=X^Ty M=XTX,p=XTy

M r = p Mr = p Mr=p

M 是比 X 稠密的矩阵,求解更为有利,并且M的元素也具有比较明确的物理含义:对角元素 M i i M_{ii} Mii含义是队伍 i 总共进行的比赛的场次,非对角元素 M i j M_{ij} Mij的含义是队伍i和队伍j对阵场数的相反数。 p i p_i pi的含义是队伍i参加的所有比赛的分差之和。

M的各行元素之和为零,rank(M) < n, M r = p Mr = p Mr=p 的解不唯一,梅西法处理方式是以全 1 行替换M中的任意一行,并将p中对应行元素设置为零,要求评分总和为零。经过调整后的方程记为:

M ‾ r = p ‾ \overline{M}r = \overline{p} Mr=p

求解此方程得出梅西评分向量 r r r

科利法

科利法采用获胜率作为队伍的评分,并将获胜率 r i = w i t i r_i = \frac{w_i}{t_i} ri=tiwi 改进为 r i = 1 + w i 2 + t i r_i = \frac{1+w_i}{2+t_i} ri=2+ti1+wi,其中 w i w_i wi为队伍 i 获胜的次数, t i t_i ti 为参与的总比赛次数。

w i = w i − l i 2 + w i + l i 2 w_i = \frac{w_i - l_i}{2} + \frac{w_i + l_i}{2} wi=2wili+2wi+li

= w i − l i 2 + t ) i 2 = \frac{w_i - l_i}{2} + \frac{t)_i}{2} =2wili+2t)i

= w i − l i 2 + ∑ j = 1 t i 1 2 = \frac{w_i - l_i}{2} + \sum_{j=1}^{t_i}\frac{1}{2} =2wili+j=1ti21

≈ w i − l i 2 + ∑ j = 1 t i r j \approx \frac{w_i - l_i}{2} + \sum_{j=1}^{t_i}r_j 2wili+j=1tirj

r i = 1 + w i 2 + t i = 1 + ( w i − l i ) / 2 + ∑ j r j 2 + t i r_i = \frac{1 + w_i}{2 + t_i}= \frac{1 + (w_i - l_i)/2 + \sum_j r_j}{2 + t_i} ri=2+ti1+wi=2+ti1+(wili)/2+jrj

以上等式采用矩阵表示,得到科利矩阵 C C C :

C i j = { 2 + t i i == j − n i j i ≠ j C_{ij}= \begin{cases} 2 + t_i& \text{i == j}\\ -n_{ij}& i\neq j \end{cases} Cij={2+tiniji == ji=j

其中 t i t_i ti 表示队伍 i 所进行的比赛总场数, n i j n_{ij} nij表示对于i和j对阵的场数。

右向量 b i = 1 + 1 2 ( w i − l i ) b_i = 1 + \frac{1}{2}(w_i-l_i) bi=1+21(wili)

其中 w i w_i wi表示队伍 i 累积获胜的场数。 l i l_i li 表示队伍 i 累积输掉的比赛场数。

求解: C r = b Cr = b Cr=b 得到科利评分向量 r r r.

基纳法

基纳法的出发点是队伍的实力和队伍得到的评分的应该满足以下关系:

  1. 队伍的实力应该由对手的实力以及对阵表现共同决定,赢得厉害的对手,比赢得弱对手,更能体现出队伍的实力
  2. 队伍的评分反应队伍的实力,应该与它的实力成正比: s i = λ r i s_i = \lambda r_i si=λri,其中 s i , r i s_i,r_i si,ri 分别表示队伍 i 的实力值和评分值,并且比例值 λ \lambda λ 对所有队伍取值相等

统计数据 a i j a_{ij} aij 衡量队伍 i 对阵队伍 j 的对阵表现情况。

队伍 i 相比于队伍 j 的相对实力定义为统计数据与对手 j 的评分乘积: s i j = a i j r j s_{ij} = a_{ij}r_j sij=aijrj

队伍 i 绝对定义为所有对手相对实力只和: s i = ∑ j = 1 m s i j = ∑ j = 1 m a i j r j s_i = \sum_{j=1}^ms_{ij} = \sum_{j=1}^ma_{ij}r_j si=j=1msij=j=1maijrj

由基纳法的出发点2得出方程: A r = λ r Ar = \lambda r Ar=λr,求解基纳方程得出基纳评分 r r r

埃洛体系

埃洛评分出发点是队伍评分确定之后,改变其评分的因素应当是队伍的当前的表现,优于或差于其平均表现的程度:

r ( n e w ) = r ( o l d ) + K ( S − μ ) r_{(new)} = r_{(old)} + K(S - \mu) r(new)=r(old)+K(Sμ)

埃洛评分的更新公式为:

S i j = { 1 i 击败 j 0.5 i 战平 j 0 j 击败 i S_{ij}= \begin{cases} 1& \text{i 击败 j}\\ 0.5 & i战平j \\ 0 & j击败i \end{cases} Sij= 10.50击败 ji战平jj击败i

μ i j = L ( d i j / 400 ) = 1 1 + e − d i j / 400 , d i j = r i ( o l d ) − r j ( o l d ) \mu_{ij} = L(d_{ij}/400) = \frac{1}{1 + e^{-d_{ij}/400}},d_{ij} = r_{i(old)} - r_{j(old)} μij=L(dij/400)=1+edij/4001,dij=ri(old)rj(old)

r i ( n e w ) = r i ( o l d ) + K ( S i j − μ i j ) r_{i(new)} = r_{i(old)}+ K(S_{ij} - \mu_{ij}) ri(new)=ri(old)+K(Sijμij)

r j ( n e w ) = r j ( o l d ) + + K ( S j i − μ j i ) r_{j(new)} = r_{j(old)} + + K(S_{ji} - \mu_{ji}) rj(new)=rj(old)++K(Sjiμji)

马尔科夫法

马尔科夫法的基本思想是投票,计算步骤为:

  1. 利用多种比赛数据生成投票矩阵 S S S
  2. 计算矩阵的主特征向量 : S r = r Sr = r Sr=r
攻防(OD)评分法

比赛统计数据笔记为:

a i j = { j与i对阵获取的分数(攻击角度的描述) i与j对阵失去的分数(防守角度的描述) a_{ij}= \begin{cases} \text{j与i对阵获取的分数(攻击角度的描述)}\\ \text{i与j对阵失去的分数(防守角度的描述)} \end{cases} aij={ji对阵获取的分数(攻击角度的描述)ij对阵失去的分数(防守角度的描述)

给定一组队伍的防守评分 { d 1 , d 2 , . . . , d m } \{d_1, d_2,...,d_m\} {d1,d2,...,dm},以及比赛统计数据 a i j a_{ij} aij,队伍 j 的攻击评分定义为:

o j = a 1 j d 1 + a 2 j d 2 + . . . + a 1 m d m o_j = \frac{a_{1j}}{d_1}+\frac{a_{2j}}{d_2}+ ... + \frac{a_{1m}}{d_m} oj=d1a1j+d2a2j+...+dma1m

给定一组攻击评分 { o 1 , o 2 , . . . , o m } \{o_1,o_2,...,o_m\} {o1,o2,...,om} 以及比赛统计数据 a i j a_{ij} aij,定义队伍 i 的防守评分为 :

d i = a i 1 o i 1 + a i 2 o i 2 + . . . + a i m o i m d_i = \frac{a_{i1}}{o_{i1}} +\frac{a_{i2}}{o_{i2}} + ... + \frac{a_{im}}{o_{im}} di=oi1ai1+oi2ai2+...+oimaim

综合队伍的攻击评分和防守评分,得到OD总评分 r i = o i / d i r_i = o_i / d_i ri=oi/di

基于重排的排名方法

m i n Q ∣ ∣ Q T D Q − R ^ ∣ ∣ , s t . Q e = e , e T Q = e T , q i j ∈ { i , j } min_{Q}||Q^TDQ - \hat{R}||,st. Qe = e, e^TQ = e^T,q_{ij}\in\{i,j\} minQ∣∣QTDQR^∣∣,st.Qe=e,eTQ=eT,qij{i,j},其中Q为排列矩阵,D为队伍-队伍数据矩阵,包含了成对的比较数据。

分差评分

m i n e T x = 0 f ( x ) = m i n e T x = 0 ∣ ∣ K − R ( x ) ∣ ∣ 2 = m i n e T x = 0 ∣ ∣ K − ( x e T − e x T ) ∣ ∣ 2 min_{e^Tx = 0}f(x) = min_{e^Tx = 0}||K - R(x)||^2 = min_{e^Tx = 0}||K - (xe^T - ex^T)||^2 mineTx=0f(x)=mineTx=0∣∣KR(x)2=mineTx=0∣∣K(xeTexT)2

x = K e / n x = Ke/n x=Ke/n

排名聚合

排名聚合的目的是通过某种方式降多个排名列表进行融合,产生一个单一的新的更好的排名列表:

  1. 波达计数法
  2. 平均法
  3. 模拟法
  4. 投票法
  5. 评分聚合法
  6. 最优化聚合法
排名方法的对比

确定众多排名方法中哪个最优是吧非常困难的,难点在于最优的标准。稍容易回答的问题是两个排名算法的差异:

  • 二分图对比:定性展示排名列表的差异

  • 肯德尔测度 τ \tau τ

    • 完全列表的肯德尔测度 τ = n c − n d n ( n − 1 ) / 2 \tau = \frac{n_c - n_d}{n(n-1)/2} τ=n(n1)/2ncnd n c n_c nc表示两个列表中先后顺序一致的对象的对数, n d n_d nd表示排名不一致的对象对的个数
    • 部分列表上的肯德尔测度 τ p a r t i a l = n c − n d − n u n ( n − 2 ) / 2 − n u \tau_{partial} = \frac{n_c - n_d - n_u}{n(n-2)/2 - n_u} τpartial=n(n2)/2nuncndnu, n u n_u nu表示未标记对象对的个数
    • 肯德尔测度的缺点是没考虑不一致对象对的绝对位置,实际当中排名靠前的队伍的排名相对重要,是关注的重点,排名尾部的队伍的排名相对不那么重要,这点在肯德尔测度 τ \tau τ 中没有体现
  • 斯皮尔曼加权测度 ρ \rho ρ

    • 完全列表的斯皮尔曼加权测度 ρ = ∑ i = 1 k ∣ ∣ l ( i ) − q ( i ) ∣ ∣ 1 m i n { l ( i ) , q ( i ) } \rho = \frac{\sum_{i = 1}^k||l(i) - q(i)||_1}{min\{l(i),q(i)\}} ρ=min{l(i),q(i)}i=1k∣∣l(i)q(i)1
    • 长度为 k 的部分列表的斯皮尔曼加权测度 ρ = ∑ i = 1 k ϕ i ϕ ( l , l c ) \rho = \frac{\sum_{i=1}^k\phi_i}{\phi(l,l^c)} ρ=ϕ(l,lc)i=1kϕi
      • ϕ ( l , l c ) = − 2 k + 2 x ∑ i = 1 k 1 / i \phi(l,l^c) = -2k + 2x\sum_{i=1}^k1/i ϕ(l,lc)=2k+2xi=1k1/i
      • i ∈ ( l ∩ q ) , ϕ i = ∣ l ( x ) − q ( x ) ∣ m i n { l ( x ) , q ( x ) } i\in(l\cap q), \phi_i = \frac{|l(x) - q(x)|}{min\{l(x), q(x)\}} i(lq),ϕi=min{l(x),q(x)}l(x)q(x)
      • i ∈ ( l ∪ q ) / ( l ∩ q ) , ϕ i = l ( i ) − x m i n { l ( i ) , x } , x = k − 4 ⌊ k / 2 ⌋ + 2 ( k + 1 ) ∑ i = 1 ⌊ k / 2 ⌋ 1 / i ∑ i = 1 k 1 / i i\in (l\cup q) / (l \cap q), \phi_i = \frac{l(i) - x}{min\{l(i), x\}}, x = \frac{k - 4\lfloor k/2\rfloor + 2(k+1)\sum_{i=1}^{\lfloor k/2\rfloor}1/i}{\sum_{i=1}^k 1/ i} i(lq)/(lq),ϕi=min{l(i),x}l(i)x,x=i=1k1/ik4k/2+2(k+1)i=1k/21/i
局部凯梅尼最优

对于一个聚合列表 μ \mu μ,如果将其中任意一对对象加以交换,都不会使任一输入列表 l i l_i li μ \mu μ 之间的肯德尔度量 τ \tau τ 之和降低,则称 μ \mu μ为局部凯梅尼最优。

排名算法的敏感性

输入数据较小的变动带来输出数据较大的变化,则称该方法是敏感的。反之则称方法不敏感或则鲁棒的。鲁棒性常作为机器学习模型的训练目标。

研究发现科利、梅西评分法是比较鲁棒的排名方法,马尔科夫是比较敏感的。

你可能感兴趣的:(算法,人工智能)