Cycling race predictor · Tour de Langkawi

Stage 2 — 2026-09-28

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 103 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.46
hilly0.00
rolling0.53
break0.01
TT0.00
keyed: mountain escape 0.6 / hard puncheur day 0.2 / GC day 0.1 (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): Breuillard Nicolas 12.1%; Castellon Jan 12.1%; Aparicio Mario 4.8%; Jasch Lennart 3.5%; Balderstone Abel 3.4%

Alt: gc_day

The other branch — the classification men deciding it on the last climb
sprint0.00
mountain0.38
hilly0.00
rolling0.62
break0.01
TT0.00
keyed: GC 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 macro read). It is priced as if that shape were certain, so the two boards bracket the read.
Top 5 (blend): Castellon Jan 14.0%; Breuillard Nicolas 12.1%; Aparicio Mario 5.1%; Jasch Lennart 3.6%; Gaffuri Mattia 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 78%, Alt: gc_day 76% — 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: gc_dayBook oddsBook devigMax edge
Castellon JanCaja Rural-Seguros RGA12.1%14.0%n/a––
Breuillard NicolasTeam TotalEnergies12.1%12.1%n/a––
Aparicio MarioBurgos Burpellet BH4.8%5.1%n/a––
Jasch LennartTudor Pro Cycling Team3.5%3.6%n/a––
Gaffuri MattiaTeam Picnic PostNL3.4%3.6%n/a––
Balderstone AbelCaja Rural-Seguros RGA3.4%3.4%n/a––
Christophersen Cedrik BakkeUnibet Rose Rockets3.2%3.0%n/a––
Cavia DanielBurgos Burpellet BH3.0%2.5%n/a––
Gutiérrez JorgeEquipo Kern Pharma2.9%3.0%n/a––
Le Berre MathisTeam TotalEnergies2.4%1.6%n/a––
López MartinXDS Astana Team2.2%2.3%n/a––
Gate AaronXDS Astana Team2.2%1.8%n/a––
de Bod StefanModern Adventure Pro Cycling2.1%1.9%n/a––
Covili LucaBardiani-CSF 7 Saber2.1%1.8%n/a––
Rikunov PetrWheeltop Rotor Chengdu Team1.5%1.3%n/a––
Herreño MartínBardiani-CSF 7 Saber1.2%1.1%n/a––
Diaz Jose ManuelBurgos Burpellet BH1.1%1.0%n/a––
Cruz Martínez EdwardBardiani-CSF 7 Saber1.1%1.0%n/a––
Meris SergioUnibet Rose Rockets1.0%0.8%n/a––
The main read — the day as the key says it goes — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Breuillard Nicolas12.1%10.4%16.0%35.1%76.8%n/a
2Castellon Jan12.1%8.6%16.4%31.7%80.4%n/a
3Aparicio Mario4.8%2.6%6.8%10.3%58.8%n/a
4Jasch Lennart3.5%3.2%4.6%11.9%58.2%n/a
5Balderstone Abel3.4%7.2%3.5%21.3%56.8%n/a
6Gaffuri Mattia3.4%2.8%4.5%12.0%53.3%n/a
7Christophersen Cedrik Bakke3.2%2.1%4.4%7.5%41.5%n/a
8Cavia Daniel3.0%1.8%4.2%7.9%31.7%n/a
9Gutiérrez Jorge2.9%2.7%3.8%9.6%49.7%n/a
10Le Berre Mathis2.4%3.9%2.8%8.2%46.9%n/a
11López Martin2.2%4.0%2.5%13.7%37.0%n/a
12Gate Aaron2.2%0.8%3.2%1.3%6.5%n/a
13de Bod Stefan2.1%2.8%2.5%8.5%40.4%n/a
14Covili Luca2.1%1.3%2.9%7.0%56.5%n/a
15Rikunov Petr1.5%1.9%1.9%7.4%47.9%n/a
16Herreño Martín1.2%2.3%1.2%7.7%42.9%n/a
17Diaz Jose Manuel1.1%0.9%1.5%5.9%50.6%n/a
18Cruz Martínez Edward1.1%2.4%1.1%7.0%40.4%n/a
19Meris Sergio1.0%1.3%1.2%2.9%29.8%n/a
20Huby Antoine0.8%1.2%1.0%2.5%18.8%n/a
21Stepanov Andrei0.7%0.8%0.9%3.4%31.9%n/a
22Arriola-Bengoa Julen0.6%0.2%0.9%1.1%28.8%n/a
23Bregnhøj Mathias0.6%0.4%0.8%2.9%28.8%n/a
24Burnett Josh0.5%0.7%0.6%1.7%26.3%n/a
25Donzé Robin0.5%0.9%0.6%1.4%15.0%n/a
26Caicedo Jonathan0.5%0.7%0.5%5.6%32.9%n/a
27Retegi Mikel0.4%0.3%0.6%1.3%22.8%n/a
28Whitehouse Daniel0.4%0.3%0.5%1.8%14.4%n/a
29Milostic Lindon0.4%0.3%0.5%2.5%33.7%n/a
30Jousseaume Alan0.3%0.1%0.5%1.2%25.4%n/a
The other branch — the classification men deciding it on the last climb — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Castellon Jan14.0%10.4%19.4%37.0%81.5%n/a
2Breuillard Nicolas12.1%11.1%16.2%34.9%77.0%n/a
3Aparicio Mario5.1%3.7%7.2%14.8%65.4%n/a
4Jasch Lennart3.6%3.1%4.9%12.3%58.4%n/a
5Gaffuri Mattia3.6%3.7%4.7%15.3%59.5%n/a
6Balderstone Abel3.4%7.0%3.5%21.4%59.5%n/a
7Christophersen Cedrik Bakke3.0%2.2%4.2%8.1%44.3%n/a
8Gutiérrez Jorge3.0%2.6%4.0%10.5%53.0%n/a
9Cavia Daniel2.5%1.5%3.5%6.0%26.7%n/a
10López Martin2.3%4.1%2.5%13.7%38.1%n/a
11de Bod Stefan1.9%2.5%2.4%7.9%39.6%n/a
12Covili Luca1.8%1.1%2.6%6.2%55.3%n/a
13Gate Aaron1.8%0.5%2.7%0.9%5.8%n/a
14Le Berre Mathis1.6%1.8%2.0%5.3%43.3%n/a
15Rikunov Petr1.3%1.3%1.8%5.2%44.2%n/a
16Herreño Martín1.1%2.0%1.1%7.5%43.2%n/a
17Diaz Jose Manuel1.0%0.4%1.5%1.8%31.7%n/a
18Cruz Martínez Edward1.0%2.1%1.1%6.9%42.5%n/a
19Meris Sergio0.8%1.2%1.0%2.7%27.8%n/a
20Stepanov Andrei0.6%0.8%0.8%3.1%30.8%n/a
21Bregnhøj Mathias0.6%0.4%0.8%2.1%32.3%n/a
22Huby Antoine0.6%0.7%0.7%1.8%16.8%n/a
23Burnett Josh0.5%0.8%0.6%1.7%30.0%n/a
24Arriola-Bengoa Julen0.5%0.2%0.7%0.9%33.4%n/a
25Donzé Robin0.4%0.8%0.5%1.2%13.2%n/a
26Caicedo Jonathan0.4%0.5%0.5%3.4%35.4%n/a
27Whitehouse Daniel0.4%0.4%0.5%1.8%16.4%n/a
28Milostic Lindon0.4%0.4%0.5%2.3%38.3%n/a
29Chaiyasombat Thanakhan0.3%0.2%0.5%0.8%15.1%n/a
30Jousseaume Alan0.3%0.1%0.4%1.2%22.5%n/a

After the stage

Results — won by Jasch Lennart

PosRiderTeamMain read win pAlt: gc_day win p
1Jasch LennartTUDOR PRO CYCLING TEAM3.5%3.6%
2Balderstone AbelCaja Rural-Seguros RGA3.4%3.4%
3Castellon JanCaja Rural-Seguros RGA12.1%14.0%
4Diaz Jose ManuelBurgos Burpellet BH1.1%1.0%
5Christophersen Cedrik BakkeUnibet Rose Rockets3.2%3.0%
6Fougner Eivind BroholtUnibet Rose Rockets0.3%0.2%
7Gaffuri MattiaTeam Picnic PostNL3.4%3.6%
8Le Berre MathisTeam TotalEnergies2.4%1.6%
9Gutiérrez JorgeEquipo Kern Pharma2.9%3.0%
10Bregnhøj MathiasTerengganu Cycling Team0.6%0.6%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Main read3.54%–
Alt: gc_day3.65%–