Thurstone models, fast.

thurstone is a Python package for inferring relative ability from multi-entrant winning probabilities. This is the model: five horses, each with a Normal performance density, whichever draws the smallest wins. Drag the sliders.

Winning probabilities update live via the lattice algorithm — multiplicity-aware, no Lucian renormalisation. For more room, open the full forward-pricing demo →

The rest of this site is a tour: what Thurstone-class models are, why they were historically hard to use, and how a lattice algorithm makes them O(N) per race and trivially invertible. Every demo runs a pure JavaScript port of the Python analytics, verified against Python via JSON golden fixtures.

Four short reads

background

Thurstone models

Latent performance, the “tractability vs purity” trade-off, and where Bradley–Terry, Plackett–Luce and Mallows actually break.

Read →
algorithm

The fast ability transform

The $(f, S, m)$ triple, union, removal and comparison — the multiplicity calculus that makes the inverse loop scale.

Read →
systems

Rating systems across races

Stitching many races into a single coherent ability scale. Curve-based Gauss–Newton vs the fast LS baseline.

Read →
geometry

Multi-dimensional ability

Items as vectors, races as directions. Sprinter-vs-stayer, clay-vs-grass, and the rest of the world where one number per item isn't enough.

Read →

Six interactive demos

argument

The Triple Crown

Three generative models, identical winning probabilities. The case for Thurstone over Luce.

forward

Forward pricing

Drag ability sliders; watch state prices and dividends update live.

inverse

Inverse calibration

Type or paste dividends; recover the implied ability vector.

multi-race

Multi-race stitching

Paste several races sharing runners; recover one global ability scale.

density

Density playground

Skew-normal performance densities on the lattice; shift, convolve, dilate.

ties

Walkovers & ties

Hang runners off the lattice; see walkover and equal-share behaviour.

2D

2D (loc, scale) inversion

Per-runner scale (consistency). Two-dimensional inversion in action.

Cite

Cotton, Peter. “Inferring Relative Ability from Winning Probability in Multientrant Contests,” SIAM Journal on Financial Mathematics, 12(1), 295–317 (2021). DOI: 10.1137/19M1276261.