Cycling race predictor · Tour de Langkawi

Stage 1 — 2026-09-27

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 111 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.92
mountain0.06
hilly0.02
rolling0.00
break0.00
TT0.00
keyed: bunch sprint 0.8 / survivor gallop 0.1 / split sprint 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): Malucelli Matteo 44.3%; Syritsa Gleb 11.4%; Gaviria Fernando 6.4%; Cavia Daniel 6.3%; Augé Ronan 3.0%

Alt: res_3

The other branch — a reduced bunch sprint
sprint0.01
mountain0.18
hilly0.01
rolling0.60
break0.20
TT0.00
keyed: survivor gallop (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 (a sprint off a hard finale). It is priced as if that shape were certain, so the two boards bracket the read.
Top 5 (blend): Cavia Daniel 6.1%; Breuillard Nicolas 5.3%; Le Berre Mathis 4.5%; Castellon Jan 3.9%; Jasch Lennart 2.8%

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 91%, Alt: res_3 61% — 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_3Book oddsBook devigMax edge
Malucelli MatteoXDS Astana Team44.3%2.0%n/a––
Syritsa GlebXDS Astana Team11.4%0.4%n/a––
Gaviria FernandoCaja Rural-Seguros RGA6.4%0.8%n/a––
Cavia DanielBurgos Burpellet BH6.3%6.1%n/a––
Breuillard NicolasTeam TotalEnergies0.1%5.3%n/a––
Le Berre MathisTeam TotalEnergies2.1%4.5%n/a––
Castellon JanCaja Rural-Seguros RGA0.1%3.9%n/a––
Augé RonanUnibet Rose Rockets3.0%0.2%n/a––
Jasch LennartTudor Pro Cycling Team0.3%2.8%n/a––
Gate AaronXDS Astana Team0.9%2.7%n/a––
Aparicio MarioBurgos Burpellet BH0.0%2.2%n/a––
Pickrell RileyModern Adventure Pro Cycling2.2%0.2%n/a––
Hoogendoorn RoyTeam Picnic PostNL2.2%0.8%n/a––
Gutiérrez JorgeEquipo Kern Pharma0.1%2.1%n/a––
Bouchard GeoffreyTeam TotalEnergies0.0%2.1%n/a––
Christophersen Cedrik BakkeUnibet Rose Rockets0.0%2.0%n/a––
Rikunov PetrWheeltop Rotor Chengdu Team0.8%1.6%n/a––
Balderstone AbelCaja Rural-Seguros RGA0.0%1.5%n/a––
Gaffuri MattiaTeam Picnic PostNL0.0%1.5%n/a––
Covili LucaBardiani-CSF 7 Saber0.1%1.2%n/a––
de Bod StefanModern Adventure Pro Cycling0.0%1.1%n/a––
Delle Vedove AlessioXDS Astana Team1.1%0.1%n/a––
López MartinXDS Astana Team0.0%1.1%n/a––
The main read — the day as the key says it goes — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Malucelli Matteo44.3%45.6%48.4%62.7%79.4%n/a
2Syritsa Gleb11.4%14.2%11.8%34.1%59.7%n/a
3Gaviria Fernando6.4%4.5%7.5%15.0%45.0%n/a
4Cavia Daniel6.3%2.9%7.8%15.4%60.9%n/a
5Augé Ronan3.0%2.6%3.4%8.8%44.5%n/a
6Pickrell Riley2.2%2.8%2.3%12.5%45.8%n/a
7Hoogendoorn Roy2.2%1.8%2.5%8.8%47.0%n/a
8Le Berre Mathis2.1%1.8%2.4%5.2%40.3%n/a
9Delle Vedove Alessio1.1%0.6%1.3%3.5%32.3%n/a
10Cettolin Filippo1.0%0.6%1.2%3.2%31.1%n/a
11Álvarez Rodrigo1.0%0.7%1.1%7.3%49.1%n/a
12Gate Aaron0.9%0.9%1.0%4.5%26.4%n/a
13McGill Scott0.9%1.2%0.9%4.7%32.6%n/a
14Rikunov Petr0.8%0.8%0.9%5.0%36.3%n/a
15Abdul Halil Mohamad Izzat Hilmi0.7%0.5%0.8%3.5%25.0%n/a
16Huby Antoine0.4%0.4%0.5%1.2%19.9%n/a
17Van Den Boer Seppe0.4%0.6%0.4%1.6%21.5%n/a
18Corkery Dillon0.4%0.6%0.4%3.3%27.7%n/a
19Jasch Lennart0.3%0.7%0.3%1.3%18.0%n/a
20Retegi Mikel0.3%0.3%0.3%1.0%23.5%n/a
21Townsend Rory0.3%0.4%0.2%1.3%8.7%n/a
22Gonov Lev0.2%0.2%0.3%1.8%19.9%n/a
23Mohd Nawawi Muhamad Iqbal Daniel0.2%0.2%0.3%1.4%15.6%n/a
24Donzé Robin0.2%0.6%0.1%0.9%11.4%n/a
25Meris Sergio0.2%0.1%0.2%0.8%11.8%n/a
26Park Ji Hwan0.2%0.1%0.2%0.8%11.4%n/a
27Villar Iker0.1%0.2%0.2%0.8%23.0%n/a
28Arifin Muh Imam0.1%0.2%0.1%0.9%14.3%n/a
29van Rees Christiaan0.1%0.2%0.1%0.6%16.9%n/a
30Castellon Jan0.1%0.2%0.1%0.5%11.4%n/a
The other branch — a reduced bunch sprint — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Cavia Daniel6.1%5.1%10.3%16.7%49.4%n/a
2Breuillard Nicolas5.3%4.2%8.9%15.3%54.9%n/a
3Le Berre Mathis4.5%4.9%7.2%11.2%45.6%n/a
4Castellon Jan3.9%2.5%6.8%10.1%54.7%n/a
5Jasch Lennart2.8%2.1%4.8%9.4%47.6%n/a
6Gate Aaron2.7%2.9%4.4%11.4%39.9%n/a
7Aparicio Mario2.2%1.3%3.9%3.3%44.8%n/a
8Gutiérrez Jorge2.1%2.1%3.5%7.3%42.0%n/a
9Bouchard Geoffrey2.1%2.5%3.3%6.3%36.4%n/a
10Malucelli Matteo2.0%4.5%2.7%12.3%29.0%n/a
11Christophersen Cedrik Bakke2.0%1.2%3.4%4.7%34.1%n/a
12Rikunov Petr1.6%1.6%2.6%5.8%36.9%n/a
13Balderstone Abel1.5%2.6%2.2%9.5%34.5%n/a
14Gaffuri Mattia1.5%0.7%2.7%3.9%35.8%n/a
15Covili Luca1.2%0.4%2.1%1.7%35.9%n/a
16de Bod Stefan1.1%1.1%1.9%3.9%25.5%n/a
17López Martin1.1%1.6%1.6%6.5%24.3%n/a
18Huby Antoine1.0%1.0%1.6%4.6%27.9%n/a
19Diaz Jose Manuel0.9%0.3%1.6%1.6%25.4%n/a
20Meris Sergio0.9%0.7%1.4%3.2%25.3%n/a
21Hoogendoorn Roy0.8%1.1%1.3%4.2%21.5%n/a
22Gaviria Fernando0.8%1.2%1.2%5.5%17.1%n/a
23Martinez Juan Guillermo0.8%1.2%1.2%4.6%38.8%n/a
24Stepanov Andrei0.7%0.7%1.2%2.7%23.6%n/a
25Herreño Martín0.7%1.2%1.0%2.6%25.4%n/a
26Retegi Mikel0.6%0.3%1.0%1.8%16.2%n/a
27Donzé Robin0.5%0.9%0.8%1.8%18.4%n/a
28Álvarez Rodrigo0.5%0.2%0.9%1.4%16.6%n/a
29Syritsa Gleb0.4%0.9%0.5%4.6%14.9%n/a
30Bregnhøj Mathias0.4%0.3%0.7%1.7%16.3%n/a

After the stage

Results — won by Malucelli Matteo

PosRiderTeamMain read win pAlt: res_3 win p
1Malucelli MatteoXDS Astana Team44.3%2.0%
2Pickrell RileyModern Adventure Pro Cycling2.2%0.2%
3Gaviria FernandoCaja Rural-Seguros RGA6.4%0.8%
4Augé RonanUnibet Rose Rockets3.0%0.2%
5Villar IkerCaja Rural-Seguros RGA0.1%0.1%
6Álvarez RodrigoBurgos Burpellet BH1.0%0.5%
7Oda HijiriAisan Racing Team0.1%0.1%
8Syritsa GlebXDS Astana Team11.4%0.4%
9Van Den Boer SeppeTUDOR PRO CYCLING TEAM U230.4%0.3%
10Cettolin FilippoBardiani-CSF 7 Saber1.0%0.1%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Main read44.32%–
Alt: res_32.01%–