Cycling race predictor · Vuelta a España 2026

Stage 7 — 2026-08-28

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 178 riders priced models retrained 2026-08-09 book snapshot markets_1327.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.

GC summit

The GC group settles it on the ski-station climb
sprint0.00
mountain0.44
hilly0.00
rolling0.55
break0.01
TT0.00
keyed: GC day 0.6 / mountain escape 0.4 (board order by rider-type retrieval; prices unchanged)
The base case. Valdelinares is 9.8 km at 5.9% with pitches to 13% at the end of the hardest day of the race — long enough and steep enough for the GC group to be reduced to a handful, with no descent afterwards to undo whatever happens on it. On this reading the escape is absorbed on San Rafael or early on the final climb and the win is contested between the men who are already on the first two pages of the classification. References are hard Grand Tour and WT mountain days won by a GC leader from a group of two (mountain 0.41-0.49 over rolling): Pogacar's Peyragudes 2022, Vingegaard's TdF 2024 stage 11, Roglic's Angliru 2023, Almeida's Vuelta 2025 stage 13, Roglic's Dauphine 2024 stage 7. Inherits the config-root day key.
Top 5 (blend): Pogacar Tadej 64.1%; Onley Oscar 5.1%; Gall Felix 4.0%; Roglic Primoz 2.8%; Mas Enric 2.4%

Mountain break

The escape survives — five climbs, a huge gap, and nobody left to chase
sprint0.00
mountain0.50
hilly0.00
rolling0.49
break0.01
TT0.00
keyed: mountain escape 0.8 / GC day 0.1 (board order by rider-type retrieval; prices unchanged)
The alternative, and the market's card. Climbing starts at km 39.8 and never really stops, which is the ideal shape for a large early move to take ten or fifteen minutes before anyone decides whether to care; Pogacar already has three stage wins and a 3:34 lead, and the podium fight behind him is close enough that Movistar, Red Bull, EF and Decathlon would rather watch each other than ride tempo for a stage none of them can win. References are the canonical mountain-escape days (mountain 0.47-0.52 over rolling, winner groups of 1 to 4): Carapaz's TdF 2026 stage 18, Soler's Vuelta 2025 stage 14, Barre's Pologne 2026 stage 6, van der Poel's TdF 2026 stage 9, Narvaez's Giro 2026 stage 11. The conditional pool cuts the top 13 on the actual standings — everyone inside about nine and a half minutes — which frees the whole of the book's card: Torres (17th, +14:25), Bisiaux (18th, +14:43), Vine (19th, +14:45), Johannessen (27th), Buitrago (36th), Tulett (41st) and Fortunato (99th). Yesterday's satellite question is answered by the standings rather than by argument now: after losing a quarter of an hour at Castellón, Vine and Torres are free by any definition.
Top 5 if the break wins (top 13 on GC removed): Vine Jay 7.8%; Romeo Ivan 6.5%; Johannessen Tobias Halland 5.2%; Riccitello Matthew 4.8%; Rodriguez Carlos 3.6%

Pogačar solo

It shatters — 3,572 m and a 13% ramp and one man rides away
sprint0.00
mountain0.51
hilly0.00
rolling0.49
break0.00
TT0.00
keyed: GC day (board order by rider-type retrieval; prices unchanged)
The Andorra pattern repeated, and after stage 4 it cannot be filed as a tail. On that day the model made Pogacar 63.4% against a 49.0% book and he won alone by 2:39, and its top seven finished 1-4-3-7-6-8-9; here the day is harder still and ends on a steeper ramp. References are the shattering-summit archetype (mountain 0.45-0.55, winner group 1): Pogacar's TdF 2026 stages 10, 14 and 3, Vingegaard's Vuelta 2025 stage 20 and Catalunya 2026 stage 6. The gap between this board and 'mountain break' is the cleanest single number on the page — it is how much of each rider's case depends on being given the day rather than earning it.
Top 5 (blend): Pogacar Tadej 62.0%; Gall Felix 3.1%; Onley Oscar 3.1%; Carapaz Richard 1.9%; Mas Enric 1.7%

Hindsight (post-hoc)

Hindsight (post-hoc) — the day as raced: a break solo, the GC group nineteen minutes down
sprint0.00
mountain0.48
hilly0.00
rolling0.51
break0.01
TT0.00
keyed: mountain escape (board order by rider-type retrieval; prices unchanged)
Post-race reconstruction, NOT a prediction — run with --no-log. Leknessund won alone, his teammate Johannessen at 34 seconds, van Aert third at 47; only four riders finished within a minute and nine within two, while the entire GC group rolled in between 19th and 30th. References are mountain days won SOLO by a rider from the escape rather than by the classification leaders (mountain 0.46-0.51 over rolling, winner group 1): Harper's Giro 2025 stage 20, Verona's Giro 2025 stage 15, Poels' TdF 2023 stage 15, Fortunato's Giro 2021 stage 14, Teuns' TdF 2021 stage 8. The question is blunt: the pre-race boards put the winner at #41-45 and retrieved 1-4 of the actual top 15, so does a profile built from days the peloton openly conceded find these riders at all, or is break membership simply outside what any terrain reference can encode?
Top 5 (blend): Pogacar Tadej 53.1%; Gall Felix 4.9%; Onley Oscar 4.1%; Mas Enric 2.5%; Roglic Primoz 2.2%

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 GC summit 101%, Pogačar solo 93%, Hindsight (post-hoc) 97% — 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.

RiderTeamGC summitMountain breakPogačar soloHindsight (post-hoc)Book oddsBook devigMax edge
Pogacar TadejUAE Team Emirates-XRG64.1%–62.0%53.1%2.7523.3%+40.8pp
Onley OscarNetcompany INEOS5.1%–3.1%4.1%29.002.2%+2.9pp
Gall FelixDecathlon CMA CGM Team4.0%–3.1%4.9%29.002.2%+2.7pp
Roglic PrimozRed Bull-BORA-hansgrohe2.8%–1.6%2.2%41.001.6%+1.2pp
Mas EnricMovistar Team2.4%–1.7%2.5%26.002.5%+0.0pp
Carapaz RichardEF Education-EasyPost2.1%–1.9%1.8%67.001.0%+1.1pp
Vine JayUAE Team Emirates-XRG1.2%7.8%1.2%1.8%7.508.5%-6.7pp
Skjelmose MattiasLidl-Trek1.6%–1.0%1.2%151.000.4%+1.2pp
Johannessen Tobias HallandUno-X Mobility1.0%5.2%0.9%1.3%19.003.4%-2.1pp
Romeo IvanMovistar Team0.6%6.5%0.8%1.2%41.001.6%-0.4pp
Kuss SeppTeam Visma | Lease a Bike0.9%–1.1%1.0%81.000.8%+0.3pp
Riccitello MatthewDecathlon CMA CGM Team0.7%4.8%1.0%1.0%81.000.8%+0.2pp
Bisiaux LéoDecathlon CMA CGM Team0.5%3.4%0.5%0.9%15.004.3%-3.4pp
Widar JarnoLotto-Intermarché0.6%–0.5%0.8%26.002.5%-1.6pp
Tulett BenTeam Visma | Lease a Bike0.4%3.2%0.5%0.7%29.002.2%-1.5pp
Fortunato LorenzoXDS Astana Team0.5%2.1%0.3%0.6%19.003.4%-2.8pp
Torres PabloUAE Team Emirates-XRG0.2%1.1%0.2%0.3%26.002.5%-2.2pp
Mountain break is shown conditional on the break winning — the top 13 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 GC group settles it on the ski-station climb — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej64.1%58.3%65.2%78.5%90.5%2.75
2Onley Oscar5.1%4.1%5.3%19.6%74.9%29.00
3Gall Felix4.0%3.0%4.2%16.2%70.1%29.00
4Roglic Primoz2.8%1.5%3.1%8.5%59.6%41.00
5Mas Enric2.4%1.5%2.5%12.0%66.9%26.00
6Carapaz Richard2.1%1.4%2.3%9.5%59.8%67.00
7Skjelmose Mattias1.6%1.7%1.6%7.3%55.8%151.00
8Vine Jay1.2%1.0%1.2%3.9%19.3%7.50
9Johannessen Tobias Halland1.0%0.8%1.0%3.8%24.3%19.00
10Kuss Sepp0.9%1.3%0.8%6.9%46.7%81.00
11Almeida Joao0.8%2.4%0.4%8.1%16.4%67.00
12Riccitello Matthew0.7%0.9%0.7%4.3%33.2%81.00
13Nordhagen Jørgen0.6%1.1%0.5%4.5%24.5%67.00
14Romeo Ivan0.6%0.8%0.6%3.7%15.6%41.00
15Widar Jarno0.6%0.8%0.5%4.9%40.0%26.00
16Tejada Harold0.5%0.9%0.5%4.0%43.4%51.00
17Bisiaux Léo0.5%0.9%0.4%3.9%26.1%15.00
18Fortunato Lorenzo0.5%0.8%0.4%5.0%24.2%19.00
19Rodriguez Carlos0.5%0.6%0.4%3.6%19.2%126.00
20Tulett Ben0.4%0.9%0.3%3.1%15.4%29.00
21Fisher-Black Finn0.4%0.5%0.4%1.7%8.4%67.00
22Bilbao Pello0.4%0.7%0.4%2.1%12.9%101.00
23Berthet Clément0.4%0.6%0.4%2.9%40.5%67.00
24Buitrago Santiago0.4%0.5%0.4%3.7%22.6%34.00
25van Aert Wout0.4%1.3%0.2%2.7%6.4%67.00
26Omrzel Jakob0.4%0.9%0.3%3.5%35.9%67.00
27Castrillo Pablo0.4%0.7%0.3%2.3%7.1%51.00
28Mühlberger Gregor0.3%0.9%0.2%3.8%35.6%126.00
29Svestad-Bårdseng Embret0.3%0.7%0.2%2.6%25.4%151.00
30Landa Mikel0.3%0.1%0.3%1.5%13.5%81.00
The escape survives — five climbs, a huge gap, and nobody left to chase — top 30, all heads · top 13 on GC removed
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Vine Jay2.4%2.0%2.6%5.2%21.2%7.50
2Romeo Ivan2.0%3.2%1.8%6.7%17.3%41.00
3Johannessen Tobias Halland1.6%0.9%1.8%4.1%23.2%19.00
4Riccitello Matthew1.5%1.5%1.5%5.0%32.0%81.00
5Rodriguez Carlos1.1%1.2%1.1%4.2%18.5%126.00
6Bisiaux Léo1.1%1.4%1.0%5.0%25.9%15.00
7Tulett Ben1.0%0.6%1.1%2.7%15.1%29.00
8Almeida Joao1.0%1.9%0.8%3.4%13.2%67.00
9Buitrago Santiago0.9%0.7%1.0%3.4%20.0%34.00
10Nordhagen Jørgen0.8%1.2%0.8%4.2%22.7%67.00
11Castrillo Pablo0.8%0.6%0.9%1.9%5.7%51.00
12Fisher-Black Finn0.8%0.4%0.9%1.4%10.1%67.00
13Bilbao Pello0.7%0.5%0.7%1.9%10.5%101.00
14Zana Filippo0.7%1.3%0.5%4.7%21.6%151.00
15Paret-Peintre Valentin0.7%1.2%0.5%4.3%19.1%41.00
16Fortunato Lorenzo0.6%0.1%0.8%2.9%10.9%19.00
17van Aert Wout0.6%0.7%0.6%3.5%7.9%67.00
18Omrzel Jakob0.5%0.6%0.5%3.2%31.6%67.00
19Tuckwell Luke0.5%0.9%0.4%3.4%21.1%151.00
20Laporte Christophe0.5%0.6%0.5%1.1%2.6%n/a
21Svestad-Bårdseng Embret0.5%0.7%0.4%1.9%22.3%151.00
22Landa Mikel0.4%0.1%0.5%0.9%14.5%81.00
23García Raúl0.4%0.2%0.5%1.1%4.9%126.00
24Rodriguez Cristian0.4%0.4%0.5%1.3%25.3%41.00
25Laurance Axel0.4%0.2%0.5%1.5%8.2%151.00
26Brenner Marco0.4%0.2%0.4%2.7%12.5%51.00
27Vansevenant Mauri0.4%0.2%0.4%1.1%8.3%301.00
28Vermaerke Kevin0.4%0.2%0.4%0.9%7.1%401.00
29Torres Pablo0.3%0.2%0.4%1.0%9.7%26.00
30Pickering Finlay0.3%0.2%0.4%0.9%11.4%126.00
It shatters — 3,572 m and a 13% ramp and one man rides away — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej62.0%57.7%68.0%76.6%89.2%2.75
2Gall Felix3.1%2.3%3.5%12.7%65.4%29.00
3Onley Oscar3.1%1.8%3.6%9.1%60.5%29.00
4Carapaz Richard1.9%1.4%2.2%7.5%53.3%67.00
5Mas Enric1.7%1.3%2.0%7.3%58.3%26.00
6Roglic Primoz1.6%1.5%1.8%7.0%58.2%41.00
7Vine Jay1.2%1.1%1.3%4.0%19.2%7.50
8Kuss Sepp1.1%1.7%1.0%6.7%47.2%81.00
9Skjelmose Mattias1.0%1.3%1.1%5.9%56.0%151.00
10Riccitello Matthew1.0%1.1%1.1%5.5%36.4%81.00
11Johannessen Tobias Halland0.9%0.8%1.0%4.1%23.6%19.00
12Romeo Ivan0.8%0.8%0.9%4.1%16.1%41.00
13Tejada Harold0.7%1.2%0.6%5.3%45.1%51.00
14Nordhagen Jørgen0.6%1.1%0.6%4.7%24.0%67.00
15Almeida Joao0.6%1.5%0.4%7.0%18.1%67.00
16Rodriguez Carlos0.6%0.7%0.6%3.9%20.1%126.00
17Tulett Ben0.5%0.7%0.5%2.7%13.9%29.00
18Widar Jarno0.5%0.7%0.5%4.6%37.4%26.00
19Bisiaux Léo0.5%0.8%0.5%4.2%23.8%15.00
20Castrillo Pablo0.4%0.4%0.5%1.6%5.2%51.00
21Buitrago Santiago0.4%0.3%0.5%2.1%16.8%34.00
22Fisher-Black Finn0.4%0.3%0.4%1.1%7.6%67.00
23Bilbao Pello0.4%0.6%0.3%2.2%10.5%101.00
24Omrzel Jakob0.4%0.8%0.3%4.3%37.6%67.00
25Berthet Clément0.4%0.5%0.4%2.8%37.0%67.00
26Fortunato Lorenzo0.3%0.1%0.4%3.7%9.8%19.00
27Mühlberger Gregor0.3%0.8%0.2%4.0%35.5%126.00
28Landa Mikel0.3%0.1%0.4%1.4%13.5%81.00
29Svestad-Bårdseng Embret0.3%0.6%0.2%1.9%23.5%151.00
30Tuckwell Luke0.2%0.5%0.2%1.1%9.3%151.00
Hindsight (post-hoc) — the day as raced: a break solo, the GC group nineteen minutes down — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej53.1%52.6%54.7%67.7%82.2%2.75
2Gall Felix4.9%2.5%5.6%12.8%60.8%29.00
3Onley Oscar4.1%2.0%4.7%9.9%53.8%29.00
4Mas Enric2.5%1.3%2.9%7.2%52.1%26.00
5Roglic Primoz2.2%1.5%2.5%6.4%52.7%41.00
6Carapaz Richard1.8%1.3%2.0%6.2%48.5%67.00
7Vine Jay1.8%1.8%1.9%4.9%18.6%7.50
8Johannessen Tobias Halland1.3%0.8%1.5%3.3%21.1%19.00
9Skjelmose Mattias1.2%1.1%1.3%7.5%55.0%151.00
10Romeo Ivan1.2%1.5%1.1%4.8%16.6%41.00
11Kuss Sepp1.0%1.4%1.0%5.7%42.3%81.00
12Riccitello Matthew1.0%0.4%1.2%2.8%34.3%81.00
13Nordhagen Jørgen0.9%1.7%0.7%4.9%23.0%67.00
14Bisiaux Léo0.9%1.1%0.8%4.0%23.3%15.00
15Widar Jarno0.8%0.9%0.8%4.7%40.2%26.00
16Buitrago Santiago0.7%0.7%0.8%3.0%21.2%34.00
17Almeida Joao0.7%1.7%0.5%3.5%10.6%67.00
18Tejada Harold0.7%0.6%0.8%3.3%46.8%51.00
19Tulett Ben0.7%0.8%0.7%3.7%17.0%29.00
20Castrillo Pablo0.7%0.9%0.6%2.8%7.3%51.00
21Rodriguez Carlos0.6%0.8%0.6%3.5%17.7%126.00
22Fortunato Lorenzo0.6%0.8%0.6%4.8%23.5%19.00
23Berthet Clément0.6%0.8%0.6%3.1%37.0%67.00
24Bilbao Pello0.6%0.8%0.5%3.8%19.3%101.00
25Fisher-Black Finn0.6%0.4%0.6%1.4%8.9%67.00
26Omrzel Jakob0.5%0.8%0.5%4.8%35.3%67.00
27van Aert Wout0.5%1.3%0.3%4.3%10.7%67.00
28Landa Mikel0.5%0.8%0.4%4.6%26.4%81.00
29Paret-Peintre Valentin0.5%1.0%0.3%3.6%21.2%41.00
30Zana Filippo0.4%0.8%0.4%3.3%19.1%151.00

After the stage

Results — won by Leknessund Andreas

PosRiderTeamGC summit win pMountain break win pPogačar solo win pHindsight (post-hoc) win p
1Leknessund AndreasUno-X Mobility0.1%0.3%0.1%0.3%
2Johannessen Tobias HallandUno-X Mobility1.0%1.6%0.9%1.3%
3van Aert WoutTeam Visma | Lease a Bike0.4%0.6%0.2%0.5%
4Omrzel JakobBahrain Victorious0.4%0.5%0.4%0.5%
5Rodríguez JuanEF Education-EasyPost––––
6Sosa IvanEquipo Kern Pharma0.2%0.3%0.2%0.2%
7Lutsenko AlexeyNSN Cycling Team0.1%0.1%0.1%0.1%
8Dunbar EdwardPinarello-Q36.5 Pro Cycling Team0.1%0.2%0.1%0.2%
9Bisiaux LéoDecathlon CMA CGM Team0.5%1.1%0.5%0.9%
10García RaúlMovistar Team0.2%0.4%0.2%0.3%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
GC summit0.15%0.42%
Mountain break0.32%0.42%
Pogačar solo0.15%0.42%
Hindsight (post-hoc)0.26%0.42%

Reflection

What we make of it

Andreas Leknessund won alone from the escape, Uno-X went one-two with Johannessen at 34 seconds, van Aert took third at 47, and the GC group finished between 19th and 30th, nineteen minutes down. The break was conceded completely. This was the model's worst day of the campaign by a distance: the winner sat at #41-45 on the three boards at 0.1-0.4% against a book price of 151, and pool retrieval was 2, 4 and 2 of the actual top 15 against a production board that managed 1.

The key was wrong, and the way I got it wrong is the useful part. I keyed gc_day at 0.6 and the oracle returned res_2 (covered, weight 0.40). Two of my three stated reasons were sound and one was not. The summit-finish geometry argument — that removing the descent removes the reason a GC attack gets neutralised — turned out to be simply false here: a summit finish is not a reason the peloton chases, it is only a reason the chase would work if anyone wanted one, and nobody did. The market-has-been-wrong-twice argument was fair but was itself a two-sample claim. The third reason was the bad one: I corrected toward the macro item because it had won four judgment stages in a row, and a four-sample streak is not a prior. That correction fired on precisely the stage that broke it. The honest conclusion is not to swing back — it is that macro-frequency is not the right instrument at all, and the key should be driven by whether the peloton has a REASON to chase, which on stage 7 it plainly did not: Pogacar had three wins and 3:34 in hand, and the podium contenders were watching each other. Campaign record 2/6 exact, 5/6 covered, mean weight 0.45.

The break-card ledger has to be rewritten, and in the book's favour. After stages 4 and 6 the record read as two clean wins for the model's refusal to pay for escape membership; stage 7 is a clean win for the market. Its 19.0 shot Johannessen finished 2nd, its 15.0 shot Bisiaux 9th, and Paret-Peintre at 41.0 came 11th — all riders the model had at #8, #17 and #27 on its own break board. The market's card was still half wrong (Vine 85th at 8.5% devig, Fortunato 66th, Buitrago 92nd, Tulett 48th), so this is not a rout, but three tests now stand at two-one to the model rather than two-nil, and the one it lost it lost badly. The GT hard-day hole is exactly what it says on the tin: the model cannot represent 'this rider will be in the move on a day the bunch concedes', and on a day the bunch concedes completely that is the only thing that matters.

The retrieval channel had its best RELATIVE day of the campaign on the model's worst absolute one. Against a production board that found 1 of the actual top 15, the day-menu boards found 2, 4 and 2 — and the +3 came from `mountain_break`, the scenario keyed res_2 at 0.85, which is the item the oracle went on to assign. That is the retrieval-only architecture doing the one thing it was built for: when the composition of the front group is unlike the production ranking's default, the key moves the pool toward it. It also sharpens what the channel is for. On stages where the front is the obvious strong group it is worth roughly nothing (st4 level, st6 −1); on the day the front was made of riders the production ranking had no reason to surface, it quadrupled the retrieval. Running ledger: st2 −1, st4 level, st5 +1, st6 −1, st7 +3.

Carry-forward. (1) Replace the macro-frequency prior with a chase-incentive test: before keying, ask who specifically has a reason to spend, and price res_2 up when the answer is nobody. On stage 7 the answer was visibly nobody and I keyed against it anyway. (2) Van Aert finishing third from the move on a 3,572 m summit-finish day is a form signal worth carrying into the flat stages — the model had him #33 here. (3) The GC is now effectively decided at the top: Pogacar took no time from anyone, and the whole podium group finished together, so the standings still separate exactly as they did after Castellón.