The same production stack priced under 1 course readings, against the bookmaker's pre-stage line. Each scenario is one opinion about what kind of day this is; the results section settles the argument.
The fork
Course profile is an input the model can't see from a map — it's set from reference races (or overridden by hand). Different readings redistribute the same probability mass across rider types.
The board
Blend win probability per scenario (cascade × LambdaRank, DNF-adjusted at the pricing layer), next to the devigged Kambi (Unibet) win line captured the morning before the stage. "Max edge" compares the most favourable scenario against the book — treat it as scenario-conditional, not a free bet.
Read "Max edge" as directional, not as a price. The blend is a set of per-rider marginals and does not sum to one book — across this field each reading totals Hindsight (post-hoc) 83% — while the devigged book column sums to exactly 100%. Putting the two side by side flatters the model, and Max edge is inflated by about that factor: divide a rider's probability by his reading's total before calling anything an edge. Of our heads only the LambdaRank one is natively book-preserving.
| Rider | Team | Hindsight (post-hoc) | Book odds | Book devig | Max edge |
|---|---|---|---|---|---|
| Roglic Primoz | Red Bull-BORA-hansgrohe | 13.5% | n/a | – | – |
| Onley Oscar | Netcompany INEOS | 9.7% | n/a | – | – |
| Gall Felix | Decathlon CMA CGM Team | 9.4% | n/a | – | – |
| Mas Enric | Movistar Team | 6.0% | n/a | – | – |
| Carapaz Richard | EF Education-EasyPost | 3.8% | n/a | – | – |
| Skjelmose Mattias | Lidl-Trek | 3.1% | n/a | – | – |
| Johannessen Tobias Halland | Uno-X Mobility | 2.4% | n/a | – | – |
| Widar Jarno | Lotto-Intermarché | 1.8% | n/a | – | – |
| Almeida Joao | UAE Team Emirates-XRG | 1.7% | n/a | – | – |
| Romeo Ivan | Movistar Team | 1.6% | n/a | – | – |
| Nordhagen Jørgen | Team Visma | Lease a Bike | 1.6% | n/a | – | – |
| Kuss Sepp | Team Visma | Lease a Bike | 1.5% | n/a | – | – |
| Bisiaux Léo | Decathlon CMA CGM Team | 1.4% | n/a | – | – |
| Tejada Harold | XDS Astana Team | 1.4% | n/a | – | – |
| Vansevenant Mauri | Soudal Quick-Step | 1.3% | n/a | – | – |
| van Aert Wout | Team Visma | Lease a Bike | 1.3% | n/a | – | – |
| Riccitello Matthew | Decathlon CMA CGM Team | 1.2% | n/a | – | – |
| Rodriguez Carlos | Netcompany INEOS | 1.2% | n/a | – | – |
| Bilbao Pello | Bahrain Victorious | 1.1% | n/a | – | – |
| Berthet Clément | Groupama-FDJ United | 1.1% | n/a | – | – |
| # | Rider | Blend | Cascade | LambdaRank | Podium | Top 15 | Book odds |
|---|---|---|---|---|---|---|---|
| 1 | Roglic Primoz | 13.5% | 7.2% | 17.7% | 24.5% | 62.5% | n/a |
| 2 | Onley Oscar | 9.7% | 5.5% | 12.7% | 17.3% | 66.8% | n/a |
| 3 | Gall Felix | 9.4% | 7.8% | 11.7% | 20.3% | 70.0% | n/a |
| 4 | Mas Enric | 6.0% | 2.7% | 8.1% | 14.3% | 65.2% | n/a |
| 5 | Carapaz Richard | 3.8% | 1.7% | 5.0% | 8.9% | 54.3% | n/a |
| 6 | Skjelmose Mattias | 3.1% | 1.4% | 4.2% | 5.5% | 44.1% | n/a |
| 7 | Johannessen Tobias Halland | 2.4% | 1.4% | 3.1% | 6.7% | 37.4% | n/a |
| 8 | Widar Jarno | 1.8% | 1.8% | 2.2% | 7.0% | 47.2% | n/a |
| 9 | Almeida Joao | 1.7% | 1.6% | 2.1% | 5.2% | 20.1% | n/a |
| 10 | Romeo Ivan | 1.6% | 1.9% | 1.9% | 4.8% | 16.3% | n/a |
| 11 | Nordhagen Jørgen | 1.6% | 1.9% | 1.8% | 5.0% | 21.8% | n/a |
| 12 | Kuss Sepp | 1.5% | 1.4% | 1.9% | 6.6% | 37.8% | n/a |
| 13 | Bisiaux Léo | 1.4% | 2.0% | 1.5% | 5.0% | 35.4% | n/a |
| 14 | Tejada Harold | 1.4% | 1.7% | 1.5% | 6.8% | 39.1% | n/a |
| 15 | Vansevenant Mauri | 1.3% | 4.9% | 0.6% | 6.7% | 21.2% | n/a |
| 16 | van Aert Wout | 1.3% | 1.9% | 1.3% | 6.9% | 18.8% | n/a |
| 17 | Riccitello Matthew | 1.2% | 0.8% | 1.6% | 3.5% | 38.5% | n/a |
| 18 | Rodriguez Carlos | 1.2% | 1.8% | 1.3% | 4.0% | 15.6% | n/a |
| 19 | Bilbao Pello | 1.1% | 1.3% | 1.2% | 6.5% | 26.2% | n/a |
| 20 | Berthet Clément | 1.1% | 0.8% | 1.3% | 3.9% | 34.3% | n/a |
| 21 | Buitrago Santiago | 0.9% | 1.1% | 1.1% | 3.8% | 20.4% | n/a |
| 22 | Fisher-Black Finn | 0.9% | 2.6% | 0.7% | 5.1% | 19.6% | n/a |
| 23 | Castrillo Pablo | 0.9% | 1.8% | 0.8% | 2.9% | 8.0% | n/a |
| 24 | Omrzel Jakob | 0.7% | 0.3% | 1.0% | 3.8% | 49.6% | n/a |
| 25 | Laurance Axel | 0.7% | 2.4% | 0.4% | 4.7% | 16.5% | n/a |
| 26 | Svestad-Bårdseng Embret | 0.6% | 0.9% | 0.7% | 3.0% | 17.6% | n/a |
| 27 | Fortunato Lorenzo | 0.6% | 0.4% | 0.8% | 3.0% | 11.8% | n/a |
| 28 | Vermaerke Kevin | 0.5% | 1.0% | 0.5% | 2.2% | 18.3% | n/a |
| 29 | Zana Filippo | 0.5% | 0.7% | 0.6% | 3.4% | 24.2% | n/a |
| 30 | Kron Andreas | 0.5% | 0.9% | 0.5% | 3.9% | 26.3% | n/a |
After the stage
| Pos | Rider | Team | Hindsight (post-hoc) win p |
|---|---|---|---|
| 1 | van Aert Wout | Team Visma | Lease a Bike | 1.3% |
| 2 | Paret-Peintre Valentin | Soudal Quick-Step | 0.5% |
| 3 | Brennan Matthew | Team Visma | Lease a Bike | 0.1% |
| 4 | Widar Jarno | Lotto-Intermarché | 1.8% |
| 5 | Albanese Vincenzo | EF Education-EasyPost | 0.0% |
| 6 | Fisher-Black Finn | Red Bull-BORA-hansgrohe | 0.9% |
| 7 | Vermaerke Kevin | UAE Team Emirates-XRG | 0.5% |
| 8 | Bisiaux Léo | Decathlon CMA CGM Team | 1.4% |
| 9 | Dalby Simon | Uno-X Mobility | 0.0% |
| 10 | Zana Filippo | Soudal Quick-Step | 0.5% |
| Scenario | Blend win p | Book devig |
|---|---|---|
| Hindsight (post-hoc) | 1.25% | – |
Reflection
RETROSPECTIVE ONLY — no prediction was made for this stage. The daily cycle was missed on 4 September: no odds were captured, no key was logged, no boards were run before the start. There is therefore nothing here to score and nothing to claim. The oracle labelled the day anyway (res_2, tiny_group, winner group 2), because oracle labels build the settled-stage corpus whether or not we keyed the day, and the tier-3 record stays at 11 keyed stages — 6 exact, 10 covered, mean weight 0.54.
What happened: Wout van Aert beat Valentin Paret-Peintre for the win, with a group of five — Brennan, Widar, Albanese, Fisher-Black, Vermaerke — at 24 seconds, Bisiaux at 28, and thirty riders inside a minute. The realized top-15 composition came back mountain .33 / rolling .33 / hilly .20 / time_trial .13: a mixed punchy front rather than a pure climbers' one, which is why the oracle's residual assignment landed on res_2 with res_4 as its nearest neighbour. Van Aert has now been 3rd at Valdelinares from the move, 5th at Lorca in the bunch, and a winner here — the form signal flagged after stage 7 has kept paying.
The post-hoc board is the weakest artifact in this campaign and should be read as such. It has no book columns at all (no stage-13 market was ever captured, so there is no market comparison for this day), its live-form features are as-of 4 September rather than the morning of the stage, and it has already seen stage 12. It puts van Aert 6th at 1.3% on the day's true profile. Given that four consecutive genuine hindsight runs have failed to add value over the pre-race board, a hindsight run with no pre-race board to compare against tells us close to nothing — it is logged for corpus completeness, not as evidence.
Two process fixes came out of writing this up, and both are worth more than the retrospective itself. (1) `score_day_keys.logged_key` falls back to the FIRST scenario carrying a day_key when the config root has none — so a post-hoc file containing only a hindsight scenario would have had that key promoted into the tier-3 archive and scored as a fabricated exact. Configs written after the fact now carry `post_hoc: true` and the scorer refuses to read a key from them. Verified: stage 13 stays unkeyed. (2) `predict_stage_scenarios.load_book` required both `odds_capture` and `event_id` and raised without them; it now returns an empty book instead, so a backfill board for a day whose market was never captured runs cleanly with empty book columns rather than crashing.
The lesson for the campaign is operational, not modelling: a missed day cannot be recovered. Stage 12's boards existed and could be judged; stage 13's cannot, and no amount of after-the-fact reconstruction changes that. The tier-3 archive is only worth what its discipline is worth.