Cycling race predictor · Tour de France 2026

Stage 8 — 2026-07-11

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

3 scenarios 184 riders priced models retrained 2026-06-28 book snapshot markets_1124.json

The fork

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

Full sprint

Full bunch sprint — Bergerac gallop
sprint1.00
mountain0.00
hilly0.00
rolling0.00
break0.00
TT0.00
Flat Grand Tour bunch sprints won from a full-field gallop (race_sprint_score 1.00, 150+ riders together at the line): Merlier TdF'25 s3, Philipsen TdF'24 s10, Cavendish TdF'24 s5, Jakobsen TdF'22 s2, Bennett Vuelta'22 s3, Groves Giro'25 s6. The market's read and the base case: 180 km across the Dordogne to a flat Bergerac finish (31 m), the two Cat-4 lumps — Côte de Domme (3.7 km @ 3.3%, km 102) and Côte du Buisson-de-Cadouin (2.2 km @ 5.6%) — cresting ~40 km from the line with a flat, gently downhill run-in that gives the sprint trains ample road to reel in any move. The peloton controls, the field arrives intact, the fastest man off the best lead-out wins. Favours the top of the book — Merlier (a 41.5% devig favourite), Kooij, Philipsen, Girmay.
Top 5 (blend): Merlier Tim 46.7%; Kooij Olav 28.2%; Philipsen Jasper 22.1%; De Lie Arnaud 4.6%; Gaviria Fernando 4.3%

Reduced sprint

Reduced group sprint — the late Cat-4s bite
sprint0.52
mountain0.01
hilly0.46
rolling0.01
break0.00
TT0.00
Flat stages with a lumpy finale that thinned the bunch to a reduced-but-still-sprint gallop (avg sprint ~0.51, hilly ~0.46, breakaway ~0): Philipsen TdF'23 s7, Merlier Giro'24 s3, Coquard Suisse'24 s2, Milan Renewi'24 s1, Merlier UAE'25 s5. In model space a lifted hilly-score over a retained sprint = a reduced bunch sprint. The read where the Buisson-de-Cadouin ramp (5.6%) shells the leggier pure sprinters or fractures a lead-out train, leaving a durable fast-man to take a smaller kick on the Bergerac flat: Pedersen, Girmay, van der Poel, a surviving Philipsen over the weakest pure speed. Also the frame under which a break has its best chance — if no sprint team fully commits across the Dordogne lumps, a Bergerac breakaway (cf. Navardauskas 2014) is the tail the model can't price directly, but this is the profile that opens the door a crack.
Top 5 (blend): Merlier Tim 35.2%; Kooij Olav 33.6%; Philipsen Jasper 22.3%; Girmay Biniam 9.3%; De Lie Arnaud 6.4%

Hindsight (post-hoc)

Hindsight (post-hoc) — stages that finished like this one
sprint0.90
mountain0.00
hilly0.09
rolling0.00
break0.00
TT0.00
Post-race reconstruction, NOT a prediction (never logged). The five DB stages whose finish structure most resembled stage 8's 90-rider gallop (90 within 0-30s, 107 within 60s, 161 within 120s): Molano Vuelta'23 s12, Bauhaus Tirreno'22 s7, Milan Giro'24 s13, Bauhaus Pologne'21 s1, Kooij Giro'25 s21 — all full bunch sprints won by pure sprinters, avg sprint ~0.90 / hilly ~0.09. Answers: if we had known the Dordogne lumps would change nothing and 90 riders would contest a flat gallop, what would the model have said?
Top 5 (blend): Merlier Tim 42.3%; Kooij Olav 39.1%; Philipsen Jasper 23.1%; Girmay Biniam 7.4%; De Lie Arnaud 5.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.

RiderTeamFull sprintReduced sprintHindsight (post-hoc)Book oddsBook devigMax edge
Merlier TimSoudal Quick-Step46.7%35.2%42.3%1.6541.5%+5.2pp
Kooij OlavDecathlon CMA CGM Team28.2%33.6%39.1%4.0017.1%+22.0pp
Philipsen JasperAlpecin-Premier Tech22.1%22.3%23.1%5.5012.5%+10.7pp
Girmay BiniamNSN Cycling Team3.8%9.3%7.4%13.005.3%+4.0pp
De Lie ArnaudLotto-Intermarché4.6%6.4%5.3%n/a––
Gaviria FernandoCaja Rural-Seguros RGA4.3%3.3%5.0%81.000.8%+4.1pp
Kanter MaxXDS Astana Team3.8%4.1%4.4%19.003.6%+0.8pp
de Kleijn ArvidTudor Pro Cycling Team4.0%2.0%3.6%n/a––
Pedersen MadsLidl-Trek2.1%3.0%2.0%51.001.3%+1.6pp
van der Poel MathieuAlpecin-Premier Tech1.4%3.0%1.7%126.000.5%+2.4pp
Ackermann PascalTeam Jayco-AlUla3.0%2.7%2.8%301.000.2%+2.7pp
Fretin MilanCofidis1.9%1.8%2.1%51.001.3%+0.7pp
Wærenskjold SørenUno-X Mobility1.7%1.9%1.8%21.003.3%-1.3pp
Bauhaus PhilBahrain Victorious1.6%1.4%1.7%151.000.5%+1.3pp
Pogacar TadejUAE Team Emirates-XRG1.0%1.4%0.8%401.000.2%+1.2pp
Ballerini DavideXDS Astana Team1.2%1.4%1.3%401.000.2%+1.2pp
Matthews MichaelTeam Jayco-AlUla0.9%1.2%0.9%401.000.2%+1.0pp
Bittner PavelTeam Picnic PostNL1.1%1.0%1.1%151.000.5%+0.7pp
Full bunch sprint — Bergerac gallop — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Merlier Tim46.7%56.5%31.1%75.3%90.2%1.65
2Kooij Olav28.2%30.5%19.7%59.7%83.2%4.00
3Philipsen Jasper22.1%19.6%16.5%46.3%83.0%5.50
4De Lie Arnaud4.6%1.9%4.0%12.1%63.9%n/a
5Gaviria Fernando4.3%1.1%3.9%7.8%66.5%81.00
6de Kleijn Arvid4.0%2.1%3.3%9.9%73.9%n/a
7Kanter Max3.8%3.1%2.9%16.6%81.9%19.00
8Girmay Biniam3.8%2.6%3.0%11.9%80.1%13.00
9Ackermann Pascal3.0%1.4%2.5%8.8%69.5%301.00
10Pedersen Mads2.1%1.9%1.5%8.8%49.6%51.00
11Fretin Milan1.9%1.7%1.4%7.5%73.8%51.00
12Wærenskjold Søren1.7%1.7%1.3%6.9%69.6%21.00
13Bauhaus Phil1.6%0.8%1.4%9.9%58.0%151.00
14van der Poel Mathieu1.4%2.8%0.6%12.1%40.7%126.00
15Ballerini Davide1.2%1.0%1.0%7.8%47.7%401.00
16Bittner Pavel1.1%1.4%0.7%7.2%71.8%151.00
17Pogacar Tadej1.0%1.2%0.7%3.4%19.0%401.00
18Matthews Michael0.9%0.7%0.7%6.9%61.0%401.00
19van Dijke Tim0.4%0.8%0.2%3.8%25.1%1001.00
20Wright Fred0.4%0.5%0.3%2.6%22.0%301.00
21Askey Lewis0.4%0.4%0.3%2.1%19.7%801.00
22Biesterbos Frits0.3%0.3%0.2%1.8%35.0%801.00
23Vacek Mathias0.2%0.2%0.2%1.7%13.1%251.00
24Oldani Stefano0.2%0.1%0.2%1.0%32.1%1001.00
25Bol Cees0.2%0.2%0.2%1.4%19.3%601.00
26del Toro Isaac0.2%0.3%0.1%0.7%5.2%601.00
27Stuyven Jasper0.2%0.1%0.2%1.1%24.4%251.00
28Cort Magnus0.2%0.2%0.1%1.5%30.9%301.00
29Trentin Matteo0.1%0.1%0.1%1.6%47.5%401.00
30Pidcock Tom0.1%0.1%0.1%0.9%6.0%1001.00
Reduced group sprint — the late Cat-4s bite — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Merlier Tim35.2%45.7%21.9%66.7%83.8%1.65
2Kooij Olav33.6%39.6%21.9%62.1%80.7%4.00
3Philipsen Jasper22.3%18.1%16.6%42.7%76.7%5.50
4Girmay Biniam9.3%6.4%7.2%24.5%74.9%13.00
5De Lie Arnaud6.4%2.7%5.3%13.7%58.9%n/a
6Kanter Max4.1%3.6%3.0%17.9%75.1%19.00
7Gaviria Fernando3.3%1.1%2.9%8.1%52.8%81.00
8Pedersen Mads3.0%2.9%2.1%10.6%48.5%51.00
9van der Poel Mathieu3.0%2.5%2.2%11.5%48.7%126.00
10Ackermann Pascal2.7%1.5%2.2%7.5%59.4%301.00
11de Kleijn Arvid2.0%1.5%1.5%5.8%38.3%n/a
12Wærenskjold Søren1.9%2.1%1.3%8.4%55.2%21.00
13Fretin Milan1.8%2.0%1.2%8.5%61.6%51.00
14Pogacar Tadej1.4%1.6%0.9%4.7%29.2%401.00
15Ballerini Davide1.4%1.0%1.1%7.4%42.9%401.00
16Bauhaus Phil1.4%0.9%1.1%14.1%59.3%151.00
17Matthews Michael1.2%1.0%0.8%10.3%60.6%401.00
18Bittner Pavel1.0%1.5%0.6%7.9%60.6%151.00
19Askey Lewis0.6%0.3%0.5%3.4%36.3%801.00
20Wright Fred0.5%0.7%0.3%3.2%32.4%301.00
21Oldani Stefano0.4%0.2%0.4%1.1%45.9%1001.00
22Vacek Mathias0.4%0.3%0.3%2.0%14.6%251.00
23van Dijke Tim0.4%0.6%0.2%3.2%22.1%1001.00
24Pidcock Tom0.4%0.2%0.3%2.1%10.3%1001.00
25Biesterbos Frits0.3%0.2%0.2%1.8%36.7%801.00
26Stuyven Jasper0.3%0.2%0.2%1.4%24.4%251.00
27Aranburu Alex0.3%0.1%0.2%1.5%22.8%801.00
28Van Gils Maxim0.2%0.3%0.2%1.4%9.0%801.00
29Bol Cees0.2%0.2%0.2%1.1%23.3%601.00
30Godon Dorian0.2%0.3%0.1%1.6%22.0%126.00
Hindsight (post-hoc) — stages that finished like this one — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Merlier Tim42.3%54.2%24.7%74.0%90.3%1.65
2Kooij Olav39.1%43.3%24.6%68.7%86.0%4.00
3Philipsen Jasper23.1%18.9%16.2%48.9%83.0%5.50
4Girmay Biniam7.4%4.3%5.6%18.2%80.7%13.00
5De Lie Arnaud5.3%1.9%4.3%13.5%68.2%n/a
6Gaviria Fernando5.0%1.6%4.1%10.2%67.4%81.00
7Kanter Max4.4%3.3%3.2%17.6%79.4%19.00
8de Kleijn Arvid3.6%2.2%2.7%9.7%67.2%n/a
9Ackermann Pascal2.8%1.6%2.2%7.9%66.7%301.00
10Fretin Milan2.1%1.9%1.4%8.7%73.7%51.00
11Pedersen Mads2.0%2.0%1.3%8.8%47.1%51.00
12Wærenskjold Søren1.8%1.8%1.2%8.5%68.2%21.00
13Bauhaus Phil1.7%1.0%1.3%9.9%61.7%151.00
14van der Poel Mathieu1.7%3.2%0.8%16.0%42.3%126.00
15Ballerini Davide1.3%1.1%0.9%8.3%48.3%401.00
16Bittner Pavel1.1%1.4%0.6%8.1%69.7%151.00
17Matthews Michael0.9%0.9%0.6%8.2%60.1%401.00
18Pogacar Tadej0.8%0.9%0.5%2.5%16.6%401.00
19Wright Fred0.5%0.6%0.3%2.8%28.9%301.00
20van Dijke Tim0.4%0.7%0.2%2.8%25.6%1001.00
21Askey Lewis0.4%0.4%0.3%2.1%25.7%801.00
22Oldani Stefano0.3%0.1%0.2%0.9%38.5%1001.00
23Biesterbos Frits0.3%0.3%0.2%1.3%35.2%801.00
24Bol Cees0.2%0.2%0.1%1.1%22.9%601.00
25Stuyven Jasper0.2%0.2%0.1%1.3%26.7%251.00
26Vacek Mathias0.2%0.2%0.1%1.8%12.8%251.00
27Cort Magnus0.2%0.1%0.1%1.3%28.2%301.00
28Trentin Matteo0.2%0.1%0.1%1.2%39.0%401.00
29Godon Dorian0.1%0.2%0.1%1.3%20.0%126.00
30Artz Huub0.1%0.2%0.1%3.2%18.7%81.00

After the stage

Results — won by Merlier Tim

PosRiderTeamFull sprint win pReduced sprint win pHindsight (post-hoc) win p
1Merlier TimSoudal Quick-Step46.7%35.2%42.3%
2Girmay BiniamNSN Cycling Team3.8%9.3%7.4%
3Kooij OlavDecathlon CMA CGM Team28.2%33.6%39.1%
4Philipsen JasperAlpecin-Premier Tech22.1%22.3%23.1%
5Bittner PavelTeam Picnic PostNL1.1%1.0%1.1%
6Pluimers RickTudor Pro Cycling Team0.1%0.2%0.1%
7Ackermann PascalTeam Jayco-AlUla3.0%2.7%2.8%
8Russo ClémentGroupama-FDJ United0.1%0.1%0.1%
9Kanter MaxXDS Astana Team3.8%4.1%4.4%
10Fretin MilanCofidis1.9%1.8%2.1%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Full sprint46.72%41.52%
Reduced sprint35.22%41.52%
Hindsight (post-hoc)42.27%41.52%

Reflection

What we make of it

The road took the base case exactly as written. The two Cat-4 lumps changed nothing, the trains controlled the Dordogne crossing, and 90 riders hit Bergerac together for the full gallop — Merlier winning his second stage in two days off the Soudal Quick-Step lead-out, ahead of Girmay, Kooij and Philipsen. Those are the four names the full_sprint note listed as the top of the board before the race. Of the two reads, the road picked full_sprint; the reduced_sprint branch (the Buisson-de-Cadouin ramp doing damage) never materialized.

Both reads had the winner on top, so the fork barely mattered at the head of the board: full_sprint gave Merlier 46.7% against the book's devigged 41.5% (+5.2pp), reduced_sprint 35.2%. The more interesting movement was underneath. Girmay — 2nd on the day, 5.3% at the book — got 9.3% from the reduced read but only 3.8% from full_sprint, so the branch the road didn't take was the one that priced the runner-up right. And the book itself closed most of last stage's gap: on stage 7 we ran Merlier at 46.3% against a 30.5% devig; today the market opened him at 1.65 (41.5% devigged) and our premium shrank to five points. The market conceded the Merlier read rather than the model backing off it.

Hindsight confirmed rather than corrected, again: fed five pure-sprint finishes (avg sprint score 0.90), the model returned Merlier 42.3%, Kooij 39.1%, Philipsen 23.1% — the live board within a few points, so course knowledge was never the constraint on a day with no structural surprise. Watch-item tally after two clean sprints: the over-the-book premium on the lead sprinter has now paid twice (stage 7 hugely, stage 8 modestly because the book moved to us). The sharper sub-question is Kooij: the model has priced him at roughly double the book two sprints running (28.2% vs 17.1% today) and he has yet to beat Merlier head-on — if that ratio persists without a win, the Kooij number starts to look like model over-confidence in second wheels rather than edge. Tomorrow is the real test of the week: a stage-4-archetype day where the carry-forward rule — pick references by winner archetype, not terrain, and don't let pure sprinters or GC climbers crowd out the classics hard-men — gets applied prospectively for the first time.