Cycling race predictor · Tour de Langkawi

Stage 4 — 2026-09-30

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 100 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.31
hilly0.00
rolling0.68
break0.01
TT0.00
keyed: GC day 0.6 / mountain escape 0.2 / hard puncheur day 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): Castellon Jan 9.5%; Breuillard Nicolas 8.9%; Aparicio Mario 3.8%; Le Berre Mathis 3.5%; Jasch Lennart 3.4%

Alt: res_2

The other branch — a mountain finish decided among a handful
sprint0.00
mountain0.33
hilly0.00
rolling0.66
break0.01
TT0.00
keyed: mountain escape (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): Castellon Jan 11.6%; Breuillard Nicolas 11.3%; Aparicio Mario 4.3%; Jasch Lennart 3.6%; Gaffuri Mattia 3.0%

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 66%, Alt: res_2 68% — 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_2Book oddsBook devigMax edge
Castellon JanCaja Rural-Seguros RGA9.5%11.6%n/a––
Breuillard NicolasTeam TotalEnergies8.9%11.3%n/a––
Aparicio MarioBurgos Burpellet BH3.8%4.3%n/a––
Jasch LennartTudor Pro Cycling Team3.4%3.6%n/a––
Le Berre MathisTeam TotalEnergies3.5%2.2%n/a––
Balderstone AbelCaja Rural-Seguros RGA3.1%2.7%n/a––
Gaffuri MattiaTeam Picnic PostNL2.7%3.0%n/a––
Gutiérrez JorgeEquipo Kern Pharma2.6%2.8%n/a––
Gate AaronXDS Astana Team2.7%2.3%n/a––
Christophersen Cedrik BakkeUnibet Rose Rockets2.3%2.6%n/a––
Cavia DanielBurgos Burpellet BH2.4%2.5%n/a––
López MartinXDS Astana Team1.8%1.8%n/a––
de Bod StefanModern Adventure Pro Cycling1.7%1.4%n/a––
Covili LucaBardiani-CSF 7 Saber1.4%1.6%n/a––
Rikunov PetrWheeltop Rotor Chengdu Team1.1%1.2%n/a––
Diaz Jose ManuelBurgos Burpellet BH1.0%0.9%n/a––
The main read — the day as the key says it goes — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Castellon Jan9.5%7.3%15.0%29.1%81.5%n/a
2Breuillard Nicolas8.9%7.6%13.9%23.5%58.6%n/a
3Aparicio Mario3.8%1.8%6.3%8.1%42.7%n/a
4Le Berre Mathis3.5%5.5%4.8%12.2%59.5%n/a
5Jasch Lennart3.4%2.9%5.4%16.0%67.9%n/a
6Balderstone Abel3.1%6.1%4.0%20.6%66.3%n/a
7Gate Aaron2.7%1.6%4.4%5.9%21.7%n/a
8Gaffuri Mattia2.7%2.3%4.2%11.9%59.2%n/a
9Gutiérrez Jorge2.6%2.4%4.1%9.0%50.6%n/a
10Cavia Daniel2.4%1.5%3.9%5.6%22.1%n/a
11Christophersen Cedrik Bakke2.3%2.1%3.5%7.9%50.5%n/a
12López Martin1.8%2.8%2.5%8.8%33.3%n/a
13de Bod Stefan1.7%2.2%2.5%5.9%30.7%n/a
14Covili Luca1.4%0.4%2.5%2.1%38.7%n/a
15Rikunov Petr1.1%0.8%1.8%4.1%36.9%n/a
16Diaz Jose Manuel1.0%1.1%1.6%7.2%52.9%n/a
17Herreño Martín0.9%1.7%1.2%5.7%43.9%n/a
18Meris Sergio0.9%1.5%1.2%4.4%25.3%n/a
19Huby Antoine0.8%0.8%1.2%2.1%18.7%n/a
20Cruz Martínez Edward0.7%0.7%1.0%2.3%15.7%n/a
21Stepanov Andrei0.6%0.6%0.8%2.4%18.0%n/a
22Bregnhøj Mathias0.5%0.3%0.8%4.4%35.7%n/a
23Burnett Josh0.5%0.8%0.6%3.1%21.7%n/a
24Arriola-Bengoa Julen0.4%0.3%0.7%1.3%10.1%n/a
25Donzé Robin0.4%0.3%0.7%1.5%14.5%n/a
26Retegi Mikel0.4%0.3%0.7%1.5%16.9%n/a
27Whitehouse Daniel0.4%0.3%0.5%1.9%12.8%n/a
28Fougner Eivind Broholt0.3%1.5%0.2%3.1%19.5%n/a
29Caicedo Jonathan0.3%0.4%0.5%1.4%15.1%n/a
30Milostic Lindon0.3%0.3%0.5%1.7%26.7%n/a
The other branch — a mountain finish decided among a handful — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Castellon Jan11.6%8.5%17.8%35.7%86.7%n/a
2Breuillard Nicolas11.3%11.1%16.7%31.9%70.7%n/a
3Aparicio Mario4.3%2.1%6.9%8.9%48.9%n/a
4Jasch Lennart3.6%3.3%5.4%17.7%75.5%n/a
5Gaffuri Mattia3.0%2.6%4.5%14.2%70.3%n/a
6Gutiérrez Jorge2.8%2.9%4.1%10.5%59.9%n/a
7Balderstone Abel2.7%5.2%3.3%21.2%73.5%n/a
8Christophersen Cedrik Bakke2.6%2.4%3.9%9.3%61.4%n/a
9Cavia Daniel2.5%1.4%4.0%5.0%20.0%n/a
10Gate Aaron2.3%1.0%3.7%3.8%18.2%n/a
11Le Berre Mathis2.2%4.3%2.6%9.4%55.3%n/a
12López Martin1.8%2.4%2.5%9.1%34.4%n/a
13Covili Luca1.6%0.7%2.6%4.3%48.8%n/a
14de Bod Stefan1.4%1.3%2.1%4.2%30.1%n/a
15Rikunov Petr1.2%1.0%1.7%4.3%39.1%n/a
16Herreño Martín1.0%1.7%1.2%5.5%49.5%n/a
17Diaz Jose Manuel0.9%1.0%1.4%7.3%60.5%n/a
18Meris Sergio0.9%1.3%1.2%4.0%23.6%n/a
19Cruz Martínez Edward0.8%1.3%1.0%4.3%34.5%n/a
20Stepanov Andrei0.6%0.7%0.8%2.5%19.0%n/a
21Bregnhøj Mathias0.5%0.5%0.8%3.2%40.4%n/a
22Huby Antoine0.5%0.6%0.7%1.6%17.0%n/a
23Burnett Josh0.5%0.8%0.7%3.8%31.3%n/a
24Arriola-Bengoa Julen0.5%0.2%0.8%1.2%10.6%n/a
25Fougner Eivind Broholt0.4%2.1%0.2%3.8%22.5%n/a
26Donzé Robin0.4%0.4%0.6%1.2%14.4%n/a
27Milostic Lindon0.4%0.5%0.6%2.5%33.7%n/a
28Caicedo Jonathan0.3%0.3%0.5%1.2%17.3%n/a
29Whitehouse Daniel0.3%0.4%0.5%2.0%14.2%n/a
30Retegi Mikel0.3%0.3%0.4%1.1%12.9%n/a

After the stage

Results — won by Rikunov Petr

PosRiderTeamMain read win pAlt: res_2 win p
1Rikunov PetrWheeltop Rotor Chengdu Team1.1%1.2%
2Ibanez JavierCaja Rural-Seguros RGA0.0%0.0%
3Jousseaume AlanTeam TotalEnergies0.3%0.3%
4Gimeno NilEquipo Kern Pharma0.2%0.1%
5Le Berre MathisTeam TotalEnergies3.5%2.2%
6Bregnhøj MathiasTerengganu Cycling Team0.5%0.5%
7Retegi MikelEQUIPO KERN PHARMA0.4%0.3%
8Christophersen Cedrik BakkeUnibet Rose Rockets2.3%2.6%
9Jasch LennartTUDOR PRO CYCLING TEAM3.4%3.6%
10Covili LucaBardiani-CSF 7 Saber1.4%1.6%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Main read1.14%–
Alt: res_21.16%–