Cycling race predictor · Tour de France 2026

Stage 4 — 2026-07-07

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 184 riders priced models retrained 2026-06-28 book snapshot markets_1132.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.

Break survives

Break survives — medium-mountain break days
sprint0.00
mountain0.50
hilly0.00
rolling0.50
break0.00
TT0.00
Real breaks that stayed away 40-60s on medium-mountain days: Izagirre TdF'23 s12, Kwiatkowski TdF'23 s13, Teuns TdF'21 s8, Soler Vuelta'25 s14, Buitrago Giro'23 s19. Avg rolling ~0.50 / mountain ~0.50 — the week-1 'let the break go' template. Carcassonne-Foix is 2800m over five climbs; the last (Montsegur, 6.9km@6.6%) crests 35.5km from the line, so with GC teams saving legs the day after a summit the road may not get chased.
Top 5 if the break wins (top 20 GC removed): Riccitello Matthew 7.2%; Uijtdebroeks Cian 4.4%; Kuss Sepp 4.0%; Van Wilder Ilan 4.0%; Bernal Egan 3.6%

Reduced sprint

Reduced bunch sprint — hilly classics
sprint0.06
mountain0.07
hilly0.83
rolling0.02
break0.01
TT0.00
High race_hilly_score days won by hard-men who survive the climbs and win the reduced gallop: Pedersen Vuelta'22 s19, Matthews Catalunya'22 s1, Colbrelli Dauphine'21 s3, Cort Dauphine'24 s2, Van Gils Eschborn-Frankfurt'24. Avg hilly ~0.83 — the model-space signature of a classics day ending in a reduced bunch sprint (sprinters up, GC men down). The read where the peloton closes the 35km valley into Foix.
Top 5 (blend): Philipsen Jasper 15.5%; Kooij Olav 9.6%; De Lie Arnaud 7.9%; Pedersen Mads 6.2%; van der Poel Mathieu 5.9%

Late move

Late move / puncheur-rouleur
sprint0.00
mountain0.23
hilly0.00
rolling0.75
break0.01
TT0.00
Rolling-punchy days won by a strong classics rider/rouleur going clear late: van der Poel TdF'21 s2 & Tirreno'26 s4, Nys Romandie'24 s2 & Suisse'24 s3, Asgreen Giro'25 s14. Avg rolling ~0.75 / mountain ~0.23. The read where a move slips away on Montsegur and time-trials the valley to Foix — MVdP, Vacek, Gregoire, Godon types.
Top 5 (blend): Pogacar Tadej 29.9%; Seixas Paul 11.0%; del Toro Isaac 5.9%; Evenepoel Remco 4.8%; Lipowitz Florian 2.9%

Hindsight (post-hoc)

Hindsight (post-hoc) — stages that finished like this one
sprint0.00
mountain0.34
hilly0.00
rolling0.65
break0.01
TT0.00
Post-race reconstruction, NOT a prediction (never logged). The five DB stages whose finish structure most resembled stage 4's front group of ten with the field shattered behind (10 riders within 0-120s, only 29 within 10 min): Poels Vuelta'23 s20, Denz Giro'23 s14, Bilbao Itzulia'22 s3, Bilbao TdF'23 s10, Skjelmose Paris-Nice'24 s6 — hard medium-mountain days settled by a surviving front group/break, avg rolling ~0.65 / mountain ~0.34. Answers: if we had known it would be a hard medium-mountain day decided by a group of ten off the front, what would the model have said?
Top 5 (blend): Pogacar Tadej 11.9%; Seixas Paul 9.1%; del Toro Isaac 5.0%; Evenepoel Remco 3.4%; Lipowitz Florian 2.7%

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.

RiderTeamBreak survivesReduced sprintLate moveHindsight (post-hoc)Book oddsBook devigMax edge
Pogacar TadejUAE Team Emirates-XRG–5.5%29.9%11.9%41.001.6%+28.3pp
Philipsen JasperAlpecin-Premier Tech0.1%15.5%0.1%0.1%21.003.1%+12.4pp
Seixas PaulDecathlon CMA CGM Team–1.0%11.0%9.1%401.000.2%+10.8pp
Kooij OlavDecathlon CMA CGM Team0.1%9.6%0.0%0.0%81.000.8%+8.8pp
De Lie ArnaudLotto-Intermarché0.3%7.9%0.4%0.2%n/a––
Pedersen MadsLidl-Trek1.0%6.2%0.6%0.4%4.5014.3%-8.1pp
van der Poel MathieuAlpecin-Premier Tech2.8%5.9%2.1%0.8%9.007.2%-1.3pp
del Toro IsaacUAE Team Emirates-XRG–0.5%5.9%5.0%81.000.8%+5.1pp
Evenepoel RemcoRed Bull-BORA-hansgrohe–1.2%4.8%3.4%151.000.4%+4.4pp
Girmay BiniamNSN Cycling Team0.1%4.3%0.2%0.1%26.002.5%+1.9pp
Lipowitz FlorianRed Bull-BORA-hansgrohe–0.2%2.9%2.7%801.000.1%+2.8pp
Kanter MaxXDS Astana Team0.0%2.6%0.0%0.0%201.000.3%+2.3pp
Vingegaard JonasTeam Visma | Lease a Bike–0.3%2.6%2.5%401.000.2%+2.4pp
Pidcock TomPinarello-Q36.5 Pro Cycling Team–2.4%2.2%1.1%67.001.0%+1.5pp
Wærenskjold SørenUno-X Mobility0.2%2.4%0.1%0.1%301.000.2%+2.2pp
Oldani StefanoCaja Rural-Seguros RGA0.3%1.8%0.1%0.1%201.000.3%+1.5pp
Merlier TimSoudal Quick-Step0.0%1.8%0.0%0.0%401.000.2%+1.6pp
Grégoire RomainGroupama-FDJ United–1.0%1.5%0.8%17.003.8%-2.3pp
Askey LewisNSN Cycling Team0.2%1.4%0.0%0.1%301.000.2%+1.2pp
Martinez LennyBahrain Victorious–0.2%1.1%1.4%251.000.3%+1.1pp
Matthews MichaelTeam Jayco-AlUla0.2%1.4%0.2%0.1%26.002.5%-1.1pp
Aranburu AlexCofidis1.5%1.3%0.4%0.4%41.001.6%-0.3pp
Vacek MathiasLidl-Trek1.2%1.2%0.3%0.3%10.006.4%-5.3pp
Johannessen Tobias HallandUno-X Mobility–0.5%1.1%1.2%301.000.2%+1.0pp
Break survives is shown conditional on the break winning — the top 20 GC contenders 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.
Break survives — medium-mountain break days — top 30, all heads · top 20 GC removed
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Riccitello Matthew1.5%1.4%1.4%5.4%27.3%n/a
2Uijtdebroeks Cian0.9%0.7%0.9%3.1%40.4%n/a
3Kuss Sepp0.8%0.4%0.9%3.9%25.7%n/a
4Van Wilder Ilan0.8%1.2%0.7%3.9%43.6%251.00
5Bernal Egan0.7%0.4%0.8%3.8%29.6%201.00
6Higuita Sergio0.7%0.9%0.6%2.9%27.9%301.00
7Storer Michael0.6%1.3%0.3%5.5%35.2%301.00
8van der Poel Mathieu0.6%1.2%0.4%7.7%17.4%9.00
9Castrillo Pablo0.5%0.9%0.4%3.3%18.8%201.00
10Jegat Jordan0.5%0.4%0.5%5.8%37.5%251.00
11McNulty Brandon0.5%0.8%0.4%2.1%17.6%151.00
12Foss Tobias0.5%0.5%0.5%1.6%7.1%101.00
13O'Connor Ben0.5%0.6%0.4%1.7%14.7%301.00
14Harper Chris0.5%0.5%0.4%1.5%10.3%601.00
15Healy Ben0.5%0.8%0.3%2.1%8.9%34.00
16Schmid Mauro0.4%0.5%0.4%1.3%6.4%67.00
17Van Gils Maxim0.4%0.7%0.3%2.0%10.1%21.00
18Baudin Alex0.4%0.2%0.4%1.2%20.1%151.00
19Van Eetvelt Lennert0.4%0.4%0.3%2.6%31.3%101.00
20Paret-Peintre Valentin0.4%0.2%0.4%1.2%9.9%81.00
21Izagirre Ion0.4%0.3%0.4%1.8%9.0%201.00
22Plapp Lucas0.3%0.2%0.3%2.5%8.6%n/a
23Tejada Harold0.3%0.4%0.3%1.5%14.4%151.00
24Wellens Tim0.3%0.8%0.2%1.4%4.5%67.00
25Aranburu Alex0.3%0.2%0.3%0.7%5.8%41.00
26Tiberi Antonio0.3%0.2%0.3%1.5%15.9%601.00
27Berckmoes Jenno0.3%0.3%0.2%1.8%8.5%41.00
28Steinhauser Georg0.3%0.5%0.2%1.2%8.7%501.00
29Vacek Mathias0.3%0.1%0.3%1.0%7.6%10.00
30Paret-Peintre Aurélien0.2%0.8%0.1%1.0%6.0%201.00
Reduced bunch sprint — hilly classics — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Philipsen Jasper15.5%15.5%16.4%28.7%45.9%21.00
2Kooij Olav9.6%7.8%10.6%14.1%23.3%81.00
3De Lie Arnaud7.9%3.7%9.5%15.9%42.7%n/a
4Pedersen Mads6.2%8.0%6.2%17.2%38.8%4.50
5van der Poel Mathieu5.9%9.2%5.5%32.4%58.9%9.00
6Pogacar Tadej5.5%5.5%5.8%19.8%53.3%41.00
7Girmay Biniam4.3%5.0%4.4%14.9%45.3%26.00
8Kanter Max2.6%4.4%2.4%14.1%39.8%201.00
9Pidcock Tom2.4%1.3%2.9%6.5%42.8%67.00
10Wærenskjold Søren2.4%2.8%2.5%7.2%26.8%301.00
11Oldani Stefano1.8%0.5%2.3%2.8%47.2%201.00
12Merlier Tim1.8%2.6%1.7%7.1%20.3%401.00
13Askey Lewis1.4%1.6%1.4%10.6%35.2%301.00
14Matthews Michael1.4%2.0%1.3%6.4%29.5%26.00
15Aranburu Alex1.3%1.3%1.4%7.0%44.5%41.00
16Evenepoel Remco1.2%1.4%1.2%6.8%26.5%151.00
17Vacek Mathias1.2%0.4%1.4%3.1%15.5%10.00
18Van Gils Maxim1.1%1.0%1.1%4.8%19.0%21.00
19Grégoire Romain1.0%1.2%1.0%5.4%27.5%17.00
20Seixas Paul1.0%2.9%0.6%6.7%34.4%401.00
21Wright Fred0.7%0.3%0.9%2.3%19.0%151.00
22Vauquelin Kévin0.6%0.3%0.7%1.8%13.0%51.00
23Bittner Pavel0.6%0.2%0.7%5.0%24.6%301.00
24Gaviria Fernando0.6%1.3%0.5%3.0%13.9%n/a
25Skjelmose Mattias0.6%1.4%0.4%3.0%17.9%301.00
26Stuyven Jasper0.5%0.3%0.6%2.5%24.8%67.00
27Ackermann Pascal0.5%0.5%0.6%2.4%13.8%n/a
28Johannessen Tobias Halland0.5%0.3%0.6%2.5%24.0%301.00
29Fretin Milan0.5%1.1%0.4%2.9%17.3%n/a
30del Toro Isaac0.5%0.4%0.5%2.4%17.0%81.00
Late move / puncheur-rouleur — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej29.9%34.8%32.7%57.3%78.1%41.00
2Seixas Paul11.0%8.8%13.0%17.6%56.1%401.00
3del Toro Isaac5.9%2.2%7.6%8.8%47.2%81.00
4Evenepoel Remco4.8%3.0%5.9%12.0%44.5%151.00
5Lipowitz Florian2.9%1.0%3.7%3.7%38.3%801.00
6Vingegaard Jonas2.6%1.3%3.3%6.5%39.0%401.00
7Pidcock Tom2.2%1.0%2.8%5.7%44.3%67.00
8van der Poel Mathieu2.1%3.8%1.9%11.7%35.3%9.00
9Grégoire Romain1.5%2.1%1.5%7.2%38.4%17.00
10Johannessen Tobias Halland1.1%0.8%1.4%6.5%55.6%301.00
11Martinez Lenny1.1%1.1%1.2%4.0%33.3%251.00
12Ayuso Juan1.1%0.9%1.2%3.9%29.9%301.00
13Yates Adam1.0%0.4%1.3%2.9%20.2%n/a
14Arensman Thymen0.9%0.6%1.2%2.6%28.8%n/a
15Jorgenson Matteo0.9%1.7%0.8%3.5%18.4%201.00
16Vauquelin Kévin0.8%1.0%0.9%2.8%22.1%51.00
17Carapaz Richard0.7%1.1%0.7%3.1%46.8%301.00
18Skjelmose Mattias0.7%0.6%0.8%3.2%29.0%301.00
19Piganzoli Davide0.7%0.3%0.9%2.5%31.2%n/a
20Pedersen Mads0.6%1.0%0.7%2.8%12.0%4.50
21Van Wilder Ilan0.6%1.0%0.6%2.8%44.4%251.00
22Hindley Jai0.6%0.5%0.7%2.6%19.2%n/a
23Riccitello Matthew0.5%0.7%0.6%2.4%22.1%n/a
24Gee Derek0.5%0.6%0.6%3.4%15.1%301.00
25Uijtdebroeks Cian0.5%0.4%0.5%2.8%31.0%n/a
26Aranburu Alex0.4%0.2%0.6%1.2%13.5%41.00
27Van Gils Maxim0.4%0.6%0.4%1.8%8.8%21.00
28Higuita Sergio0.4%0.5%0.4%1.9%28.4%301.00
29De Lie Arnaud0.4%0.1%0.5%3.5%16.0%n/a
30Foss Tobias0.4%0.4%0.4%1.7%15.1%101.00
Hindsight (post-hoc) — stages that finished like this one — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej11.9%11.6%18.2%35.0%58.9%41.00
2Seixas Paul9.1%8.8%13.9%18.7%50.4%401.00
3del Toro Isaac5.0%1.5%8.5%6.9%29.9%81.00
4Evenepoel Remco3.4%2.0%5.5%8.3%34.2%151.00
5Lipowitz Florian2.7%1.5%4.4%5.2%35.5%801.00
6Vingegaard Jonas2.5%1.6%4.1%11.6%39.3%401.00
7Martinez Lenny1.4%1.1%2.2%3.9%27.4%251.00
8Johannessen Tobias Halland1.2%0.6%1.9%7.2%41.6%301.00
9Ayuso Juan1.1%2.0%1.5%10.1%48.8%301.00
10Yates Adam1.1%0.8%1.8%3.4%19.7%n/a
11Pidcock Tom1.1%0.6%1.8%7.6%42.5%67.00
12Vauquelin Kévin1.0%1.5%1.4%4.1%20.0%51.00
13Arensman Thymen1.0%0.8%1.5%4.2%29.8%n/a
14Skjelmose Mattias0.9%1.0%1.4%3.1%22.8%301.00
15van der Poel Mathieu0.8%1.5%1.1%3.7%14.1%9.00
16Hindley Jai0.8%0.5%1.3%3.7%19.6%n/a
17Riccitello Matthew0.8%0.9%1.2%3.7%21.5%n/a
18Gee Derek0.8%0.7%1.3%4.2%21.3%301.00
19Grégoire Romain0.8%1.2%1.1%4.3%16.9%17.00
20Carapaz Richard0.8%0.9%1.2%4.1%41.1%301.00
21Jorgenson Matteo0.7%1.6%0.9%3.9%15.0%201.00
22Piganzoli Davide0.7%0.4%1.1%4.3%28.9%n/a
23Van Wilder Ilan0.7%0.9%1.0%3.3%34.1%251.00
24Uijtdebroeks Cian0.6%0.6%0.9%2.6%29.2%n/a
25Kuss Sepp0.5%0.3%0.8%3.9%19.2%n/a
26Higuita Sergio0.5%0.6%0.8%2.2%23.9%301.00
27Bernal Egan0.5%0.4%0.8%2.9%23.9%201.00
28Izagirre Ion0.5%0.3%0.7%2.0%14.5%201.00
29McNulty Brandon0.5%0.9%0.6%1.9%14.8%151.00
30Aranburu Alex0.4%0.5%0.6%1.1%11.4%41.00

Angle

If the break goes — competitive riders outside the GC pool

Top 20 riders by the latest GC-model blend (tdf_gc.json) removed — captains don't get in the break. Remaining riders under the 'Break survives' read; the conditional column renormalizes their win probability over this pool (P(win | a non-GC rider wins), pool holds 21% of the unconditional book). The model can't see who actually makes the break — read this as a fitness-for-the-day ranking, not break-formation odds.

RiderTeamBreak survives win pP(win | break wins)Book oddsBook devig
Riccitello MatthewDecathlon CMA CGM Team1.5%7.2%n/a–
Uijtdebroeks CianMovistar Team0.9%4.4%n/a–
Kuss SeppTeam Visma | Lease a Bike0.8%4.0%n/a–
Van Wilder IlanSoudal Quick-Step0.8%4.0%2510.3%
Bernal EganNetcompany INEOS0.7%3.6%2010.3%
Higuita SergioXDS Astana Team0.7%3.2%3010.2%
Storer MichaelTudor Pro Cycling Team0.6%2.8%3010.2%
van der Poel MathieuAlpecin-Premier Tech0.6%2.8%97.2%
Castrillo PabloMovistar Team0.5%2.6%2010.3%
Jegat JordanTeam TotalEnergies0.5%2.5%2510.3%
McNulty BrandonUAE Team Emirates-XRG0.5%2.5%1510.4%
Foss TobiasNetcompany INEOS0.5%2.4%1010.6%
O'Connor BenTeam Jayco-AlUla0.5%2.4%3010.2%
Harper ChrisPinarello-Q36.5 Pro Cycling Team0.5%2.3%6010.1%

Angle

The book's card — its favourites under our readings

Shortest book prices for the stage, with our blend win probability (and rank) under each scenario. 'free' = outside our top-20 GC pool, i.e. the type the peloton might let up the road.

RiderBook oddsDevigBreak survivesReduced sprintLate moveGC status
Pedersen Mads4.5014.3%0.2% (#52)6.2% (#4)0.6% (#20)free
van der Poel Mathieu9.007.2%0.6% (#28)5.9% (#5)2.1% (#8)free
Vacek Mathias10.006.4%0.3% (#49)1.2% (#17)0.3% (#36)free
Grégoire Romain17.003.8%0.8% (#24)1.0% (#19)1.5% (#9)GC #18
Van Gils Maxim21.003.1%0.4% (#37)1.1% (#18)0.4% (#27)free
Philipsen Jasper21.003.1%0.0% (#120)15.5% (#1)0.1% (#64)free
Simmons Quinn23.002.8%0.1% (#73)0.1% (#81)0.1% (#58)free
Godon Dorian23.002.8%0.0% (#86)0.4% (#34)0.1% (#67)free
Cort Magnus26.002.5%0.0% (#125)0.1% (#59)0.0% (#121)free
Matthews Michael26.002.5%0.0% (#102)1.4% (#14)0.2% (#54)free

After the stage

Results — won by Pedersen Mads

PosRiderTeamBreak survives win pReduced sprint win pLate move win pHindsight (post-hoc) win p
1Pedersen MadsLidl-Trek0.2%6.2%0.6%0.4%
2Simmons QuinnLidl-Trek0.1%0.1%0.1%0.1%
3García RaúlMovistar Team0.1%0.1%0.1%0.1%
4Frigo MarcoNSN Cycling Team0.1%0.0%0.1%0.1%
5Debruyne RamsesAlpecin-Premier Tech0.0%0.3%0.0%0.0%
6Vauquelin KévinNetcompany INEOS Cycling Team0.8%0.6%0.8%1.0%
7Quinn SeanEF Education-EasyPost0.1%0.1%0.1%0.1%
8Træen TorsteinUno-X Mobility0.1%0.0%0.0%0.0%
9Castrillo PabloMovistar Team0.5%0.1%0.3%0.3%
10Vacek MathiasLidl-Trek0.3%1.2%0.3%0.3%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Break survives0.21%14.32%
Reduced sprint6.23%14.32%
Late move0.65%14.32%
Hindsight (post-hoc)0.42%14.32%

Reflection

What we make of it

The road picked a hybrid none of the three reads named cleanly: a hard medium-mountain day that split into a front group of ten, then settled by a sprint out of that group. Pedersen out-kicked teammate Quinn Simmons and Raul Garcia at the line, with the peloton +2:27 (147s) back and the field shattered behind -- only the ten in the move, 29 riders inside ten minutes. It carried the break_survives terrain (2800m over five climbs, the last cresting 35km out) but the reduced_sprint winner-type -- a classics hard-man winning the gallop. Three Lidl-Trek riders made the ten (Pedersen 1st, Simmons 2nd, Vacek 10th), a team-built split, with GC man Vauquelin (6th) and several near-anonymous names -- Frigo, Debruyne, Sean Quinn, Traen -- filling it out.

Only one read classed Pedersen as a live winner: reduced_sprint gave him 6.23% (its #4), against break_survives 0.21% and late_move 0.65%. That was the right paradigm on winner-type -- but it still priced him at well under half the book's 14.32%, and its own top pick was Philipsen (15.5%), a pure sprinter the climbs dropped clean out of the front group. So even the read that found the winner hedged him behind the sprinters the terrain was always going to shed. The market, which had Pedersen outright favourite at 4.50, simply read the man better than we did.

Hindsight cut the opposite way to stage 3. Fed the five DB stages that actually finished like this one -- hard medium-mountain, a front group of ten, rolling 0.65 / mountain 0.34 -- the model returned a GC-climber board: Pogacar 11.9%, Seixas 9.1%, del Toro, Evenepoel, Vingegaard, with Pedersen only 31st (0.42%). Course knowledge of the terrain would have made the winner read worse, not better: the model equates 'hard medium-mountain' with 'climbers win' and has no representation for a classics sprinter strong enough to survive the front group and win its sprint. The binding constraint was rider-type, not course knowledge -- and the signal that worked came from picking references by winner archetype, not terrain. Carry forward: on medium-mountain days that can reduce to a hard front-group sprint, trust a winner-archetype read (hilly-classics hard-men) over a terrain-matched one, and don't let pure sprinters sit above the Pedersen/Vauquelin survivors -- the climbs drop the sprinters first. Quiet positive: Vauquelin (6th) was the one front-group rider every read rated, 12th even in hindsight, so the model's fitness read on the GC-puncheurs who bridge into these groups is tracking.