How ranking works¶
Every candidate item gets eight scores, each between 0 and 1, computed before you see it. Your own weights combine them into one score, and the same numbers explain the pick.
flowchart TB
accTitle: From signals to an explanation
accDescr: An item is scored on eight signals, each is multiplied by your learned weight, the products add up to the score, and the largest products become the explanation.
item["Candidate item"] --> signals["8 signal scores"]
signals --> weights["Times your weights"]
weights --> score["Sum = ranking score"]
weights --> why["Largest parts = the reason"]
The signals¶
| Signal | What it measures |
|---|---|
semantic |
How close the item is to the main topics in your interest graph (importance-weighted best cosine match) |
reading_depth |
How far you're likely to read it, judged from other items of the same source and length. The item's own history is left out. |
suggestion |
Higher for items that came from discovery |
explicit_feedback |
Thumbs, saves and skips. A skip only counts if you viewed the digest. |
source_trust |
How your reading of this source has gone recently. New sources start neutral. |
content_quality |
Length, links, citations and code, adjusted to how much you finish at that length |
temporal_context |
Freshness over long, medium and short horizons, lower for the fifth story on the same event |
novelty |
Distance from what you already read |
From signals to a score¶
- Contribution = your weight for a signal × the signal's value.
- The contributions add up to the item's score, which is then clamped to the range 0 to 1. Because of that clamp, the stored score can differ slightly from the sum.
- Missing evidence leaves a signal at a neutral 0.5. It doesn't appear in the explanation and doesn't push your weights either way.
- The explanation names the largest contributions, in plain words. It never claims a reason the numbers don't show.
How your weights change¶
Weights start from sensible defaults and are trained on pairs from the same digest: the item you opened against one you skipped. Comparing items shown side by side is fairer than counting raw clicks, because both had the same chance to be seen. Updates are batched per reader so one session doesn't swing the ranking.
More context: Architecture → How ranking learns and Feedback mapping.