Judging Climbing Performance

Judging climbing performance is all about how much separation you can get on your rivals. It’s a function of 1) avoiding getting dropped by the initial pace-making, 2) avoiding getting dropped by attacks/responses to attacks, and 3) being able to launch attacks of your own.

Some stages will – because of the tactical games being played or overall strategic situation – not lead to large time gaps. For example, in stages 11 and 12 of the 2018 Tour de France, Thomas, Froome, and Dumoulin were the strongest riders but with Dumoulin content to follow any attacks and Froome unwilling to attack Thomas’s lead, the three riders were separated by just 24 seconds after 284km and two HC summit finishes. There were 10 and 11 riders within a minute of Thomas on those stages.

However, some stages produce enormous gaps. Chris Froome’s raid in Stage 19 of the 2018 Giro yielded enormous gains – 3 minutes on 2nd place in the stage and over 8 minutes on 10th position.

What we do see is a linear relationship between the difficulty of the climbing on a stage and the time gained by the winner. The stage winner on the toughest mountain stages is expected to gain over 1 second/KM on 10th place compared to just 0.5 seconds/KM on 10th place on the easier mountain stages.


This is expected. Take Stage 5 in the 2017 Tour which finished at La Planche de Belles Filles with little climbing prior. Fabio Aru took 24 seconds on Bardet in 5th, 40 seconds on 10th, and 73 seconds on 20th. Divided by the 160km stage he took just 0.15 seconds/KM on 5th, 0.25 seconds/KM on 10th, and 0.45 seconds/KM on 20th.

Compare that stage to Stage 16 in the 2014 Giro which featured three HC-level climbs including Passo Stelvio. Quintana won narrowly over Hesjedal, but took 217 seconds on 5th, 288 seconds on 10th, and 688 seconds on 20th. Over 140km stage, that’s 1.55 seconds/KM on 5th, 2.1 seconds/KM on 10th, and 4.9 seconds/KM on 20th.

Huge amounts of climbing don’t necessarily equal big time gaps (this goes back to tactics, race situation, etc), but the difficulty of the climbing on a stage is a crucial part of judging how decisive it will be.

Incorporating climbing difficulty

This post discusses the method for judging the difficulty of climbing on a stage. This model assigns a point value to each climb (0.5 for the weakest category 4 climbs and over 20 for the toughest HC climbs) based on the average gradient, length of climb, and summit elevation. We add those values together to generate the climbing difficulty for a stage (doubling summit finish climbs). This yields a spread between about 15 and 70 for the difficulty of climbing stages.

From the post of judging performance in time trials we developed a method to estimate performance which was simply time in seconds gained per KM on the 10th place man on that stage. We can develop a similar model to estimate climbing performance. Only for this model instead of using the length of the stage we’ll use the difficulty of the climbing on that stage.

Above we showed the impact of climbing difficulty in terms of seconds/KM, but in reality the length of the stage has no impact on how much time is likely to be gained; it’s solely a matter of the climbing difficulty for mountain stages.


The two shortest stages in the data-set are the 2018 TDF stage 17 and a shortened Tour de Suisse stage in 2016. The TDF stage saw a climbing difficulty of 60, while the Swiss stage saw a climbing difficulty of 15. The 60 difficulty stage saw twice the gains of the 15 difficulty stage (121 vs 56 seconds).

Similarly, difficulty of climbing is what separates the gains on the two longest stages – Stage 4 of 2014 Tirreno-Adriatico (244km) and Stage 15 to Mont Ventoux in the 2013 TDF (242.5km). The climbing difficulty in T-A was 28 vs 45 to Mont Ventoux. The gains on 10th place were 17 seconds in T-A and 128 by Froome in the TDF.

The impact of 1 point tougher climbing is about 3 seconds of time gained by the winner on 10th place such that the winner would be expected to gain 45 seconds in a weak mountain stage and 220 seconds in the toughest mountain stage.

We use this method to adjust climbing performance to measure the actual gains vs potential gains so what we’re really interested in is building a linear model to find the impact of climbing difficulty on the actual gains divided by 80.5 (the median gains on a mountain stage). This yields an adjustment factor.

lm((actual_gains / 80.5) ~ climbing_difficulty)

adjustment_factor = (climbing_difficulty * 0.0393) - 0.04

modeled_gain = (actual_gains) / adjustment_factor

For a 15 difficulty stage this adjustment factor would be 0.55 and for a 70 difficulty stage this adjustment factor would be 2.71. To find Climb Gains we divide the gains on 10th place by this adjustment factor such that a 15 difficulty stage where 60 seconds were gained would be modeled as a gain of 109 seconds and a 70 difficulty stage where 60 seconds were gained would be modeled as a gain of 22 seconds. The metric is seconds gained per point of climbing difficulty.

Going back to Froome’s Stage 19 raid in the 2018 Giro, it rates out at 4.2 – one of the strongest stage wins of the year -while Thomas’s Stage 11/12 wins are more steady results – 0.3 and 0.5 – two of the weaker victories. However, those efforts are exactly what is needed to win grand tours. Since 2013, the median mountain stage by a GC winner has rated out at between 0.3 and 0.4. Put six of those together and you’ve probably won the race.

Further work

There’s still potential work to be done refining how to measure gains. Eg, measuring gains off of 10th place was chosen because it was close to the average finish position of the GC winner in grand tour mountain stages (8th), but it’s possible an ensemble metric considering gains on 3rd, 5th, 10th, 20th, etc could lead to better results.

Going along with that is factoring in the impact of breakaways. For example, in the 2018 Tour de France on Stage 16 the yellow jersey group with Thomas, Froome, Dumoulin, and the other contenders finished nearly 9 minutes back of the stage winner and 8 minutes back of 10th place because 20 riders stayed away in the break all day. This meant Geraint Thomas’s gains on 10th place in the six mountain stages were 0, 12, 53, 59, 74, and -454! In the same way, Julian Alaphilippe gained 78 and 203 seconds in the stages he won and lost 726, 1077, 1432, and 1698 seconds in the other mountain stages.

It’s possible to account for this by taking the median performance or top 75% of performances, but it’s not a perfect situation and one where there’s no obvious (programmable) solution which works consistently.

Motivation is another factor not captured here – in two different ways. First, GC contenders will often not race competitively when targeting grand tour wins. Eg, look at some of Armstrong’s early season results where he’s content to just get some racing in his legs or Froome’s results this year (where he finished 17-97-146-148 in the four mountain stages before the Dauphine). Again, we can account for that by taking just the top 75% of results, but it’s not a perfect situation.

At the same time, motivation/race strategy might mean a certain rider is content just to hold the wheel in certain stages (either in preparation for or recovery from a big effort) and won’t search out time gaps even if they theoretically had the power to do so.

Some of these items could be reasonably accounted for, others are unavoidable results of attempting to judge performance from stage results (a blunt tool when compared to the sharp edge available to teams with power meters and other data).

Best Climbers

The full list of top climbers will come out prior to Stage 6 to La Planche de Belles Filles.

2 thoughts on “Judging Climbing Performance

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s