Cycling race predictor · Tour de Langkawi

Stage 3 — 2026-09-29

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 102 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.01
hilly0.06
rolling0.00
break0.00
TT0.00
keyed: bunch sprint 0.7 / survivor gallop 0.2 / 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 48.9%; Syritsa Gleb 11.7%; Gaviria Fernando 6.1%; Cavia Daniel 4.7%; Augé Ronan 3.1%

Alt: res_3

The other branch — a reduced bunch sprint
sprint0.00
mountain0.17
hilly0.01
rolling0.57
break0.24
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 5.0%; Breuillard Nicolas 4.9%; Le Berre Mathis 3.9%; Castellon Jan 3.6%; Gate Aaron 2.4%

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_3 50% — 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 Team48.9%1.6%n/a––
Syritsa GlebXDS Astana Team11.7%0.4%n/a––
Gaviria FernandoCaja Rural-Seguros RGA6.1%0.7%n/a––
Cavia DanielBurgos Burpellet BH4.7%5.0%n/a––
Breuillard NicolasTeam TotalEnergies0.1%4.9%n/a––
Le Berre MathisTeam TotalEnergies1.0%3.9%n/a––
Castellon JanCaja Rural-Seguros RGA0.0%3.6%n/a––
Augé RonanUnibet Rose Rockets3.1%0.2%n/a––
Gate AaronXDS Astana Team0.5%2.4%n/a––
Pickrell RileyModern Adventure Pro Cycling2.3%0.1%n/a––
Jasch LennartTudor Pro Cycling Team0.1%2.1%n/a––
Aparicio MarioBurgos Burpellet BH0.0%2.0%n/a––
Gutiérrez JorgeEquipo Kern Pharma0.0%1.8%n/a––
Gaffuri MattiaTeam Picnic PostNL0.0%1.4%n/a––
Hoogendoorn RoyTeam Picnic PostNL1.4%0.7%n/a––
Balderstone AbelCaja Rural-Seguros RGA0.0%1.4%n/a––
Christophersen Cedrik BakkeUnibet Rose Rockets0.0%1.3%n/a––
Rikunov PetrWheeltop Rotor Chengdu Team0.5%1.2%n/a––
de Bod StefanModern Adventure Pro Cycling0.0%1.0%n/a––
The main read — the day as the key says it goes — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Malucelli Matteo48.9%40.1%57.5%62.0%83.8%n/a
2Syritsa Gleb11.7%16.6%11.9%39.7%72.6%n/a
3Gaviria Fernando6.1%5.8%6.9%17.9%54.6%n/a
4Cavia Daniel4.7%2.6%5.9%14.7%61.8%n/a
5Augé Ronan3.1%4.1%3.3%15.1%60.9%n/a
6Pickrell Riley2.3%3.9%2.2%14.6%61.4%n/a
7Hoogendoorn Roy1.4%1.3%1.6%6.7%42.4%n/a
8Le Berre Mathis1.0%1.1%1.1%4.2%42.3%n/a
9McGill Scott1.0%1.4%1.0%5.3%42.0%n/a
10Cettolin Filippo0.9%1.2%0.9%7.9%53.7%n/a
11Delle Vedove Alessio0.9%0.8%1.0%4.1%43.1%n/a
12Abdul Halil Mohamad Izzat Hilmi0.8%0.8%0.9%5.1%28.7%n/a
13Álvarez Rodrigo0.8%0.7%0.9%7.2%53.0%n/a
14Gate Aaron0.5%0.9%0.4%2.3%13.1%n/a
15Rikunov Petr0.5%0.7%0.5%5.8%41.6%n/a
16Van Den Boer Seppe0.3%0.6%0.3%3.0%36.9%n/a
17Corkery Dillon0.3%0.7%0.3%3.4%30.6%n/a
18Retegi Mikel0.3%0.3%0.3%1.0%24.8%n/a
19Huby Antoine0.2%0.3%0.3%0.9%17.8%n/a
20Mohd Nawawi Muhamad Iqbal Daniel0.2%0.2%0.2%1.5%20.0%n/a
21Townsend Rory0.2%0.2%0.2%0.7%6.8%n/a
22Gonov Lev0.1%0.2%0.2%2.7%12.3%n/a
23Villar Iker0.1%0.2%0.1%1.6%25.2%n/a
24Jasch Lennart0.1%0.1%0.1%0.3%17.8%n/a
25Arifin Muh Imam0.1%0.2%0.1%1.0%13.1%n/a
26Oda Hijiri0.1%0.2%0.1%0.7%17.6%n/a
27Meris Sergio0.1%0.1%0.1%0.6%8.8%n/a
28Donzé Robin0.1%0.2%0.1%0.4%7.1%n/a
29van Rees Christiaan0.1%0.1%0.1%0.5%12.1%n/a
30Meisa Ade0.1%0.1%0.1%1.2%10.7%n/a
The other branch — a reduced bunch sprint — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Cavia Daniel5.0%3.6%10.4%12.8%37.3%n/a
2Breuillard Nicolas4.9%5.7%9.7%18.1%55.8%n/a
3Le Berre Mathis3.9%5.7%7.3%14.9%61.1%n/a
4Castellon Jan3.6%2.2%7.5%11.5%68.0%n/a
5Gate Aaron2.4%0.9%5.1%4.1%17.5%n/a
6Jasch Lennart2.1%1.4%4.3%9.1%56.6%n/a
7Aparicio Mario2.0%1.0%4.3%5.2%35.1%n/a
8Gutiérrez Jorge1.8%1.9%3.5%7.3%46.7%n/a
9Malucelli Matteo1.6%2.8%2.8%6.6%16.5%n/a
10Gaffuri Mattia1.4%1.5%2.8%6.2%49.3%n/a
11Balderstone Abel1.4%2.5%2.4%11.6%50.1%n/a
12Christophersen Cedrik Bakke1.3%1.0%2.7%4.8%46.9%n/a
13Rikunov Petr1.2%1.4%2.5%5.4%36.6%n/a
14de Bod Stefan1.0%1.1%2.0%3.4%26.7%n/a
15López Martin1.0%1.9%1.7%7.1%29.8%n/a
16Covili Luca0.9%0.3%2.0%1.5%37.2%n/a
17Diaz Jose Manuel0.8%0.4%1.8%2.5%38.1%n/a
18Huby Antoine0.8%1.0%1.5%4.3%30.2%n/a
19Gaviria Fernando0.7%0.8%1.4%4.3%13.8%n/a
20Hoogendoorn Roy0.7%0.8%1.4%3.2%15.0%n/a
21Meris Sergio0.7%0.7%1.3%3.0%24.6%n/a
22Herreño Martín0.6%1.1%1.1%2.7%35.2%n/a
23Stepanov Andrei0.6%0.5%1.2%2.1%17.6%n/a
24Retegi Mikel0.5%0.3%1.1%1.6%15.4%n/a
25Álvarez Rodrigo0.5%0.7%0.9%6.6%25.9%n/a
26Syritsa Gleb0.4%0.8%0.8%3.7%10.9%n/a
27Donzé Robin0.4%0.3%0.9%1.1%17.6%n/a
28Bregnhøj Mathias0.3%0.5%0.7%2.8%29.3%n/a
29Arriola-Bengoa Julen0.3%0.1%0.7%0.7%7.8%n/a
30Cruz Martínez Edward0.3%0.3%0.6%1.1%11.1%n/a

After the stage

Results — won by Malucelli Matteo

PosRiderTeamMain read win pAlt: res_3 win p
1Malucelli MatteoXDS Astana Team48.9%1.6%
2Pickrell RileyModern Adventure Pro Cycling2.3%0.1%
3Van Den Boer SeppeTUDOR PRO CYCLING TEAM U230.3%0.3%
4Augé RonanUnibet Rose Rockets3.1%0.2%
5Abdul Halil Mohamad Izzat HilmiMalaysia Pro Cycling0.8%0.0%
6Marcerou NicolaTeam TotalEnergies0.0%0.0%
7Gaviria FernandoCaja Rural-Seguros RGA6.1%0.7%
8Álvarez RodrigoBurgos Burpellet BH0.8%0.5%
9Villar IkerCaja Rural-Seguros RGA0.1%0.1%
10Cavia DanielBurgos Burpellet BH4.7%5.0%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Main read48.93%–
Alt: res_31.56%–