Cycling race predictor · Tour de Langkawi

Stage 8 — 2026-10-04

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 106 riders priced models retrained 72bc1bd857 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.47
mountain0.01
hilly0.42
rolling0.02
break0.07
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 39.0%; Gaviria Fernando 15.0%; Syritsa Gleb 9.9%; Cavia Daniel 9.0%; Pickrell Riley 3.2%

Alt: res_3

The other branch — a reduced bunch sprint
sprint0.01
mountain0.19
hilly0.02
rolling0.43
break0.34
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): Castellon Jan 7.4%; Cavia Daniel 6.6%; Breuillard Nicolas 6.1%; Malucelli Matteo 4.9%; Jasch Lennart 4.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 95%, Alt: res_3 71% — 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 Team39.0%4.9%n/a––
Gaviria FernandoCaja Rural-Seguros RGA15.0%2.2%n/a––
Syritsa GlebXDS Astana Team9.9%0.5%n/a––
Cavia DanielBurgos Burpellet BH9.0%6.6%n/a––
Castellon JanCaja Rural-Seguros RGA0.3%7.4%n/a––
Breuillard NicolasTeam TotalEnergies0.2%6.1%n/a––
Jasch LennartTudor Pro Cycling Team0.6%4.4%n/a––
Pickrell RileyModern Adventure Pro Cycling3.2%0.2%n/a––
Christophersen Cedrik BakkeUnibet Rose Rockets0.1%3.0%n/a––
Abdul Halil Mohamad Izzat HilmiMalaysia Pro Cycling2.7%0.3%n/a––
Aparicio MarioBurgos Burpellet BH0.1%2.5%n/a––
Balderstone AbelCaja Rural-Seguros RGA0.1%2.2%n/a––
Gutiérrez JorgeEquipo Kern Pharma0.1%2.1%n/a––
López MartinXDS Astana Team0.1%2.1%n/a––
Diaz Jose ManuelBurgos Burpellet BH0.1%1.9%n/a––
Gate AaronXDS Astana Team0.9%1.6%n/a––
Rikunov PetrWheeltop Rotor Chengdu Team1.0%1.5%n/a––
de Bod StefanModern Adventure Pro Cycling0.1%1.2%n/a––
Van Den Boer SeppeTudor Pro Cycling Team1.2%1.1%n/a––
Huby Antoine7Eleven Cliqq Roadbike Philippines0.4%1.2%n/a––
Le Berre MathisTeam TotalEnergies0.7%1.2%n/a––
Hoogendoorn RoyTeam Picnic PostNL1.2%1.0%n/a––
Álvarez RodrigoBurgos Burpellet BH1.0%1.0%n/a––
Herreño MartínBardiani-CSF 7 Saber0.1%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 Matteo39.0%38.5%41.2%72.6%86.3%n/a
2Gaviria Fernando15.0%11.1%16.7%36.8%66.9%n/a
3Syritsa Gleb9.9%9.6%10.5%29.0%63.3%n/a
4Cavia Daniel9.0%6.9%10.0%22.5%72.8%n/a
5Pickrell Riley3.2%6.3%2.6%23.7%67.5%n/a
6Abdul Halil Mohamad Izzat Hilmi2.7%2.3%3.0%10.7%47.2%n/a
7Van Den Boer Seppe1.2%1.4%1.3%8.1%51.7%n/a
8Hoogendoorn Roy1.2%1.6%1.1%7.6%46.0%n/a
9Álvarez Rodrigo1.0%1.5%1.0%5.0%55.4%n/a
10Rikunov Petr1.0%1.2%1.0%4.9%47.2%n/a
11Villar Iker0.9%2.3%0.6%8.4%51.3%n/a
12Gate Aaron0.9%1.1%0.9%3.3%26.1%n/a
13Le Berre Mathis0.7%0.4%0.8%6.8%37.8%n/a
14McGill Scott0.7%1.0%0.6%5.3%43.6%n/a
15Mohd Nawawi Muhamad Iqbal Daniel0.7%0.8%0.6%5.0%35.0%n/a
16Jasch Lennart0.6%0.1%0.7%1.9%23.3%n/a
17Cettolin Filippo0.5%1.0%0.4%6.4%65.2%n/a
18Delle Vedove Alessio0.5%0.6%0.5%2.7%30.1%n/a
19Retegi Mikel0.5%0.3%0.5%2.0%34.9%n/a
20Corkery Dillon0.4%0.9%0.3%3.6%32.5%n/a
21Townsend Rory0.4%1.0%0.3%3.5%26.4%n/a
22Huby Antoine0.4%0.4%0.4%1.3%24.6%n/a
23Castellon Jan0.3%0.1%0.4%0.4%6.9%n/a
24Oda Hijiri0.3%0.2%0.3%1.8%27.8%n/a
25Donzé Robin0.3%0.3%0.3%1.0%19.0%n/a
26Meris Sergio0.2%0.2%0.2%1.2%11.4%n/a
27Meisa Ade0.2%0.1%0.2%1.0%23.1%n/a
28Gimeno Nil0.2%0.1%0.2%1.0%21.8%n/a
29Breuillard Nicolas0.2%0.2%0.2%0.8%12.2%n/a
30Stepanov Andrei0.1%0.2%0.1%0.7%9.1%n/a
The other branch — a reduced bunch sprint — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Castellon Jan7.4%3.8%11.3%14.4%65.6%n/a
2Cavia Daniel6.6%6.0%9.5%16.6%34.7%n/a
3Breuillard Nicolas6.1%3.9%9.1%11.0%39.4%n/a
4Malucelli Matteo4.9%10.7%5.5%23.2%32.3%n/a
5Jasch Lennart4.4%3.0%6.5%15.2%65.9%n/a
6Christophersen Cedrik Bakke3.0%1.6%4.6%8.3%45.1%n/a
7Aparicio Mario2.5%2.4%3.5%6.3%29.8%n/a
8Balderstone Abel2.2%3.0%3.0%9.4%54.7%n/a
9Gaviria Fernando2.2%2.5%3.0%7.4%15.3%n/a
10Gutiérrez Jorge2.1%1.6%3.1%5.4%43.5%n/a
11López Martin2.1%3.2%2.7%7.9%36.5%n/a
12Diaz Jose Manuel1.9%2.2%2.6%6.6%51.5%n/a
13Gate Aaron1.6%1.9%2.1%5.1%21.1%n/a
14Rikunov Petr1.5%1.8%2.0%5.4%24.3%n/a
15de Bod Stefan1.2%1.1%1.8%3.7%31.4%n/a
16Huby Antoine1.2%1.9%1.5%4.9%32.2%n/a
17Le Berre Mathis1.2%2.9%1.2%8.2%45.0%n/a
18Van Den Boer Seppe1.1%0.5%1.6%6.4%13.3%n/a
19Herreño Martín1.0%0.8%1.5%3.9%27.2%n/a
20Álvarez Rodrigo1.0%1.1%1.4%3.4%20.7%n/a
21Hoogendoorn Roy1.0%1.2%1.3%3.9%14.8%n/a
22Bregnhøj Mathias0.9%0.6%1.4%2.8%35.0%n/a
23Meris Sergio0.9%0.8%1.2%4.7%23.8%n/a
24Covili Luca0.7%0.3%1.1%1.8%24.8%n/a
25Retegi Mikel0.7%0.2%1.1%1.8%21.4%n/a
26Stepanov Andrei0.6%0.6%0.9%2.5%15.3%n/a
27Syritsa Gleb0.5%0.9%0.6%3.7%10.2%n/a
28Haug Kieran0.5%0.6%0.6%2.1%27.5%n/a
29Donzé Robin0.5%0.2%0.7%2.0%23.8%n/a
30Arriola-Bengoa Julen0.4%0.2%0.6%1.2%12.5%n/a

After the stage

Results — won by Malucelli Matteo

PosRiderTeamMain read win pAlt: res_3 win p
1Malucelli MatteoXDS Astana Team39.0%4.9%
2Pickrell RileyModern Adventure Pro Cycling3.2%0.2%
3van Rees ChristiaanTeam Picnic PostNL0.1%0.1%
4Gaviria FernandoCaja Rural-Seguros RGA15.0%2.2%
5Cettolin FilippoBardiani-CSF 7 Saber0.5%0.1%
6Townsend RoryUnibet Rose Rockets0.4%0.2%
7Le Berre MathisTeam TotalEnergies0.7%1.2%
8Cavia DanielBurgos Burpellet BH9.0%6.6%
9Abdul Halil Mohamad Izzat HilmiMalaysia Pro Cycling2.7%0.3%
10Arifin Muh ImamNusantara Cycling Team0.1%0.0%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Main read39.04%–
Alt: res_34.91%–