Rating systems
The research line: whole-density beliefs, exact full-order updates.
Rating systems for multi-entrant contests: races, tournaments, leaderboards. Beliefs are whole densities on a lattice, free to be skewed or multimodal; each event updates them with the exact likelihood of the full finish order, computed by an O(N) chain; predictions are exact winner-of-many probabilities, dead-heat aware. Every claim is benchmarked against TrueSkill, OpenSkill, Glicko-2 and Elo on twelve datasets with market ceilings where they exist.
Quick start
Status: this API is the research line, developed in the repository's src/ and shipping with a future release; the results above are from BENCHMARKS.md. The shipped race engine is on the home page.
from winning import ThurstoneRating
tr = ThurstoneRating()
tr.observe(names=["ada", "ben", "cid", "dot"], ranks=[1, 2, 3, 4])
tr.observe(names=["ada", "cid", "eve"], ranks=[1, 2, 3])
tr.win_probabilities(["ada", "cid", "eve"]) # exact field win probabilities
tr.rating("ada") # Rating(mu=..., sigma=...)
tr.leaderboard() # best-first, conservative
Every system in the package speaks the same three verbs: observe(names,
ranks), win_probabilities(names), rating(name).
That includes the shims around third-party comparators, so a benchmark row is a
one-line swap. Install with pip install winning (core depends only on
numpy) or pip install winning[benchmarks] for the
comparators.