Cycling race predictor · Tour de Luxembourg

Stage 5 — 2026-09-20

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

2 scenarios 94 riders priced models retrained 75c6e7af51 book snapshot no capture

The fork

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

Main read

The main read — the day as the key says it goes
sprint0.00
mountain0.40
hilly0.00
rolling0.59
break0.01
TT0.00
keyed: GC day 0.5 / hard puncheur day 0.3 / rouleur power group 0.2 (written by the automated reader, not by a person) (board order by rider-type retrieval; prices unchanged)
The main board. It inherits the config-root day key and is priced on the reference set that key selects.
Top 5 (blend): Piganzoli Davide 17.8%; van der Poel Mathieu 16.8%; Arrieta Igor 9.7%; Breuillard Nicolas 4.2%; Bagioli Andrea 3.6%

Alt: res_4

The other branch — a mountain day won from the escape
sprint0.01
mountain0.28
hilly0.17
rolling0.53
break0.01
TT0.00
keyed: hard puncheur day (written by the automated reader, not by a person) (board order by rider-type retrieval; prices unchanged)
The alternate branch, chosen by the driver because the day key carries weight in a second family (the escape). It is priced as if that shape were certain, so the two boards bracket the read.
Top 5 (blend): van der Poel Mathieu 30.1%; Piganzoli Davide 13.8%; Arrieta Igor 5.8%; Stuyven Jasper 4.2%; Breuillard Nicolas 3.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.

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 Main read 89%, Alt: res_4 98% — 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.

RiderTeamMain readAlt: res_4Book oddsBook devigMax edge
van der Poel MathieuAlpecin-Premier Tech16.8%30.1%n/a––
Piganzoli DavideTeam Visma | Lease a Bike17.8%13.8%n/a––
Arrieta IgorUAE Team Emirates-XRG9.7%5.8%n/a––
Breuillard NicolasTeam TotalEnergies4.2%3.6%n/a––
Stuyven JasperSoudal Quick-Step1.6%4.2%n/a––
Bagioli AndreaLidl-Trek3.6%2.9%n/a––
Paret-Peintre AurélienDecathlon CMA CGM Team3.4%3.1%n/a––
van den Berg MarijnEF Education-EasyPost2.3%3.4%n/a––
Honore MikkelEF Education-EasyPost2.5%3.4%n/a––
Raccagni Noviero AndreaSoudal Quick-Step1.9%2.6%n/a––
Gautherat PierreDecathlon CMA CGM Team1.4%2.6%n/a––
Gachignard ThomasTeam TotalEnergies2.3%1.9%n/a––
L'Hote AntoineDecathlon CMA CGM Team2.0%1.9%n/a––
Hagenes Per StrandTeam Visma | Lease a Bike1.9%1.6%n/a––
Vercher MattéoTeam TotalEnergies1.6%1.9%n/a––
Mariault AxelCIC Pro Cycling Academy1.6%1.7%n/a––
Politt NilsUAE Team Emirates-XRG1.5%1.3%n/a––
Graat TijmenTeam Visma | Lease a Bike1.5%1.0%n/a––
Nerurkar LukasEF Education-EasyPost0.9%1.1%n/a––
Kragh Andersen SørenLidl-Trek0.8%1.1%n/a––
The main read — the day as the key says it goes — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Piganzoli Davide17.8%12.0%21.5%37.1%86.0%n/a
2van der Poel Mathieu16.8%21.6%17.7%32.8%49.1%n/a
3Arrieta Igor9.7%6.6%11.7%28.0%85.0%n/a
4Breuillard Nicolas4.2%1.9%5.3%7.7%35.9%n/a
5Bagioli Andrea3.6%2.3%4.3%9.0%28.5%n/a
6Paret-Peintre Aurélien3.4%2.5%4.0%14.3%78.6%n/a
7Honore Mikkel2.5%1.5%3.0%4.8%21.8%n/a
8Gachignard Thomas2.3%1.9%2.7%11.5%66.8%n/a
9van den Berg Marijn2.3%9.5%0.7%13.7%27.8%n/a
10L'Hote Antoine2.0%3.2%1.9%8.7%36.6%n/a
11Hagenes Per Strand1.9%0.8%2.5%2.8%13.3%n/a
12Raccagni Noviero Andrea1.9%1.6%2.2%6.1%34.0%n/a
13Vercher Mattéo1.6%2.2%1.7%14.3%71.7%n/a
14Mariault Axel1.6%1.3%1.9%6.5%37.7%n/a
15Stuyven Jasper1.6%1.2%1.9%5.6%24.9%n/a
16Politt Nils1.5%1.2%1.8%5.6%30.1%n/a
17Graat Tijmen1.5%1.3%1.8%6.0%60.0%n/a
18Gautherat Pierre1.4%3.0%1.2%9.8%28.1%n/a
19Nerurkar Lukas0.9%0.9%1.0%3.5%40.8%n/a
20Thierry Pierre0.9%1.0%0.9%3.0%21.2%n/a
21Oomen Sam0.8%1.3%0.8%3.2%47.9%n/a
22Kragh Andersen Søren0.8%0.9%0.9%6.2%41.9%n/a
23Geoghegan Hart Tao0.7%0.5%0.9%2.8%17.3%n/a
24Thonnon Senne0.7%0.3%0.8%1.5%33.1%n/a
25Domínguez David0.6%0.4%0.7%1.4%15.9%n/a
26Reinderink Pepijn0.5%1.0%0.5%5.2%46.2%n/a
27Mollema Bauke0.4%0.4%0.5%2.0%7.4%n/a
28Ramsay Noah0.4%0.3%0.4%1.6%15.7%n/a
29Baroncini Filippo0.4%0.9%0.3%3.8%14.1%n/a
30Vezie Maxime0.4%0.3%0.4%1.8%26.0%n/a
The other branch — a mountain day won from the escape — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1van der Poel Mathieu30.1%45.9%26.6%63.6%79.7%n/a
2Piganzoli Davide13.8%6.2%15.9%20.2%79.7%n/a
3Arrieta Igor5.8%2.4%6.8%12.4%77.1%n/a
4Stuyven Jasper4.2%3.3%4.5%15.7%54.0%n/a
5Breuillard Nicolas3.6%1.9%4.0%6.8%39.6%n/a
6van den Berg Marijn3.4%2.6%3.6%11.0%38.6%n/a
7Honore Mikkel3.4%2.6%3.6%9.4%39.3%n/a
8Paret-Peintre Aurélien3.1%2.5%3.3%11.1%70.9%n/a
9Bagioli Andrea2.9%2.3%3.1%9.5%35.2%n/a
10Raccagni Noviero Andrea2.6%2.5%2.6%9.4%47.1%n/a
11Gautherat Pierre2.6%2.1%2.7%9.8%30.5%n/a
12L'Hote Antoine1.9%3.0%1.7%7.8%34.6%n/a
13Gachignard Thomas1.9%1.4%2.1%8.3%52.8%n/a
14Vercher Mattéo1.9%2.1%1.8%11.9%66.6%n/a
15Mariault Axel1.7%1.2%1.8%5.4%42.0%n/a
16Hagenes Per Strand1.6%0.9%1.8%3.7%21.2%n/a
17Politt Nils1.3%0.5%1.5%6.5%38.3%n/a
18Nerurkar Lukas1.1%0.8%1.2%7.4%50.6%n/a
19Kragh Andersen Søren1.1%2.1%0.8%5.9%41.4%n/a
20Graat Tijmen1.0%0.4%1.1%2.5%40.4%n/a
21Thierry Pierre0.8%0.5%1.0%1.7%23.5%n/a
22Oomen Sam0.7%1.1%0.6%3.0%39.5%n/a
23Reinderink Pepijn0.6%0.7%0.6%2.1%43.9%n/a
24Thonnon Senne0.6%0.3%0.6%1.6%35.8%n/a
25Baroncini Filippo0.4%0.9%0.3%2.9%17.4%n/a
26Geoghegan Hart Tao0.4%0.3%0.5%2.0%11.7%n/a
27Vezie Maxime0.4%0.3%0.5%2.0%37.5%n/a
28Remijn Senna0.4%0.9%0.3%4.3%31.2%n/a
29Domínguez David0.4%0.4%0.4%1.3%15.4%n/a
30Mollema Bauke0.4%0.4%0.4%1.8%6.4%n/a

After the stage

Results — won by van der Poel Mathieu

PosRiderTeamMain read win pAlt: res_4 win p
1van der Poel MathieuAlpecin-Premier Tech16.8%30.1%
2Honore MikkelEF Education-EasyPost2.5%3.4%
3Reinderink PepijnSoudal Quick-Step0.5%0.6%
4Piganzoli DavideTeam Visma | Lease a Bike17.8%13.8%
5Nerurkar LukasEF Education-EasyPost0.9%1.1%
6Vercher MattéoTeam TotalEnergies1.6%1.9%
7Kragh Andersen SørenLidl-Trek0.8%1.1%
8Gachignard ThomasTeam TotalEnergies2.3%1.9%
9L'Hote AntoineDecathlon CMA CGM Team2.0%1.9%
10Paret-Peintre AurélienDecathlon CMA CGM Team3.4%3.1%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Main read16.82%–
Alt: res_430.05%–