Evaluating from logs
A ranking system already shows lists and records clicks. Reweighting those logs estimates a new policy's clicks without showing it to anyone.
Off-policy evaluation, in your browser
BetterRankings estimates a ranking policy's clicks from logged data alone, then checks every estimate against a simulated online test where the true answer is known.
Running the first evaluation…
Settings changed. Press Run evaluation to update these results.
Applies to clipped IPS and doubly robust. Lower clips cut noise from rare, heavily weighted queries but pull the estimate down.
Each panel joins a policy's true rank (left) to the rank the estimator gives it (right). Flat lines are correct; crossing lines are policies put in the wrong order.
Click rates fall down the list. Part of that is position bias: lower slots get less attention whatever they show.
Your file stays on your device. This page reads it in your browser and never uploads or sends it anywhere. There is no server and no tracking.
One row per query. Positions count from 1 at the top of the list. Lists may hold 2 to 6 items.
| Column | Meaning |
|---|---|
query_id | Any identifier |
ctx_1 to ctx_3 | Query context features |
item_K | Item shown at position K |
click_K | 1 if it was clicked, else 0 |
item_K_pop | Popularity feature of that item |
item_K_f1 to item_K_f3 | Other item features |
propensity | Probability the logging policy gave the whole list it showed |
target_propensity | Optional. Probability your own policy gives that list |
How it works
If the current policy shows lists with some randomness and records how likely each list was, its old logs can answer a new question: how many clicks would a different policy have earned?
A ranking system already shows lists and records clicks. Reweighting those logs estimates a new policy's clicks without showing it to anyone.
The propensity is the probability the old policy gave the exact list it showed. When a new policy would show a list more often, the clicks on it count for more. That ratio is the importance weight.
Averaging clicks over logged lists the new policy agrees with sounds fair, but the old policy showed its favourite lists most often and where it liked them best. Weighting by propensities undoes that choice.
Reweights every logged query by its importance weight. Unbiased, but noisy when weights are large.
Divides by the total weight instead of the row count. A little bias, much less noise.
Caps each weight at the clip level. Lower noise, but it pulls the estimate down.
Learns a click model from the log and asks it about the new policy. Steady, but only as good as the model.
Starts from the reward model and corrects it with weighted errors. Holds up if either part is right.
The simulator knows every true click probability, so it runs the online test real teams cannot run for free. The coral line is that answer.