Cycling race predictor · Vuelta a España 2026

Stage 13 — 2026-09-04

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.

1 scenarios 160 riders priced models retrained 8e63bf1bbe book snapshot no capture

The fork

1 readings of the same road

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.

Hindsight (post-hoc)

Hindsight (post-hoc) — the day as raced: two clear, a chase group at 24 seconds
sprint0.00
mountain0.34
hilly0.00
rolling0.65
break0.01
TT0.00
keyed: mountain escape 0.6 / hard puncheur day 0.4 (board order by rider-type retrieval; prices unchanged)
Post-race reconstruction, NOT a prediction — run with --no-log and never written to prediction_log. 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 30 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. References are WT days that finished two-up off a reduced group on a mountain-over-rolling profile (mountain 0.28-0.43, winner group 2, second place within seconds): Schmid's TdF 2026 stage 13, van der Poel's Renewi 2025 stage 3, Lemmen's Pologne 2026 stage 4, Bernal's Vuelta 2025 stage 16, Van Gils' Auvergne 2026 stage 6. This board answers only what the model would have said given the day's actual shape — it is not evidence about what it would have said in the morning, because live-form features are as-of the run date and it has now seen stage 12.
Top 5 (blend): Roglic Primoz 13.5%; Onley Oscar 9.7%; Gall Felix 9.4%; Mas Enric 6.0%; Carapaz Richard 3.8%

The board

Win probabilities, scenario by scenario

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.

RiderTeamHindsight (post-hoc)Book oddsBook devigMax edge
Roglic PrimozRed Bull-BORA-hansgrohe13.5%n/a––
Onley OscarNetcompany INEOS9.7%n/a––
Gall FelixDecathlon CMA CGM Team9.4%n/a––
Mas EnricMovistar Team6.0%n/a––
Carapaz RichardEF Education-EasyPost3.8%n/a––
Skjelmose MattiasLidl-Trek3.1%n/a––
Johannessen Tobias HallandUno-X Mobility2.4%n/a––
Widar JarnoLotto-Intermarché1.8%n/a––
Almeida JoaoUAE Team Emirates-XRG1.7%n/a––
Romeo IvanMovistar Team1.6%n/a––
Nordhagen JørgenTeam Visma | Lease a Bike1.6%n/a––
Kuss SeppTeam Visma | Lease a Bike1.5%n/a––
Bisiaux LéoDecathlon CMA CGM Team1.4%n/a––
Tejada HaroldXDS Astana Team1.4%n/a––
Vansevenant MauriSoudal Quick-Step1.3%n/a––
van Aert WoutTeam Visma | Lease a Bike1.3%n/a––
Riccitello MatthewDecathlon CMA CGM Team1.2%n/a––
Rodriguez CarlosNetcompany INEOS1.2%n/a––
Bilbao PelloBahrain Victorious1.1%n/a––
Berthet ClémentGroupama-FDJ United1.1%n/a––
Hindsight (post-hoc) — the day as raced: two clear, a chase group at 24 seconds — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Roglic Primoz13.5%7.2%17.7%24.5%62.5%n/a
2Onley Oscar9.7%5.5%12.7%17.3%66.8%n/a
3Gall Felix9.4%7.8%11.7%20.3%70.0%n/a
4Mas Enric6.0%2.7%8.1%14.3%65.2%n/a
5Carapaz Richard3.8%1.7%5.0%8.9%54.3%n/a
6Skjelmose Mattias3.1%1.4%4.2%5.5%44.1%n/a
7Johannessen Tobias Halland2.4%1.4%3.1%6.7%37.4%n/a
8Widar Jarno1.8%1.8%2.2%7.0%47.2%n/a
9Almeida Joao1.7%1.6%2.1%5.2%20.1%n/a
10Romeo Ivan1.6%1.9%1.9%4.8%16.3%n/a
11Nordhagen Jørgen1.6%1.9%1.8%5.0%21.8%n/a
12Kuss Sepp1.5%1.4%1.9%6.6%37.8%n/a
13Bisiaux Léo1.4%2.0%1.5%5.0%35.4%n/a
14Tejada Harold1.4%1.7%1.5%6.8%39.1%n/a
15Vansevenant Mauri1.3%4.9%0.6%6.7%21.2%n/a
16van Aert Wout1.3%1.9%1.3%6.9%18.8%n/a
17Riccitello Matthew1.2%0.8%1.6%3.5%38.5%n/a
18Rodriguez Carlos1.2%1.8%1.3%4.0%15.6%n/a
19Bilbao Pello1.1%1.3%1.2%6.5%26.2%n/a
20Berthet Clément1.1%0.8%1.3%3.9%34.3%n/a
21Buitrago Santiago0.9%1.1%1.1%3.8%20.4%n/a
22Fisher-Black Finn0.9%2.6%0.7%5.1%19.6%n/a
23Castrillo Pablo0.9%1.8%0.8%2.9%8.0%n/a
24Omrzel Jakob0.7%0.3%1.0%3.8%49.6%n/a
25Laurance Axel0.7%2.4%0.4%4.7%16.5%n/a
26Svestad-Bårdseng Embret0.6%0.9%0.7%3.0%17.6%n/a
27Fortunato Lorenzo0.6%0.4%0.8%3.0%11.8%n/a
28Vermaerke Kevin0.5%1.0%0.5%2.2%18.3%n/a
29Zana Filippo0.5%0.7%0.6%3.4%24.2%n/a
30Kron Andreas0.5%0.9%0.5%3.9%26.3%n/a

After the stage

Results — won by van Aert Wout

PosRiderTeamHindsight (post-hoc) win p
1van Aert WoutTeam Visma | Lease a Bike1.3%
2Paret-Peintre ValentinSoudal Quick-Step0.5%
3Brennan MatthewTeam Visma | Lease a Bike0.1%
4Widar JarnoLotto-Intermarché1.8%
5Albanese VincenzoEF Education-EasyPost0.0%
6Fisher-Black FinnRed Bull-BORA-hansgrohe0.9%
7Vermaerke KevinUAE Team Emirates-XRG0.5%
8Bisiaux LéoDecathlon CMA CGM Team1.4%
9Dalby SimonUno-X Mobility0.0%
10Zana FilippoSoudal Quick-Step0.5%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Hindsight (post-hoc)1.25%–

Reflection

What we make of it

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.