Cycling race predictor · Tour de France 2026

Stage 9 — 2026-07-12

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_1229.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 day

Break goes the distance — rolling Massif Central raid
sprint0.00
mountain0.32
hilly0.00
rolling0.68
break0.00
TT0.00
Tour rolling-country days won from the breakaway by punchy non-climbers: Mohoric Le Creusot'21 s7 (the closest route twin on the books — long, hot, ~3,000m of constant rollers, monster break) and Poligny'23 s19, Campenaerts Barcelonnette'24 s18, Abrahamsen Toulouse'25 s11, Healy Vire'25 s6. Avg rolling ~0.68 / mountain ~0.32, sprint 0. The base case: 155.5 km (30 km cut for the 40°C red-alert heatwave) over four categorized Corrèze climbs with the Cat-2 Suc au May mid-stage, the day before the rest day, GC settled top-to-bottom — the peloton has every reason to hand the day to a big break. Note the model prices rider-course fit, not break formation: this board's raw top is still GC men, so the read carries exclude_top_gc and the page renormalizes into 'if the break wins' odds.
Top 5 if the break wins (top 20 GC-model removed): van der Poel Mathieu 3.9%; Riccitello Matthew 3.6%; Van Wilder Ilan 3.4%; Uijtdebroeks Cian 2.9%; Aranburu Alex 2.7%

Hard-men sprint

Very reduced group sprint — hard-men survive the rollers
sprint0.06
mountain0.07
hilly0.83
rolling0.02
break0.01
TT0.00
The stage-4 winner-archetype family, applied prospectively this time: classics hard-men winning a reduced gallop after the climbs shed the pure sprinters — 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 read where enough teams chase in the heat to bring a reduced group to Ussel and Pedersen/Girmay/van der Poel-types kick from it. Known model-space caveat, learned on stage 4: a high hilly score keeps PURE sprinters (Merlier, Kooij) on top of this board even though these rollers would drop them — the punchy-pool table below corrects for exactly that.
Top 5 (blend): Philipsen Jasper 18.1%; Kooij Olav 11.4%; De Lie Arnaud 9.0%; Pedersen Mads 8.2%; van der Poel Mathieu 6.9%

Late move

Late move — puncheur clear over the final climbs
sprint0.00
mountain0.23
hilly0.00
rolling0.75
break0.01
TT0.00
Rolling-punchy days won by a strong classics rider 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 the break is caught late or never fully goes, and the winner attacks over the Cote de la Croix du Pey (~56 km out) or Mont Bessou (~24 km out) and holds to Ussel — van der Poel, Simmons, Van Gils, Gregoire types.
Top 5 (blend): Pogacar Tadej 31.1%; Seixas Paul 10.3%; del Toro Isaac 5.9%; Evenepoel Remco 4.8%; Vingegaard Jonas 2.9%

Hindsight (post-hoc)

Hindsight (post-hoc) — the day as it actually raced
sprint0.00
mountain0.35
hilly0.00
rolling0.64
break0.01
TT0.00
Post-race reconstruction, never logged. Nearest neighbours to the actual finish curve (4 clear, 40 within 30s, 63 within 10min) among WT stages since 2021, sanity-filtered to winners of today's type: Pelayo Sanchez Giro'24 s6 (gravel, break), Pedersen Vuelta'25 s15 (hard-men day), Teunissen Renewi'23 s3, Dversnes Tirreno'25 s5 (break), Narvaez Giro'24 s1 (small-group kick over Pogacar — today's exact shape). Two closer curve-matches (O'Connor La Molina'22, Rubio UAE'23) were dropped as summit-finish climber wins, the wrong winner type. Avg rolling ~0.63 / mountain ~0.35.
Top 5 (blend): Pogacar Tadej 21.4%; Seixas Paul 7.5%; Evenepoel Remco 4.6%; del Toro Isaac 4.6%; van der Poel Mathieu 2.6%

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 dayHard-men sprintLate moveHindsight (post-hoc)Book oddsBook devigMax edge
Pogacar TadejUAE Team Emirates-XRG–6.5%31.1%21.4%51.001.2%+29.8pp
Philipsen JasperAlpecin-Premier Tech0.3%18.1%0.1%0.1%67.000.9%+17.2pp
Kooij OlavDecathlon CMA CGM Team0.2%11.4%0.0%0.0%151.000.4%+11.0pp
Seixas PaulDecathlon CMA CGM Team–1.0%10.3%7.5%601.000.1%+10.2pp
De Lie ArnaudLotto-Intermarché1.3%9.0%0.4%0.5%n/a––
Pedersen MadsLidl-Trek2.6%8.2%0.7%0.7%4.0015.6%-7.4pp
van der Poel MathieuAlpecin-Premier Tech3.9%6.9%1.9%2.6%9.006.9%-0.1pp
del Toro IsaacUAE Team Emirates-XRG–0.5%5.9%4.6%151.000.4%+5.5pp
Girmay BiniamNSN Cycling Team0.5%5.0%0.2%0.2%41.001.5%+3.4pp
Evenepoel RemcoRed Bull-BORA-hansgrohe–1.3%4.8%4.6%301.000.2%+4.5pp
Kanter MaxXDS Astana Team0.2%3.3%0.0%0.0%251.000.2%+3.0pp
Vingegaard JonasTeam Visma | Lease a Bike–0.4%2.9%1.5%801.000.1%+2.8pp
Lipowitz FlorianRed Bull-BORA-hansgrohe–0.2%2.8%1.7%1001.000.1%+2.8pp
Wærenskjold SørenUno-X Mobility1.7%2.7%0.1%0.2%201.000.3%+2.4pp
Pidcock TomPinarello-Q36.5 Pro Cycling Team–2.7%2.2%1.7%34.001.8%+0.8pp
Oldani StefanoCaja Rural-Seguros RGA0.6%2.0%0.1%0.1%501.000.1%+1.8pp
Merlier TimSoudal Quick-Step0.1%1.9%0.0%0.0%501.000.1%+1.8pp
Askey LewisNSN Cycling Team0.5%1.6%0.0%0.1%501.000.1%+1.5pp
Grégoire RomainGroupama-FDJ United–1.2%1.6%1.0%41.001.5%+0.1pp
Matthews MichaelTeam Jayco-AlUla0.5%1.6%0.1%0.1%34.001.8%-0.3pp
Martinez LennyBahrain Victorious–0.2%1.0%1.4%301.000.2%+1.2pp
Aranburu AlexCofidis2.7%1.4%0.5%0.7%67.000.9%+0.5pp
Johannessen Tobias HallandUno-X Mobility–0.6%1.1%1.3%101.000.6%+0.7pp
Vacek MathiasLidl-Trek1.9%1.3%0.3%0.5%15.004.2%-2.9pp
Break day 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 goes the distance — rolling Massif Central raid — top 30, all heads · top 20 GC-model removed
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1van der Poel Mathieu0.8%1.7%0.9%4.9%16.6%9.00
2Riccitello Matthew0.7%0.9%1.1%3.1%17.1%n/a
3Van Wilder Ilan0.7%0.7%1.0%2.2%17.2%301.00
4Uijtdebroeks Cian0.6%0.6%0.9%3.6%26.9%n/a
5Aranburu Alex0.5%1.4%0.6%2.6%16.7%67.00
6Kuss Sepp0.5%0.6%0.8%3.5%12.3%1001.00
7Pedersen Mads0.5%0.9%0.7%3.1%9.8%4.00
8Healy Ben0.5%1.2%0.5%3.6%16.0%34.00
9Schmid Mauro0.4%0.9%0.5%2.1%13.3%34.00
10McNulty Brandon0.4%0.7%0.6%1.7%13.9%29.00
11Higuita Sergio0.4%0.6%0.6%2.2%20.9%301.00
12Izagirre Ion0.4%0.3%0.7%1.9%22.6%201.00
13Baudin Alex0.4%0.7%0.5%2.8%20.0%51.00
14Paret-Peintre Valentin0.4%1.0%0.4%3.5%19.5%101.00
15Vacek Mathias0.4%0.3%0.6%2.0%13.3%15.00
16Foss Tobias0.4%0.4%0.5%1.7%15.2%81.00
17Storer Michael0.3%1.0%0.4%5.3%26.7%301.00
18Bernal Egan0.3%0.3%0.5%1.6%12.4%401.00
19Plapp Lucas0.3%0.8%0.4%2.3%12.0%n/a
20Castrillo Pablo0.3%0.3%0.5%2.0%13.3%51.00
21Wærenskjold Søren0.3%1.8%0.2%2.3%4.6%201.00
22Berckmoes Jenno0.3%0.4%0.5%3.4%22.3%151.00
23Van Gils Maxim0.3%0.6%0.4%2.1%10.2%26.00
24Jegat Jordan0.3%0.3%0.5%2.0%17.0%201.00
25Steinhauser Georg0.3%0.6%0.4%2.4%14.9%301.00
26Harper Chris0.3%0.2%0.4%0.9%12.5%801.00
27Van Eetvelt Lennert0.3%0.2%0.4%1.9%12.0%67.00
28De Lie Arnaud0.3%0.2%0.4%3.5%15.9%n/a
29Tejada Harold0.3%0.4%0.4%1.8%13.0%67.00
30O'Connor Ben0.3%0.6%0.3%2.2%13.3%151.00
Very reduced group sprint — hard-men survive the rollers — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Philipsen Jasper18.1%17.2%16.7%32.5%49.2%67.00
2Kooij Olav11.4%9.6%10.8%16.7%26.1%151.00
3De Lie Arnaud9.0%3.7%9.5%15.2%39.0%n/a
4Pedersen Mads8.2%12.5%6.4%23.8%51.2%4.00
5van der Poel Mathieu6.9%12.4%4.9%31.7%55.4%9.00
6Pogacar Tadej6.5%5.9%6.1%17.9%50.4%51.00
7Girmay Biniam5.0%4.2%4.7%14.9%45.0%41.00
8Kanter Max3.3%5.2%2.5%15.0%42.2%251.00
9Wærenskjold Søren2.7%3.2%2.3%8.4%29.0%201.00
10Pidcock Tom2.7%0.6%2.9%5.7%35.6%34.00
11Oldani Stefano2.0%0.5%2.2%2.4%49.1%501.00
12Merlier Tim1.9%2.1%1.7%6.5%17.0%501.00
13Askey Lewis1.6%1.5%1.5%7.4%29.8%501.00
14Matthews Michael1.6%1.9%1.3%6.4%34.5%34.00
15Aranburu Alex1.4%1.1%1.3%6.2%35.1%67.00
16Evenepoel Remco1.3%0.9%1.3%4.8%18.5%301.00
17Vacek Mathias1.3%0.5%1.4%3.9%19.0%15.00
18Van Gils Maxim1.2%0.8%1.2%5.6%20.6%26.00
19Grégoire Romain1.2%1.2%1.1%4.5%24.9%41.00
20Gaviria Fernando1.0%3.2%0.4%5.0%19.1%n/a
21Seixas Paul1.0%2.2%0.6%6.4%31.3%601.00
22Fretin Milan0.8%2.3%0.4%4.9%27.9%n/a
23Wright Fred0.8%0.5%0.8%2.5%24.8%201.00
24Vauquelin Kévin0.7%0.3%0.7%2.0%11.6%67.00
25Ackermann Pascal0.7%1.2%0.5%4.7%21.5%n/a
26Godon Dorian0.6%1.2%0.4%5.1%27.7%34.00
27Stuyven Jasper0.6%0.3%0.6%2.2%29.3%41.00
28Johannessen Tobias Halland0.6%0.3%0.6%1.9%14.7%101.00
29del Toro Isaac0.5%0.2%0.6%1.3%11.8%151.00
30Biesterbos Frits0.5%0.3%0.5%1.5%22.1%601.00
Late move — puncheur clear over the final climbs — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej31.1%37.1%33.3%51.3%73.4%51.00
2Seixas Paul10.3%7.6%12.2%13.5%51.9%601.00
3del Toro Isaac5.9%1.5%7.8%7.8%38.7%151.00
4Evenepoel Remco4.8%1.7%6.1%7.3%33.6%301.00
5Vingegaard Jonas2.9%1.4%3.6%5.7%36.1%801.00
6Lipowitz Florian2.8%0.6%3.7%2.8%29.4%1001.00
7Pidcock Tom2.2%0.9%2.8%4.2%33.9%34.00
8van der Poel Mathieu1.9%3.3%1.8%10.0%28.2%9.00
9Grégoire Romain1.6%2.3%1.6%6.7%35.7%41.00
10Johannessen Tobias Halland1.1%0.7%1.4%4.9%38.1%101.00
11Ayuso Juan1.1%1.1%1.3%6.7%44.4%801.00
12Martinez Lenny1.0%0.7%1.2%3.0%29.2%301.00
13Arensman Thymen0.9%0.5%1.2%2.3%19.0%301.00
14Yates Adam0.9%0.3%1.2%3.2%17.0%1001.00
15Skjelmose Mattias0.8%1.0%0.8%3.3%33.5%501.00
16Vauquelin Kévin0.7%0.7%0.8%2.2%20.5%67.00
17Pedersen Mads0.7%1.4%0.6%4.6%15.0%4.00
18Jorgenson Matteo0.7%0.6%0.8%2.4%17.9%81.00
19Piganzoli Davide0.7%0.3%0.8%2.5%22.6%601.00
20Carapaz Richard0.6%0.6%0.7%3.0%27.8%67.00
21Hindley Jai0.6%0.5%0.7%3.0%15.9%801.00
22Gee Derek0.6%0.8%0.6%4.3%15.8%151.00
23Van Wilder Ilan0.6%0.7%0.6%1.9%25.5%301.00
24Riccitello Matthew0.5%0.8%0.6%4.5%24.1%n/a
25Aranburu Alex0.5%0.7%0.5%2.1%14.1%67.00
26Uijtdebroeks Cian0.5%0.4%0.5%3.0%36.7%n/a
27Van Gils Maxim0.4%0.5%0.4%2.4%10.7%26.00
28De Lie Arnaud0.4%0.1%0.5%3.6%16.2%n/a
29Healy Ben0.4%0.8%0.3%2.2%11.7%34.00
30Higuita Sergio0.4%0.5%0.4%1.8%19.1%301.00
Hindsight (post-hoc) — the day as it actually raced — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pogacar Tadej21.4%23.6%27.0%38.1%65.2%51.00
2Seixas Paul7.5%3.7%10.6%8.8%42.7%601.00
3Evenepoel Remco4.6%1.0%6.9%4.0%20.9%301.00
4del Toro Isaac4.6%0.7%6.9%3.5%22.2%151.00
5van der Poel Mathieu2.6%5.3%2.6%13.4%28.4%9.00
6Lipowitz Florian1.7%0.8%2.5%9.5%37.6%1001.00
7Pidcock Tom1.7%0.5%2.5%7.7%33.2%34.00
8Vingegaard Jonas1.5%0.8%2.1%2.8%22.6%801.00
9Martinez Lenny1.4%1.9%1.7%6.1%33.2%301.00
10Johannessen Tobias Halland1.3%0.6%1.9%5.1%33.8%101.00
11Arensman Thymen1.1%0.7%1.5%2.7%16.6%301.00
12Grégoire Romain1.0%1.3%1.3%4.7%23.0%41.00
13Vauquelin Kévin0.9%1.0%1.1%2.4%16.7%67.00
14Skjelmose Mattias0.9%1.3%1.0%3.7%22.6%501.00
15Jorgenson Matteo0.8%1.8%0.8%4.1%17.2%81.00
16Yates Adam0.8%0.3%1.1%3.5%14.4%1001.00
17Ayuso Juan0.8%0.9%1.0%5.6%30.6%801.00
18Gee Derek0.8%0.8%1.0%4.3%16.5%151.00
19Van Wilder Ilan0.7%0.7%1.0%2.3%22.0%301.00
20Aranburu Alex0.7%1.0%0.8%2.6%13.9%67.00
21Pedersen Mads0.7%1.6%0.6%4.2%12.6%4.00
22Riccitello Matthew0.7%0.9%0.8%4.5%24.6%n/a
23Piganzoli Davide0.6%0.4%0.8%3.1%20.3%601.00
24Van Gils Maxim0.6%0.5%0.7%2.4%12.1%26.00
25Carapaz Richard0.6%0.8%0.7%3.9%23.0%67.00
26Uijtdebroeks Cian0.6%0.5%0.7%3.6%29.5%n/a
27Izagirre Ion0.6%0.2%0.8%2.2%17.6%201.00
28Hindley Jai0.5%0.4%0.7%2.9%14.8%801.00
29De Lie Arnaud0.5%0.1%0.8%3.8%15.1%n/a
30Healy Ben0.5%1.3%0.5%3.3%14.5%34.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 day' read; the conditional column renormalizes their win probability over this pool (P(win | a non-GC rider wins), pool holds 20% 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 day win pP(win | break wins)Book oddsBook devig
van der Poel MathieuAlpecin-Premier Tech0.8%3.9%96.9%
Riccitello MatthewDecathlon CMA CGM Team0.7%3.6%n/a–
Van Wilder IlanSoudal Quick-Step0.7%3.4%3010.2%
Uijtdebroeks CianMovistar Team0.6%2.9%n/a–
Aranburu AlexCofidis0.5%2.7%670.9%
Kuss SeppTeam Visma | Lease a Bike0.5%2.7%10010.1%
Pedersen MadsLidl-Trek0.5%2.6%415.6%
Healy BenEF Education-EasyPost0.5%2.3%341.8%
Schmid MauroTeam Jayco-AlUla0.4%2.1%341.8%
McNulty BrandonUAE Team Emirates-XRG0.4%2.1%292.2%
Higuita SergioXDS Astana Team0.4%2.1%3010.2%
Izagirre IonCofidis0.4%2.1%2010.3%
Baudin AlexEF Education-EasyPost0.4%2.0%511.2%
Paret-Peintre ValentinSoudal Quick-Step0.4%1.9%1010.6%

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 dayHard-men sprintLate moveGC status
Pedersen Mads4.0015.6%0.5% (#27)8.2% (#4)0.7% (#17)free
van der Poel Mathieu9.006.9%0.8% (#14)6.9% (#5)1.9% (#8)free
Vacek Mathias15.004.2%0.4% (#35)1.3% (#17)0.3% (#36)free
Simmons Quinn15.004.2%0.1% (#61)0.1% (#80)0.1% (#61)free
Valgren Michael21.003.0%0.1% (#70)0.1% (#87)0.1% (#86)free
Van Gils Maxim26.002.4%0.3% (#43)1.2% (#18)0.4% (#27)free
Abrahamsen Jonas26.002.4%0.1% (#62)0.1% (#92)0.1% (#66)free
Wellens Tim29.002.2%0.2% (#53)0.0% (#115)0.2% (#55)free
McNulty Brandon29.002.2%0.4% (#30)0.1% (#68)0.4% (#32)free
Healy Ben34.001.8%0.5% (#28)0.0% (#113)0.4% (#29)free

Angle

The punchy pool — the field with GC captains and pure sprinters removed

The stage-4 lesson as a filter: no terrain reading means 'selective enough to shed the fast finishers but won by a punchy non-climber', so this table synthesizes it. We drop the top 20 GC-model riders and every pure sprinter, then renormalize each reading over the survivors — P(win | the winner is a punchy non-climber). Pure sprinter is the model's own verdict, not a hand list: probability under a flat-sprint anchor of this exact field >= 1% while retaining under 8% of it when the day turns selective ('break_day' read) — that collapse is what separates a Merlier from a Pedersen. Classified out: Ackermann Pascal, Ballerini Davide, Bauhaus Phil, Bittner Pavel, De Lie Arnaud, Fretin Milan, Gaviria Fernando, Girmay Biniam, Kanter Max, Kooij Olav, Merlier Tim, Philipsen Jasper, de Kleijn Arvid. Pool holds Break day 19% / Hard-men sprint 40% / Late move 17% of each reading's unconditional book.

RiderTeamP(win | pool) Break dayP(win | pool) Hard-men sprintP(win | pool) Late moveBook oddsBook devig
Pedersen MadsLidl-Trek2.6%20.7%4.3%415.6%
van der Poel MathieuAlpecin-Premier Tech4.0%17.3%11.3%96.9%
Wærenskjold SørenUno-X Mobility1.7%6.8%0.7%2010.3%
Oldani StefanoCaja Rural-Seguros RGA0.6%5.0%0.7%5010.1%
Askey LewisNSN Cycling Team0.5%4.0%0.3%5010.1%
Matthews MichaelTeam Jayco-AlUla0.6%3.9%0.8%341.8%
Riccitello MatthewDecathlon CMA CGM Team3.7%0.1%3.2%n/a–
Aranburu AlexCofidis2.8%3.5%3.0%670.9%
Van Wilder IlanSoudal Quick-Step3.5%0.5%3.4%3010.2%
Vacek MathiasLidl-Trek1.9%3.2%1.9%154.2%
Van Gils MaximRed Bull-BORA-hansgrohe1.6%3.0%2.4%262.4%
Uijtdebroeks CianMovistar Team3.0%0.2%2.7%n/a–
Kuss SeppTeam Visma | Lease a Bike2.7%0.3%2.2%10010.1%
Healy BenEF Education-EasyPost2.4%0.1%2.3%341.8%
Higuita SergioXDS Astana Team2.2%0.9%2.3%3010.2%
Schmid MauroTeam Jayco-AlUla2.2%0.4%1.6%341.8%

After the stage

Results — won by van der Poel Mathieu

PosRiderTeamBreak day win pHard-men sprint win pLate move win pHindsight (post-hoc) win p
1van der Poel MathieuAlpecin-Premier Tech0.8%6.9%1.9%2.6%
2Johannessen Tobias HallandUno-X Mobility1.2%0.6%1.1%1.3%
3Pidcock TomPinarello-Q36.5 Pro Cycling Team1.0%2.7%2.2%1.7%
4Baudin AlexEF Education-EasyPost0.4%0.1%0.3%0.4%
5Ganna FilippoNetcompany INEOS Cycling Team0.1%0.1%0.1%0.0%
6Pedersen MadsLidl-Trek0.5%8.2%0.7%0.7%
7Matthews MichaelTeam Jayco-AlUla0.1%1.6%0.1%0.1%
8Breuillard NicolasTeam TotalEnergies0.1%0.1%0.1%0.1%
9Jegat JordanTeam TotalEnergies0.3%0.1%0.2%0.4%
10Quinn SeanEF Education-EasyPost0.1%0.1%0.1%0.1%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Break day0.77%6.93%
Hard-men sprint6.85%6.93%
Late move1.91%6.93%
Hindsight (post-hoc)2.55%6.93%

Reflection

What we make of it

The road picked the late-move branch, raced by the punchy pool. No long break settled it: van der Poel, Johannessen, Pidcock and Baudin went clear over the final climbs and held six seconds over a ~36-man reduced peloton containing every GC captain (Pogacar 11th, Evenepoel 12th) — four clear, 40 within 30s, only 63 inside ten minutes on the heat-shortened 155.5 km. Structurally that is the late_move read; the winner, though, was the fast hard-man the hard_mens_sprint read was built around.

Scoring the winner: hard_mens_sprint gave van der Poel 6.9% (#5) — exactly the book's devigged 6.9%, our best read of him. late_move gave 1.9% (#8), break_day 0.8% (#14). But the cleanest hit was the punchy-pool table, the stage-4 lesson formalized this week: its late-move column made van der Poel the single top pick of the whole pool at 11.3%, and its hard-men column had him #2 (17.3%) behind Pedersen (20.7%, finished 6th). Johannessen (2nd, book 0.6%) and Pidcock (3rd, book 1.8%) sat top-10 on both selective reads — the model had the podium's type right even where the book didn't.

The hindsight run says course knowledge was not the constraint, again. Reconstructing the day from its actual finish curve (rolling 0.64 / mountain 0.35) prices van der Poel at just 2.6% (#5) — worse than the pre-race hard-men read — and puts Pogacar on top at 21%, because a terrain-true selective profile buries fast men and promotes GC men. What decided the stage is the thing the model structurally can't see: four punchy riders rolling clear at 24 km while the GC pool marked each other. Same conclusion as stages 2 and 4; this is the GT hard-day hole, not a reference-picking error.

Carry forward: on selective non-mountain days the punchy-pool renormalization is the board to read, not the raw blend — two data points now (stage 4 retro-derived, stage 9 prospective and it named the winner). Keep the anchor_sprint + punchy_filter machinery on every hard rolling/hilly day; consider promoting the pool's conditional column to the hub pick on days where the GC pool is expected to neutralize. Also mark stage 9 as a labeled corpus row for the post-Paris GT hard-day retrospective: shape = late-move-from-reduced-peloton, winner type = punchy fast-man.