The same production stack priced under 4 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.
The fork
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.
The board
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 Bunch sprint 85%, Wind thins it 98%, Hindsight (post-hoc) 92% — 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.
| Rider | Team | Bunch sprint | Wind thins it | Break survives | Hindsight (post-hoc) | Book odds | Book devig | Max edge |
|---|---|---|---|---|---|---|---|---|
| Brennan Matthew | Team Visma | Lease a Bike | 50.9% | 49.3% | 0.7% | 56.0% | 1.85 | 36.2% | +19.8pp |
| van Aert Wout | Team Visma | Lease a Bike | 6.4% | 13.7% | 3.4% | 10.0% | 8.00 | 8.4% | +5.3pp |
| Meeus Jordi | Red Bull-BORA-hansgrohe | 9.0% | 12.2% | 0.1% | 9.9% | 7.00 | 9.6% | +2.6pp |
| De Schuyteneer Steffen | Lotto-Intermarché | 2.7% | 2.3% | 0.1% | 1.3% | 41.00 | 1.6% | +1.1pp |
| Coquard Bryan | Cofidis | 2.0% | 2.7% | 0.1% | 1.7% | 9.00 | 7.4% | -4.8pp |
| Romele Alessandro | XDS Astana Team | 1.1% | 1.7% | 0.2% | 1.1% | 26.00 | 2.6% | -0.8pp |
| Dainese Alberto | Soudal Quick-Step | 1.7% | 0.8% | 0.0% | 0.5% | 41.00 | 1.6% | +0.1pp |
| Hofstetter Hugo | NSN Cycling Team | 1.0% | 1.2% | 0.1% | 0.9% | 41.00 | 1.6% | -0.4pp |
| Cort Magnus | Uno-X Mobility | 0.5% | 1.1% | 0.3% | 0.7% | 19.00 | 3.5% | -2.4pp |
| Laurance Axel | Netcompany INEOS | 0.8% | 1.1% | 1.8% | 0.9% | 67.00 | 1.0% | +0.1pp |
| Brustenga Marc | Equipo Kern Pharma | 1.1% | 0.3% | 0.0% | 0.3% | 126.00 | 0.5% | +0.5pp |
| Aular Orluis | Movistar Team | 0.9% | 1.1% | 0.3% | 0.5% | 81.00 | 0.8% | +0.2pp |
| Albanese Vincenzo | EF Education-EasyPost | 0.4% | 1.0% | 0.3% | 0.6% | 101.00 | 0.7% | +0.4pp |
| # | Rider | Blend | Cascade | LambdaRank | Podium | Top 15 | Book odds |
|---|---|---|---|---|---|---|---|
| 1 | Brennan Matthew | 50.9% | 39.9% | 62.8% | 67.2% | 86.8% | 1.85 |
| 2 | Meeus Jordi | 9.0% | 10.9% | 10.1% | 35.1% | 78.3% | 7.00 |
| 3 | van Aert Wout | 6.4% | 4.2% | 8.1% | 21.9% | 62.0% | 8.00 |
| 4 | De Schuyteneer Steffen | 2.7% | 2.4% | 3.3% | 9.1% | 63.2% | 41.00 |
| 5 | Coquard Bryan | 2.0% | 2.2% | 2.3% | 7.7% | 80.6% | 9.00 |
| 6 | Dainese Alberto | 1.7% | 1.5% | 2.1% | 8.9% | 50.8% | 41.00 |
| 7 | Romele Alessandro | 1.1% | 3.8% | 0.7% | 11.2% | 65.1% | 26.00 |
| 8 | Brustenga Marc | 1.1% | 1.0% | 1.3% | 7.0% | 50.9% | 126.00 |
| 9 | Hofstetter Hugo | 1.0% | 1.2% | 1.1% | 8.0% | 78.9% | 41.00 |
| 10 | Aular Orluis | 0.9% | 0.6% | 1.2% | 6.1% | 67.5% | 81.00 |
| 11 | Laurance Axel | 0.8% | 2.3% | 0.6% | 7.8% | 47.6% | 67.00 |
| 12 | Nys Thibau | 0.7% | 2.3% | 0.5% | 7.3% | 45.3% | 41.00 |
| 13 | Tronchon Bastien | 0.7% | 1.6% | 0.6% | 8.2% | 63.2% | 41.00 |
| 14 | Govekar Matevz | 0.7% | 1.5% | 0.6% | 8.6% | 53.2% | 101.00 |
| 15 | Braet Vito | 0.6% | 1.1% | 0.6% | 6.1% | 61.7% | 101.00 |
| 16 | Miquel Delgado Pau | 0.5% | 1.2% | 0.4% | 4.8% | 52.2% | 101.00 |
| 17 | Macias Cesar | 0.5% | 0.7% | 0.5% | 5.5% | 57.9% | 201.00 |
| 18 | Cort Magnus | 0.5% | 1.3% | 0.4% | 6.7% | 55.2% | 19.00 |
| 19 | Renard Alexis | 0.4% | 1.1% | 0.3% | 4.6% | 48.6% | 151.00 |
| 20 | Albanese Vincenzo | 0.4% | 0.2% | 0.5% | 2.9% | 57.2% | 101.00 |
| 21 | Canal Carlos | 0.2% | 0.2% | 0.3% | 2.0% | 19.0% | 401.00 |
| 22 | Oliveira Ivo | 0.2% | 0.2% | 0.2% | 3.0% | 26.0% | 81.00 |
| 23 | Camprubí Marcel | 0.1% | 0.1% | 0.1% | 2.3% | 35.7% | 201.00 |
| 24 | Mulubrhan Henok | 0.1% | 0.1% | 0.1% | 1.5% | 16.7% | 151.00 |
| 25 | Garofoli Gianmarco | 0.1% | 0.1% | 0.1% | 0.8% | 9.3% | 401.00 |
| 26 | Debruyne Ramses | 0.1% | 0.1% | 0.1% | 0.8% | 12.2% | 201.00 |
| 27 | Brenner Marco | 0.1% | 0.2% | 0.1% | 1.4% | 8.4% | n/a |
| 28 | Vader Milan | 0.1% | 0.1% | 0.1% | 0.8% | 17.8% | 601.00 |
| 29 | Fedorov Yevgeniy | 0.1% | 0.2% | 0.0% | 0.6% | 17.6% | 301.00 |
| 30 | Hayter Ethan | 0.1% | 0.3% | 0.0% | 1.7% | 15.9% | 151.00 |
| # | Rider | Blend | Cascade | LambdaRank | Podium | Top 15 | Book odds |
|---|---|---|---|---|---|---|---|
| 1 | Brennan Matthew | 49.3% | 41.9% | 52.4% | 67.9% | 87.4% | 1.85 |
| 2 | van Aert Wout | 13.7% | 6.1% | 15.9% | 37.3% | 69.4% | 8.00 |
| 3 | Meeus Jordi | 12.2% | 12.7% | 12.3% | 35.9% | 74.1% | 7.00 |
| 4 | Coquard Bryan | 2.7% | 3.5% | 2.5% | 11.3% | 78.0% | 9.00 |
| 5 | De Schuyteneer Steffen | 2.3% | 2.1% | 2.4% | 7.6% | 59.8% | 41.00 |
| 6 | Romele Alessandro | 1.7% | 5.7% | 0.8% | 14.3% | 59.1% | 26.00 |
| 7 | Hofstetter Hugo | 1.2% | 1.8% | 1.1% | 8.7% | 73.4% | 41.00 |
| 8 | Cort Magnus | 1.1% | 2.0% | 0.9% | 14.0% | 56.6% | 19.00 |
| 9 | Laurance Axel | 1.1% | 2.4% | 0.8% | 9.2% | 49.2% | 67.00 |
| 10 | Aular Orluis | 1.1% | 0.7% | 1.2% | 7.1% | 61.5% | 81.00 |
| 11 | Albanese Vincenzo | 1.0% | 1.5% | 0.9% | 10.2% | 65.1% | 101.00 |
| 12 | Nys Thibau | 1.0% | 2.7% | 0.6% | 9.2% | 44.4% | 41.00 |
| 13 | Braet Vito | 0.9% | 1.5% | 0.8% | 7.9% | 57.8% | 101.00 |
| 14 | Dainese Alberto | 0.8% | 1.6% | 0.7% | 7.9% | 47.3% | 41.00 |
| 15 | Tronchon Bastien | 0.8% | 1.8% | 0.6% | 8.8% | 54.4% | 41.00 |
| 16 | Govekar Matevz | 0.8% | 1.7% | 0.6% | 8.9% | 45.4% | 101.00 |
| 17 | Miquel Delgado Pau | 0.6% | 1.2% | 0.5% | 5.1% | 52.5% | 101.00 |
| 18 | Canal Carlos | 0.4% | 0.2% | 0.5% | 3.2% | 20.6% | 401.00 |
| 19 | Debruyne Ramses | 0.4% | 0.3% | 0.5% | 3.7% | 19.5% | 201.00 |
| 20 | Renard Alexis | 0.3% | 0.1% | 0.4% | 2.3% | 39.9% | 151.00 |
| 21 | Brustenga Marc | 0.3% | 0.3% | 0.3% | 3.3% | 59.3% | 126.00 |
| 22 | Mulubrhan Henok | 0.2% | 0.2% | 0.3% | 2.2% | 19.8% | 151.00 |
| 23 | Hayter Ethan | 0.2% | 1.0% | 0.0% | 2.4% | 11.9% | 151.00 |
| 24 | Fisher-Black Finn | 0.2% | 0.2% | 0.2% | 2.6% | 13.8% | 151.00 |
| 25 | Camprubí Marcel | 0.2% | 0.2% | 0.2% | 2.8% | 27.9% | 201.00 |
| 26 | Brenner Marco | 0.2% | 0.3% | 0.2% | 2.4% | 13.3% | n/a |
| 27 | Oliveira Ivo | 0.2% | 0.2% | 0.2% | 2.8% | 21.9% | 81.00 |
| 28 | Macias Cesar | 0.2% | 0.1% | 0.2% | 1.6% | 43.9% | 201.00 |
| 29 | Cobo Ivan | 0.1% | 0.1% | 0.1% | 1.4% | 12.7% | 301.00 |
| 30 | Garofoli Gianmarco | 0.1% | 0.1% | 0.1% | 1.0% | 15.2% | 401.00 |
| # | Rider | Blend | Cascade | LambdaRank | Podium | Top 15 | Book odds |
|---|---|---|---|---|---|---|---|
| 1 | Bisiaux Léo | 3.1% | 2.5% | 4.7% | 7.9% | 39.2% | 501.00 |
| 2 | Johannessen Tobias Halland | 2.6% | 3.2% | 3.7% | 10.4% | 37.8% | 201.00 |
| 3 | Buitrago Santiago | 2.3% | 1.9% | 3.4% | 6.3% | 21.6% | 801.00 |
| 4 | Debruyne Ramses | 2.1% | 5.8% | 2.2% | 12.6% | 38.0% | 201.00 |
| 5 | Tejada Harold | 1.9% | 2.7% | 2.6% | 7.3% | 36.6% | 801.00 |
| 6 | Widar Jarno | 1.9% | 1.5% | 2.8% | 6.4% | 37.5% | 501.00 |
| 7 | van Aert Wout | 1.8% | 3.1% | 2.3% | 12.2% | 23.3% | 8.00 |
| 8 | Vermaerke Kevin | 1.7% | 1.7% | 2.5% | 6.4% | 26.5% | 126.00 |
| 9 | Riccitello Matthew | 1.5% | 1.2% | 2.3% | 3.1% | 20.0% | n/a |
| 10 | Zana Filippo | 1.4% | 1.6% | 2.1% | 5.6% | 25.8% | 601.00 |
| 11 | Romeo Ivan | 1.4% | 1.8% | 1.9% | 2.8% | 7.9% | 101.00 |
| 12 | Brenner Marco | 1.3% | 2.1% | 1.7% | 6.8% | 18.1% | n/a |
| 13 | Paret-Peintre Valentin | 1.2% | 1.9% | 1.6% | 6.2% | 23.4% | 501.00 |
| 14 | Tuckwell Luke | 1.1% | 0.4% | 1.8% | 3.4% | 12.3% | 1001.00 |
| 15 | Fisher-Black Finn | 1.0% | 1.9% | 1.3% | 5.3% | 14.6% | 151.00 |
| 16 | Vansevenant Mauri | 1.0% | 1.2% | 1.5% | 4.7% | 19.0% | 801.00 |
| 17 | Almeida Joao | 1.0% | 1.4% | 1.4% | 4.0% | 18.1% | 801.00 |
| 18 | Laurance Axel | 1.0% | 1.9% | 1.1% | 5.5% | 16.6% | 67.00 |
| 19 | Leknessund Andreas | 0.9% | 0.4% | 1.5% | 6.6% | 15.2% | 101.00 |
| 20 | Nys Thibau | 0.9% | 2.5% | 1.0% | 6.4% | 18.0% | 41.00 |
| 21 | Berrade Urko | 0.9% | 1.4% | 1.2% | 6.4% | 24.9% | 401.00 |
| 22 | Rodriguez Carlos | 0.9% | 0.6% | 1.4% | 2.3% | 10.2% | n/a |
| 23 | Svestad-Bårdseng Embret | 0.8% | 0.5% | 1.2% | 2.0% | 11.8% | n/a |
| 24 | Nordhagen Jørgen | 0.8% | 1.2% | 1.1% | 6.8% | 19.1% | 801.00 |
| 25 | Kron Andreas | 0.8% | 0.4% | 1.2% | 2.0% | 14.1% | 101.00 |
| 26 | Castrillo Pablo | 0.8% | 0.4% | 1.2% | 0.9% | 4.1% | 401.00 |
| 27 | Martin Guillaume | 0.8% | 0.2% | 1.2% | 1.6% | 14.0% | 801.00 |
| 28 | Mulubrhan Henok | 0.7% | 0.4% | 1.1% | 3.0% | 14.7% | 151.00 |
| 29 | Bilbao Pello | 0.7% | 1.3% | 0.8% | 3.7% | 17.8% | 501.00 |
| 30 | Dunbar Edward | 0.7% | 1.5% | 0.8% | 5.4% | 24.0% | n/a |
| # | Rider | Blend | Cascade | LambdaRank | Podium | Top 15 | Book odds |
|---|---|---|---|---|---|---|---|
| 1 | Brennan Matthew | 56.0% | 42.6% | 64.0% | 69.3% | 85.8% | 1.85 |
| 2 | van Aert Wout | 10.0% | 4.9% | 12.1% | 30.1% | 62.9% | 8.00 |
| 3 | Meeus Jordi | 9.9% | 11.5% | 10.3% | 36.8% | 72.7% | 7.00 |
| 4 | Coquard Bryan | 1.7% | 2.7% | 1.6% | 9.3% | 71.3% | 9.00 |
| 5 | De Schuyteneer Steffen | 1.3% | 1.5% | 1.4% | 6.2% | 52.4% | 41.00 |
| 6 | Romele Alessandro | 1.1% | 3.8% | 0.5% | 8.9% | 52.7% | 26.00 |
| 7 | Hofstetter Hugo | 0.9% | 1.4% | 0.8% | 9.2% | 69.5% | 41.00 |
| 8 | Laurance Axel | 0.9% | 2.2% | 0.6% | 8.1% | 47.5% | 67.00 |
| 9 | Nys Thibau | 0.8% | 2.4% | 0.5% | 8.0% | 42.1% | 41.00 |
| 10 | Cort Magnus | 0.7% | 1.6% | 0.5% | 8.3% | 50.1% | 19.00 |
| 11 | Govekar Matevz | 0.6% | 1.7% | 0.4% | 8.0% | 42.8% | 101.00 |
| 12 | Albanese Vincenzo | 0.6% | 1.1% | 0.6% | 6.6% | 59.2% | 101.00 |
| 13 | Braet Vito | 0.6% | 1.1% | 0.5% | 6.2% | 52.2% | 101.00 |
| 14 | Tronchon Bastien | 0.6% | 1.6% | 0.4% | 6.8% | 51.6% | 41.00 |
| 15 | Aular Orluis | 0.5% | 0.5% | 0.6% | 8.9% | 63.5% | 81.00 |
| 16 | Dainese Alberto | 0.5% | 1.1% | 0.4% | 6.6% | 44.1% | 41.00 |
| 17 | Miquel Delgado Pau | 0.5% | 1.1% | 0.4% | 4.3% | 50.2% | 101.00 |
| 18 | Renard Alexis | 0.4% | 1.1% | 0.3% | 4.2% | 49.5% | 151.00 |
| 19 | Canal Carlos | 0.4% | 0.4% | 0.4% | 3.0% | 21.6% | 401.00 |
| 20 | Brustenga Marc | 0.3% | 0.5% | 0.3% | 6.9% | 55.5% | 126.00 |
| 21 | Hayter Ethan | 0.3% | 1.5% | 0.0% | 3.6% | 14.7% | 151.00 |
| 22 | Debruyne Ramses | 0.3% | 0.3% | 0.3% | 3.8% | 20.4% | 201.00 |
| 23 | Mulubrhan Henok | 0.2% | 0.3% | 0.3% | 3.2% | 20.6% | 151.00 |
| 24 | Macias Cesar | 0.2% | 0.2% | 0.2% | 2.7% | 46.5% | 201.00 |
| 25 | Camprubí Marcel | 0.2% | 0.2% | 0.2% | 3.2% | 31.8% | 201.00 |
| 26 | Oliveira Ivo | 0.2% | 0.2% | 0.1% | 3.5% | 25.6% | 81.00 |
| 27 | Brenner Marco | 0.1% | 0.3% | 0.1% | 3.5% | 15.9% | n/a |
| 28 | Covi Alessandro | 0.1% | 0.1% | 0.1% | 1.5% | 12.3% | 201.00 |
| 29 | Fisher-Black Finn | 0.1% | 0.2% | 0.1% | 2.7% | 14.8% | 151.00 |
| 30 | Küng Stefan | 0.1% | 0.2% | 0.1% | 1.0% | 10.8% | 101.00 |
After the stage
| Pos | Rider | Team | Bunch sprint win p | Wind thins it win p | Break survives win p | Hindsight (post-hoc) win p |
|---|---|---|---|---|---|---|
| 1 | Brennan Matthew | Team Visma | Lease a Bike | 50.9% | 49.3% | 0.4% | 56.0% |
| 2 | Coquard Bryan | Cofidis | 2.0% | 2.7% | 0.0% | 1.7% |
| 3 | Braet Vito | Lotto-Intermarché | 0.6% | 0.9% | 0.0% | 0.6% |
| 4 | Meeus Jordi | Red Bull-BORA-hansgrohe | 9.0% | 12.2% | 0.0% | 9.9% |
| 5 | Cort Magnus | Uno-X Mobility | 0.5% | 1.1% | 0.2% | 0.7% |
| 6 | van Aert Wout | Team Visma | Lease a Bike | 6.4% | 13.7% | 1.8% | 10.0% |
| 7 | Hofstetter Hugo | NSN Cycling Team | 1.0% | 1.2% | 0.0% | 0.9% |
| 8 | Albanese Vincenzo | EF Education-EasyPost | 0.4% | 1.0% | 0.2% | 0.6% |
| 9 | Dainese Alberto | Soudal Quick-Step | 1.7% | 0.8% | 0.0% | 0.5% |
| 10 | Macias Cesar | Burgos Burpellet BH | 0.5% | 0.2% | 0.0% | 0.2% |
| Scenario | Blend win p | Book devig |
|---|---|---|
| Bunch sprint | 50.89% | 36.20% |
| Wind thins it | 49.34% | 36.20% |
| Break survives | 0.36% | 36.20% |
| Hindsight (post-hoc) | 56.03% | 36.20% |
Reflection
The road chose the official branch cleanly. Matthew Brennan won from Bryan Coquard and Vito Braet, with 102 riders — 68% of the surviving field — credited on the winner's time. The oracle therefore labelled the day bunch. Our official key of bunch 0.55 / res_3 0.30 / res_1 0.15 was exact and covered with 0.55 on the truth; the independent agent key was also exact, with 0.60 on bunch. This was not a boundary call like stage 2: the group was five times the menu's 20% bunch threshold.
The main board also got the winner right. Brennan was first on the published bunch board at 62.8% on the book-preserving head, versus 36.2% after removing the market margin; the wind-thins-it board still had him first at 52.4%. Meeus was second on both boards and finished fourth, while Coquard rose from seventh on the bunch board to fourth on the wind board and finished second. The model's strongest disagreement with the market — that Brennan was even more dominant than 1.85 implied — went the right way.
What did not happen matters for the carry-forward. The early hills, depleted trains and estuary wind neither reduced the winning group nor opened the door to the escape. Stage 15's lesson remains specific: Visma could choose van Aert when a late climb supplied a launchpad. Here ninety flat kilometres after the last rise left the peloton time and road to organise, and Visma chose Brennan. The chase-incentive test works when paired with a real launch point; team optionality alone is not enough to move a flat day out of the sprint family.
The classification did not move: Mas still leads Gall by 2:06 and Roglic by 2:10, with Carapaz at 4:24. Timo Roosen was the only new abandon, leaving 149 riders. Stage 17 is flatter again — Dos Hermanas to Sevilla, 185 km, no meaningful climbs — so bunch is the mechanical macro read. The live risk is weather rather than terrain: extreme heat could shorten the course and strong winds could make the approach nervous, but neither is a reason to hedge the official day key away from bunch before there is an announced route change.