# What method or algorithm is used for computing power curve on Strava?

Many cycling analytics apps like Strava, TrainingPeaks or GoldenCheetah are offering the critical power curve chart, computed from the power meter data.

I'm familiar with the curve meaning and usage, but I'm curious how the curve is computed from the time series. I guess it is a more general statistical method, but my search for the literature with method description was not successful so far.

• Probably based on Monod and Scherrer 's circa 1965 paper ( tandfonline.com/doi/abs/10.1080/00140136508930810#.UyR2_61_vTM ) with proprietary tweaks to make it 'More accurate' Feb 22, 2019 at 1:50
• @mattnz Golden Cheetah does use Monod and Scherrer, but also a couple of alternatives. Nothing in GC is proprietary -- it's all open source so you can, if you wish, examine the source code to determine the algorithms used to derive CP, "extended CP", and W'. Feb 22, 2019 at 3:30
• A cynical voice beside me says "RNGesus".... (funny)
– Criggie
Feb 22, 2019 at 5:39
• @Criggie And here I thought Strava power numbers were generated using the renowned "PDOMA" methodology. Feb 22, 2019 at 10:33
• Thank you @R.Chung - looks like this is the best advice so far. I'm not very good in C++ but will see. Feb 22, 2019 at 13:25

From Strava Support:

The Power Curve shows your best average power for time periods of 1 second up to the length of your ride. We search your entire ride and find these best efforts and you can compare them with your best efforts for your last 6 weeks, the current year, years in the past, or all-time!

As you are already aware, your critical power (CP) is the maximal power you can sustain without fatigue for a very long period of time. CP is also sometimes defined as the maximal power produced over a finite time period (e.g., CP30 would be the maximal power you can sustain for 30 minutes). The Strava power curve therefore gives a variety of CP values across an array of duration intervals.

In the past might have been done with lab experiments (e.g., you warm up, then do a maximal effort on a bike ergometer or on a power meter equipped bike for a series of set durations), where you would then infer intermediate points based on some type of interpolation or statistical model (e.g., Monod-Scherrer).

With continuous performance tracking (i.e., bike computer + power meter) this can be done empirically by querying all data within a ride or over a period of time (e.g., last 6 weeks) to determine the maximal power over a set of differing time intervals. These independent queries are then used to build the power curve displayed.

The Strava Power curve, is therefore an empirical curve based on cherry picking your best efforts for a series of durations, dependent on context (i.e., current ride or past effort(s)).

If you never put in a hard effort for a given duration in your ride, or in the past, then the empirical curve will underrepresent (i.e., biased low) your actualized potential if you were to do a real maximal effort. That said, if you didn't put in an maximal effort over a given duration (e.g., a 5 minute interval) you will clearly see it in the power curve associated with the ride, as the curve at the 5 minute mark will be lower than your historical best.

### What About Statistical Model Fitting?

Another possible way to generate the curve is to assume that the true power curve of the athlete (what you would like to estimate) follows a particular mathematical form (i.e., parametric) and estimate the parameters associated with that mathematical curve based on your observed values and some sort of objective function (i.e., likelihood). The problem with this approach is that you have to get the form of the latent curve correct, which can be difficult as people do not have uniform abilities across differing timescales.

For example, some athletes may have very strong short-duration power (e.g., 30 second CP), but lousy long-duration (e.g., CP60, otherwise known as functional power threshold [FTP]). As such correct form of the parametric curve will depend on the athlete, making a generalized fit routine problematic.

There are of course other alternatives that are more flexible with regards to the shape of the curve. Some of these include fitting splines, general additive models, or kernal smoothing. These are all computationally expensive and come with their own set of assumptions and drawbacks.

Given the volume of available data, an empirically based curve is simpler and likely more robust. You typically start fitting parametric statistical models when you are more data starved and each individual data point is more trustworthy.

• The Monod-Scherrer model isn't all that hard. It just says there are two parameters: CP and W', and they represent the slope and intercept of work with time. So Strava would look back over the last 6 weeks, calculate max Joules for each duration of time, fit a simple regression, and get the slope and intercept. In Monod-Scherrer, there's no such thing as CP0.5, or CP30, or CP60, there's just slope and intercept. Feb 22, 2019 at 23:35
• @R.Chung - as you point out the Monod-Scherrer requires CP (power that can be sustained without fatigue for a very long period of time) which many athletes on Strava may not have experienced, making the implementation problematic. Additionally, very short durations produce predictions of infinitely high rates, and long durations produce predictions of infinitely sustainable rates (Morton, 2006). I think the empirical curve is a good work around, as it bases each point on actual real-world performances, rather than an interpolation. Feb 22, 2019 at 23:53
• To be fair, few methods are robust to crappy data. If the MMP is not a true MMP, the slope and intercept won't be right. I'm also pretty sure that Monod-Scherrer specify that you shouldn't use observations of less than a few minutes or longer than an hour or so to fit CP and W' -- that is, you don't use 5 second power, and you don't use 5 hour power. Between a few minutes and an hour or so, the relationship between Joules and time is pretty linear, which is why Monod CP works as well as it does. (Monod W' is less well-estimated than Monod CP.) Feb 23, 2019 at 0:13
• @R.Chung the universal truth: garbage in... garbage out! One place were I appreciate the empirical curve is it clearly shows on what time scales you put in your maximal efforts, and at what time scales you did not. Any place were power curve from the ride substantially falls off the historical power curve is a good indicator that you had a sub optimal effort there (which isn't necessarily a bad thing). A hyperbolic curve like the Monod-Scherrer (or any parametric curve) has as a set form, and as such will not show these types of deviations. Feb 23, 2019 at 0:26
• Tangential question, which may be of some interest: bicycles.stackexchange.com/questions/68227/… May 19, 2020 at 22:58

There's one thing worth clarifying. Strava does not show a critical power curve. Strava shows your actual power curve, i.e. the average power you actually produced for each duration. I call this an empirical power curve, though it's not a standard term.

Critical power models are mathematical models that can predict your maximum potential power at any duration between about 2 and 30 minutes. As input, they need 2-4 maximum efforts at various durations (usually around 3 and around 12 mins are recommended at minimum). You can tell you're looking at a critical power model's output if the curve is smooth. The raw parameters of the critical power model (critical power and W') are potentially of interest themselves.

Intervals.icu is a service that connects to Strava and provides a lot of training-related information. Based on the last 42 days of riding, this is my empirical power curve (jagged solid line) plus the Monod-Scherrer 2-parameter model's curve (smooth dashed line). The two circles are the datapoints that the model used to generate my critical power curve. It thinks I am capable of a higher 2 minute power than what I've actually done in the last 42 days, and it is probably (or hopefully) correct since I have not done a maximal 2-min effort.

The solid horizontal line is my estimated FTP; from the documentation, I think they multiply the critical power by some amount (like 1.05 or thereabouts, not sure where this comes from).

Or, the model-based power curve below was from a Trainer Day blog post that I referenced in another discussion. Again, note the smooth lines. I think this is a proprietary model with more parameters than the 2-parameter CP model.

I'm not clear how Strava estimates your FTP, actually. My current Strava eFTP is not 95% of my current best 20 min power. Zwift Power estimates (or once estimated?) your FTP this way. The circumstances of that effort affect its accuracy. For example, what if you have a 19 min max effort up a climb, then you were exhausted and you coasted afterward? Your maximum 20 min power might be a mix of those two efforts. Zwift recently shifted to using a critical power model to set racing categories. You can check your own info by logging in to your account on a desktop and checking the fitness box. Currently, their estimate of my maximum aerobic power is identical to my recent 5 minute max power. However, their estimate of my FTP is 7 watts lower than my FTP estimated by a test a few weeks ago.

Last, if you don't have maximum efforts, the model will not show your actual potential maximum power. For example, I believe that my FTP is actually 225-230W. I tested it at 225W a few weeks ago and started base training with a lot of sweet spot intervals. My 20-min max power from my empirical curve is 209W. That's 90% of my FTP, and it's my default setting for sweet spot intervals. Be aware that garbage in = garbage out.

• I don't subscribe to Strava so I'm not sure, but if what Strava shows is similar to what other analytical software display, the "empirical power curve" might be the MMP, which many call the mean maximal power (but should be called the maximal mean power). Dec 22, 2023 at 15:47

How Strava Calculates Power by Rosie
February 08, 2012 10:40

Our Power Equation
The power produced while riding is made up of several components:

• Power produced to overcome the rolling resistance of forward motion.
• Power produced to overcome wind resistance.
• Power produced to overcome the pull of gravity (in the case of climbing hills).
• Power produced to accelerate from one speed to another.

The total power produced, P(total), is the sum of all four power components.

``````    P(total) = P(rolling resistance) + P(wind) + P(gravity) + P(acceleration)
``````

Rest of document is at https://support.strava.com/hc/en-us/articles/216917107-How-Strava-Calculates-Power

Curiously, they guess Rolling Resistance based on the type of bike you set up. Also the wind speed or air density are unknown, they assume no environmental wind conditions and an outside temperature of 15 degrees C.

We have seen that in most cases our watts number are very close to the numbers provided by a Powertap or SRM.

I'd call that an optimistic statement. Perhaps the total wattage over the whole ride is somewhere within 20% but the estimate measurements at any specific point can be totally wrong. I've seen zero Watts while going up a steep hill, and peaks of 1200 Watts while steady-state cruising on the flat.

• I'd call that an optimistic statement You're being close-minded regarding Strava's estimated power numbers. You just have to define "very close" as "non-negative number within about 1000W". Feb 22, 2019 at 21:09
• The OP was asking about how the power curve itself was derived, not how the instantaneous power values were generated if a power meter is not available. As far as I know they do not provide a power curve in absence of a power meter. Feb 22, 2019 at 21:12
• @Rider_X fair point - I'd wonder if they abstract from data of riders who do use a power meter on the same segments. There's no point to Big Data if they don't mine it.
– Criggie
Feb 22, 2019 at 21:23
• Confirming that I get power curves as a subscriber for the rides I do without meter (on road). But, will note that my historical curve includes trainer rides that had power data. Cannot confirm if they would turn up if i had never ridden with a power meter at least once. May 21, 2020 at 23:31

It is probably more simple than you think. The data we have is usually a series of wattage readings collected every second. Open the GPX in excel (I export a csv from golden cheeta) and then you can sort the watt column by largest to smallest. The average of the top 60 readings is the 1 minute cp, top 600 - 10 minute CP and so on. So you can just make a new table with cumulative minutes and then write a formula to grab the averages of the different numbers of top data - something like =average(large(A1:A800,1:60). This is then easily plotable from there.

• That sounds reasonable. However, we had a different question recently where it turned out that the curve Strava produces is not strictly monotonous. I think they avoid sorting due to the computing power required. bicycles.stackexchange.com/questions/68227/… There is a discussion of possible algorithms below the answer. Jun 18, 2020 at 11:02
• Wait, the top 600 will not be the the 10 minute value, they will be scattered all around the activity, not in a contiguous interval. Jun 18, 2020 at 12:01
• The average of the top 60 readings is the 1 minute cp Sooo, if I do a short cat 5 crit with a lot of 600-700W (and higher...) efforts, my CP6 or CP10 might be 600 or 700W? Because I spent 6 or 10 minutes total spread out over the entire race at those power levels? Critical power curves don't work that way. The power samples have to be from a continuous time period, one after the other, no skipping around. Jun 18, 2020 at 16:19
• @VladimirF is correct, if you sort the power data won't be contiguous. Strava, TP, and GC each look for contiguous time segments to find the maximum average power over that duration. Jun 18, 2020 at 19:14