Weng and Lin 2011 - Bradley-Terry Update Algorithms

Summary

Closed-form online rules for the Bradley-Terry model with variance: each player’s mean moves by and its variance shrinks by . Full-pair uses all opponents; partial-pair only adjacent ranks. With two players this is an Elo step with Bayesian step size.

Overview

Variance-augmented BT (Eq. 48): , (via ). Ties follow Glicko: (Eq. 51).

Main Content

Algorithm 1 (BT, full-pair)

For team and each opponent : , , , , with if (i beats q), if tied, if . Then , ; team update , ; individuals by Eqs. 43-44. The damping weights control how fast variance falls (default in the experiments).

Algorithm 2 (BT, partial-pair)

Same as Algorithm 1 except that sum only over = the teams ranked immediately above and below (one neighbour for first and last place).

Derivation sketch. and , so and .

Relation to Elo. Elo: with . is a variance-free, reparameterised ; here varies per player and falls with uncertainty.

Examples

One game, two new players

Setup. Both players , , ; player 1 wins. Solution. ; ; , so , ; drops from 69.4 to about 65.05 (verified numerically below). Interpretation. A new player moves about 2.6 points on its first result; a veteran with small moves far less.

import numpy as np
def bt_full_update(mu, sig2, rank, beta2=(25/6)**2, kappa=1e-4):
    """One player per team. rank: smaller is better; equal ranks tie."""
    k = len(mu); new_mu = mu.copy(); new_s2 = sig2.copy()
    for i in range(k):
        Om = De = 0.0
        for q in range(k):
            if q == i: continue
            c = np.sqrt(sig2[i] + sig2[q] + 2*beta2)
            p = 1/(1+np.exp((mu[q]-mu[i])/c))
            s = 1.0 if rank[q] > rank[i] else (0.5 if rank[q] == rank[i] else 0.0)
            gamma = np.sqrt(sig2[i])/c
            Om += sig2[i]/c*(s-p)
            De += gamma*(sig2[i]/c**2)*p*(1-p)
        new_mu[i] = mu[i] + Om
        new_s2[i] = sig2[i]*max(1-De, kappa)
    return new_mu, new_s2
mu = np.array([25., 25.]); s2 = np.array([(25/3)**2]*2)
print(bt_full_update(mu, s2, [1, 2]))   # mu -> [27.64, 22.36], sig2 -> 65.05

Connections

See Also

Weng and Lin 2011 - Thurstone-Mosteller and Plackett-Luce Update Rules · Weng and Lin 2011 - Glicko Derivation and Comparison with Elo