Cycling race predictor · Vuelta a España 2026

Stage 16 — 2026-09-08

The same production stack priced under 4 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.

4 scenarios 150 riders priced models retrained d911de60f7 book snapshot markets_2054.json

The fork

4 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.

Bunch sprint

The gallop — the hills are all in the first half and Huelva is flat
sprint1.00
mountain0.00
hilly0.00
rolling0.00
break0.00
TT0.00
keyed: bunch sprint 0.6 / survivor gallop 0.3 / fast-finisher power day 0.1 (board order by rider-type retrieval; prices unchanged)
The base case and the book's card. The organiser files the day as hilly, but every metre of the climbing is early: the race spends its first forty kilometres going up and down through the Sierra de Aracena, the last rise (about 4.5 km at 4.5%, uncategorised) tops out near km 90, and the remaining ninety kilometres run downhill and then flat across the plains of Huelva to a sea-level finish by the La Rábida monastery. No categorised climb anywhere on the stage. References are the campaign's pure-speed anchor set — flat GT and WT sprints at race_sprint_score 1.00 with winner groups of 127 to 181 — the same board that had Brennan #1 before Xeraco and Lorca. Inherits the config-root day key.
Top 5 (blend): Brennan Matthew 50.9%; Meeus Jordi 9.0%; van Aert Wout 6.4%; De Schuyteneer Steffen 2.7%; Coquard Bryan 2.0%

Wind thins it

The coast thins it — a reduced group after the estuary headwind
sprint0.52
mountain0.01
hilly0.46
rolling0.01
break0.00
TT0.00
keyed: survivor gallop 0.5 / bunch sprint 0.3 / split sprint 0.1 (board order by rider-type retrieval; prices unchanged)
The middle case. Two thousand metres of constant up-and-down in the first half is real work on the day after a rest day, the sprinters' trains are the thinnest they have been all race (Pedersen, Groves and Laporte gone, Red Bull riding for a podium), and the run to the coast is reported to carry a headwind over the final twelve kilometres — the condition under which a bunch arrives strung out and smaller than it looks on paper, or splits outright on the exposed estuary roads. References are the lumpy-finale reduced-sprint archetype (sprint ~0.51, hilly ~0.46): Philipsen TdF 2023 stage 7, Merlier Giro 2024 stage 3, Coquard Suisse 2024 stage 2, Milan Renewi 2024 stage 1, Merlier UAE 2025 stage 5. A headwind finish argues against a long-range split holding, which is why this board is the hedge rather than the read.
Top 5 (blend): Brennan Matthew 49.3%; van Aert Wout 13.7%; Meeus Jordi 12.2%; Coquard Bryan 2.7%; De Schuyteneer Steffen 2.3%

Break survives

The escape survives — one sprint team, ninety flat kilometres, nobody else with a reason
sprint0.00
mountain0.38
hilly0.00
rolling0.62
break0.00
TT0.00
keyed: hard puncheur day 0.5 / mountain escape 0.3 / rouleur power group 0.2 (board order by rider-type retrieval; prices unchanged)
The branch this campaign has learned not to dismiss — it is what actually happened on stage 15, and the failure there was keying a sprint family when one team owned both the sprinter and the escape candidate. The same configuration is live again: Visma have Brennan and van Aert, and van Aert has won two of the last three stages from moves. Against that, the road is far friendlier to a chase here than at Córdoba: ninety kilometres of flat after km 90 and a headwind run-in are the two things that most reliably bring a break back. References are hilly and medium-mountain GT stages won from an escape solo or two-up with the peloton minutes back: van Aert Vuelta 2024 stage 10, Izagirre TdF 2023 stage 12, Cort TdF 2022 stage 10, Vendrame Giro 2024 stage 19, Bettiol Giro 2026 stage 13. The GC top ten is cut on standings so the whole book tail is free to be ranked.
Top 5 if the break wins (top 10 on GC removed): Bisiaux Léo 5.9%; Johannessen Tobias Halland 5.0%; Buitrago Santiago 4.3%; Debruyne Ramses 4.1%; Tejada Harold 3.6%

Hindsight (post-hoc)

Hindsight (post-hoc) — the day as raced: 102 riders together and Brennan wins the sprint
sprint0.49
mountain0.02
hilly0.32
rolling0.06
break0.12
TT0.00
keyed: bunch sprint (board order by rider-type retrieval; prices unchanged)
Post-race reconstruction, NOT a prediction — run with --no-log and never write it to prediction_log. The road produced the clean mass sprint the official key led with: 102 riders finished on Brennan's time, Coquard and Braet completed the podium, and the GC remained unchanged. References are five disjoint 2026 mass sprints with groups of 29 to 117: Brussels Cycling Classic, Heistse Pijl, Boucles de la Mayenne stage 3, Giro stage 21 and Giro stage 18. The test is whether exact knowledge of a very large bunch changes anything material from the prospective pure-speed board that already ranked Brennan first.
Top 5 (blend): Brennan Matthew 56.0%; van Aert Wout 10.0%; Meeus Jordi 9.9%; Coquard Bryan 1.7%; De Schuyteneer Steffen 1.3%

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 Bunch sprint 85%, Wind thins it 98%, Hindsight (post-hoc) 92% — 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.

RiderTeamBunch sprintWind thins itBreak survivesHindsight (post-hoc)Book oddsBook devigMax edge
Brennan MatthewTeam Visma | Lease a Bike50.9%49.3%0.7%56.0%1.8536.2%+19.8pp
van Aert WoutTeam Visma | Lease a Bike6.4%13.7%3.4%10.0%8.008.4%+5.3pp
Meeus JordiRed Bull-BORA-hansgrohe9.0%12.2%0.1%9.9%7.009.6%+2.6pp
De Schuyteneer SteffenLotto-Intermarché2.7%2.3%0.1%1.3%41.001.6%+1.1pp
Coquard BryanCofidis2.0%2.7%0.1%1.7%9.007.4%-4.8pp
Romele AlessandroXDS Astana Team1.1%1.7%0.2%1.1%26.002.6%-0.8pp
Dainese AlbertoSoudal Quick-Step1.7%0.8%0.0%0.5%41.001.6%+0.1pp
Hofstetter HugoNSN Cycling Team1.0%1.2%0.1%0.9%41.001.6%-0.4pp
Cort MagnusUno-X Mobility0.5%1.1%0.3%0.7%19.003.5%-2.4pp
Laurance AxelNetcompany INEOS0.8%1.1%1.8%0.9%67.001.0%+0.1pp
Brustenga MarcEquipo Kern Pharma1.1%0.3%0.0%0.3%126.000.5%+0.5pp
Aular OrluisMovistar Team0.9%1.1%0.3%0.5%81.000.8%+0.2pp
Albanese VincenzoEF Education-EasyPost0.4%1.0%0.3%0.6%101.000.7%+0.4pp
Break survives is shown conditional on the break winning — the top 10 riders on actual GC are removed and the remaining probabilities renormalize within the break pool. That column isn't comparable with the book line or the other readings, so it's left out of Max edge; a "–" means a GC captain we assume won't be up the road.
The gallop — the hills are all in the first half and Huelva is flat — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Brennan Matthew50.9%39.9%62.8%67.2%86.8%1.85
2Meeus Jordi9.0%10.9%10.1%35.1%78.3%7.00
3van Aert Wout6.4%4.2%8.1%21.9%62.0%8.00
4De Schuyteneer Steffen2.7%2.4%3.3%9.1%63.2%41.00
5Coquard Bryan2.0%2.2%2.3%7.7%80.6%9.00
6Dainese Alberto1.7%1.5%2.1%8.9%50.8%41.00
7Romele Alessandro1.1%3.8%0.7%11.2%65.1%26.00
8Brustenga Marc1.1%1.0%1.3%7.0%50.9%126.00
9Hofstetter Hugo1.0%1.2%1.1%8.0%78.9%41.00
10Aular Orluis0.9%0.6%1.2%6.1%67.5%81.00
11Laurance Axel0.8%2.3%0.6%7.8%47.6%67.00
12Nys Thibau0.7%2.3%0.5%7.3%45.3%41.00
13Tronchon Bastien0.7%1.6%0.6%8.2%63.2%41.00
14Govekar Matevz0.7%1.5%0.6%8.6%53.2%101.00
15Braet Vito0.6%1.1%0.6%6.1%61.7%101.00
16Miquel Delgado Pau0.5%1.2%0.4%4.8%52.2%101.00
17Macias Cesar0.5%0.7%0.5%5.5%57.9%201.00
18Cort Magnus0.5%1.3%0.4%6.7%55.2%19.00
19Renard Alexis0.4%1.1%0.3%4.6%48.6%151.00
20Albanese Vincenzo0.4%0.2%0.5%2.9%57.2%101.00
21Canal Carlos0.2%0.2%0.3%2.0%19.0%401.00
22Oliveira Ivo0.2%0.2%0.2%3.0%26.0%81.00
23Camprubí Marcel0.1%0.1%0.1%2.3%35.7%201.00
24Mulubrhan Henok0.1%0.1%0.1%1.5%16.7%151.00
25Garofoli Gianmarco0.1%0.1%0.1%0.8%9.3%401.00
26Debruyne Ramses0.1%0.1%0.1%0.8%12.2%201.00
27Brenner Marco0.1%0.2%0.1%1.4%8.4%n/a
28Vader Milan0.1%0.1%0.1%0.8%17.8%601.00
29Fedorov Yevgeniy0.1%0.2%0.0%0.6%17.6%301.00
30Hayter Ethan0.1%0.3%0.0%1.7%15.9%151.00
The coast thins it — a reduced group after the estuary headwind — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Brennan Matthew49.3%41.9%52.4%67.9%87.4%1.85
2van Aert Wout13.7%6.1%15.9%37.3%69.4%8.00
3Meeus Jordi12.2%12.7%12.3%35.9%74.1%7.00
4Coquard Bryan2.7%3.5%2.5%11.3%78.0%9.00
5De Schuyteneer Steffen2.3%2.1%2.4%7.6%59.8%41.00
6Romele Alessandro1.7%5.7%0.8%14.3%59.1%26.00
7Hofstetter Hugo1.2%1.8%1.1%8.7%73.4%41.00
8Cort Magnus1.1%2.0%0.9%14.0%56.6%19.00
9Laurance Axel1.1%2.4%0.8%9.2%49.2%67.00
10Aular Orluis1.1%0.7%1.2%7.1%61.5%81.00
11Albanese Vincenzo1.0%1.5%0.9%10.2%65.1%101.00
12Nys Thibau1.0%2.7%0.6%9.2%44.4%41.00
13Braet Vito0.9%1.5%0.8%7.9%57.8%101.00
14Dainese Alberto0.8%1.6%0.7%7.9%47.3%41.00
15Tronchon Bastien0.8%1.8%0.6%8.8%54.4%41.00
16Govekar Matevz0.8%1.7%0.6%8.9%45.4%101.00
17Miquel Delgado Pau0.6%1.2%0.5%5.1%52.5%101.00
18Canal Carlos0.4%0.2%0.5%3.2%20.6%401.00
19Debruyne Ramses0.4%0.3%0.5%3.7%19.5%201.00
20Renard Alexis0.3%0.1%0.4%2.3%39.9%151.00
21Brustenga Marc0.3%0.3%0.3%3.3%59.3%126.00
22Mulubrhan Henok0.2%0.2%0.3%2.2%19.8%151.00
23Hayter Ethan0.2%1.0%0.0%2.4%11.9%151.00
24Fisher-Black Finn0.2%0.2%0.2%2.6%13.8%151.00
25Camprubí Marcel0.2%0.2%0.2%2.8%27.9%201.00
26Brenner Marco0.2%0.3%0.2%2.4%13.3%n/a
27Oliveira Ivo0.2%0.2%0.2%2.8%21.9%81.00
28Macias Cesar0.2%0.1%0.2%1.6%43.9%201.00
29Cobo Ivan0.1%0.1%0.1%1.4%12.7%301.00
30Garofoli Gianmarco0.1%0.1%0.1%1.0%15.2%401.00
The escape survives — one sprint team, ninety flat kilometres, nobody else with a reason — top 30, all heads · top 10 on GC removed
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Bisiaux Léo3.1%2.5%4.7%7.9%39.2%501.00
2Johannessen Tobias Halland2.6%3.2%3.7%10.4%37.8%201.00
3Buitrago Santiago2.3%1.9%3.4%6.3%21.6%801.00
4Debruyne Ramses2.1%5.8%2.2%12.6%38.0%201.00
5Tejada Harold1.9%2.7%2.6%7.3%36.6%801.00
6Widar Jarno1.9%1.5%2.8%6.4%37.5%501.00
7van Aert Wout1.8%3.1%2.3%12.2%23.3%8.00
8Vermaerke Kevin1.7%1.7%2.5%6.4%26.5%126.00
9Riccitello Matthew1.5%1.2%2.3%3.1%20.0%n/a
10Zana Filippo1.4%1.6%2.1%5.6%25.8%601.00
11Romeo Ivan1.4%1.8%1.9%2.8%7.9%101.00
12Brenner Marco1.3%2.1%1.7%6.8%18.1%n/a
13Paret-Peintre Valentin1.2%1.9%1.6%6.2%23.4%501.00
14Tuckwell Luke1.1%0.4%1.8%3.4%12.3%1001.00
15Fisher-Black Finn1.0%1.9%1.3%5.3%14.6%151.00
16Vansevenant Mauri1.0%1.2%1.5%4.7%19.0%801.00
17Almeida Joao1.0%1.4%1.4%4.0%18.1%801.00
18Laurance Axel1.0%1.9%1.1%5.5%16.6%67.00
19Leknessund Andreas0.9%0.4%1.5%6.6%15.2%101.00
20Nys Thibau0.9%2.5%1.0%6.4%18.0%41.00
21Berrade Urko0.9%1.4%1.2%6.4%24.9%401.00
22Rodriguez Carlos0.9%0.6%1.4%2.3%10.2%n/a
23Svestad-Bårdseng Embret0.8%0.5%1.2%2.0%11.8%n/a
24Nordhagen Jørgen0.8%1.2%1.1%6.8%19.1%801.00
25Kron Andreas0.8%0.4%1.2%2.0%14.1%101.00
26Castrillo Pablo0.8%0.4%1.2%0.9%4.1%401.00
27Martin Guillaume0.8%0.2%1.2%1.6%14.0%801.00
28Mulubrhan Henok0.7%0.4%1.1%3.0%14.7%151.00
29Bilbao Pello0.7%1.3%0.8%3.7%17.8%501.00
30Dunbar Edward0.7%1.5%0.8%5.4%24.0%n/a
Hindsight (post-hoc) — the day as raced: 102 riders together and Brennan wins the sprint — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Brennan Matthew56.0%42.6%64.0%69.3%85.8%1.85
2van Aert Wout10.0%4.9%12.1%30.1%62.9%8.00
3Meeus Jordi9.9%11.5%10.3%36.8%72.7%7.00
4Coquard Bryan1.7%2.7%1.6%9.3%71.3%9.00
5De Schuyteneer Steffen1.3%1.5%1.4%6.2%52.4%41.00
6Romele Alessandro1.1%3.8%0.5%8.9%52.7%26.00
7Hofstetter Hugo0.9%1.4%0.8%9.2%69.5%41.00
8Laurance Axel0.9%2.2%0.6%8.1%47.5%67.00
9Nys Thibau0.8%2.4%0.5%8.0%42.1%41.00
10Cort Magnus0.7%1.6%0.5%8.3%50.1%19.00
11Govekar Matevz0.6%1.7%0.4%8.0%42.8%101.00
12Albanese Vincenzo0.6%1.1%0.6%6.6%59.2%101.00
13Braet Vito0.6%1.1%0.5%6.2%52.2%101.00
14Tronchon Bastien0.6%1.6%0.4%6.8%51.6%41.00
15Aular Orluis0.5%0.5%0.6%8.9%63.5%81.00
16Dainese Alberto0.5%1.1%0.4%6.6%44.1%41.00
17Miquel Delgado Pau0.5%1.1%0.4%4.3%50.2%101.00
18Renard Alexis0.4%1.1%0.3%4.2%49.5%151.00
19Canal Carlos0.4%0.4%0.4%3.0%21.6%401.00
20Brustenga Marc0.3%0.5%0.3%6.9%55.5%126.00
21Hayter Ethan0.3%1.5%0.0%3.6%14.7%151.00
22Debruyne Ramses0.3%0.3%0.3%3.8%20.4%201.00
23Mulubrhan Henok0.2%0.3%0.3%3.2%20.6%151.00
24Macias Cesar0.2%0.2%0.2%2.7%46.5%201.00
25Camprubí Marcel0.2%0.2%0.2%3.2%31.8%201.00
26Oliveira Ivo0.2%0.2%0.1%3.5%25.6%81.00
27Brenner Marco0.1%0.3%0.1%3.5%15.9%n/a
28Covi Alessandro0.1%0.1%0.1%1.5%12.3%201.00
29Fisher-Black Finn0.1%0.2%0.1%2.7%14.8%151.00
30Küng Stefan0.1%0.2%0.1%1.0%10.8%101.00

After the stage

Results — won by Brennan Matthew

PosRiderTeamBunch sprint win pWind thins it win pBreak survives win pHindsight (post-hoc) win p
1Brennan MatthewTeam Visma | Lease a Bike50.9%49.3%0.4%56.0%
2Coquard BryanCofidis2.0%2.7%0.0%1.7%
3Braet VitoLotto-Intermarché0.6%0.9%0.0%0.6%
4Meeus JordiRed Bull-BORA-hansgrohe9.0%12.2%0.0%9.9%
5Cort MagnusUno-X Mobility0.5%1.1%0.2%0.7%
6van Aert WoutTeam Visma | Lease a Bike6.4%13.7%1.8%10.0%
7Hofstetter HugoNSN Cycling Team1.0%1.2%0.0%0.9%
8Albanese VincenzoEF Education-EasyPost0.4%1.0%0.2%0.6%
9Dainese AlbertoSoudal Quick-Step1.7%0.8%0.0%0.5%
10Macias CesarBurgos Burpellet BH0.5%0.2%0.0%0.2%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Bunch sprint50.89%36.20%
Wind thins it49.34%36.20%
Break survives0.36%36.20%
Hindsight (post-hoc)56.03%36.20%

Reflection

What we make of it

The road chose the official branch cleanly. Matthew Brennan won from Bryan Coquard and Vito Braet, with 102 riders — 68% of the surviving field — credited on the winner's time. The oracle therefore labelled the day bunch. Our official key of bunch 0.55 / res_3 0.30 / res_1 0.15 was exact and covered with 0.55 on the truth; the independent agent key was also exact, with 0.60 on bunch. This was not a boundary call like stage 2: the group was five times the menu's 20% bunch threshold.

The main board also got the winner right. Brennan was first on the published bunch board at 62.8% on the book-preserving head, versus 36.2% after removing the market margin; the wind-thins-it board still had him first at 52.4%. Meeus was second on both boards and finished fourth, while Coquard rose from seventh on the bunch board to fourth on the wind board and finished second. The model's strongest disagreement with the market — that Brennan was even more dominant than 1.85 implied — went the right way.

What did not happen matters for the carry-forward. The early hills, depleted trains and estuary wind neither reduced the winning group nor opened the door to the escape. Stage 15's lesson remains specific: Visma could choose van Aert when a late climb supplied a launchpad. Here ninety flat kilometres after the last rise left the peloton time and road to organise, and Visma chose Brennan. The chase-incentive test works when paired with a real launch point; team optionality alone is not enough to move a flat day out of the sprint family.

The classification did not move: Mas still leads Gall by 2:06 and Roglic by 2:10, with Carapaz at 4:24. Timo Roosen was the only new abandon, leaving 149 riders. Stage 17 is flatter again — Dos Hermanas to Sevilla, 185 km, no meaningful climbs — so bunch is the mechanical macro read. The live risk is weather rather than terrain: extreme heat could shorten the course and strong winds could make the approach nervous, but neither is a reason to hedge the official day key away from bunch before there is an announced route change.