Tuesday, August 9, 2011

Strava Suffer Score decoded

Strava recently debuted its "Suffer Score", which attempts to quantify in ome way how hard an activity was. Suffer score, they claim, is based on heartrate: ride further or harder and suffer score is higher.

Suffer score is a good move for Strava. Strava's market segment is informal competition. Other web sites have logged how far people ride, and where, but Strava really locked into the demand for competition: competition via social networking. To date these rankings have been based primarily on speed over "segments": routes defined by users, for example on roads or trails, typically up climbs. They then added contests for volume: most miles ridden in a week and most feet climbed, for example. But with Suffer Score, they combine the two: a metric combining both quantity and quantity.

Why's this important? Of course not everyone can climb fast enough to compete for KOMs on popular climbs. But a heartrate-based metric levels the playing field to a large extent. Anyone who's been riding regularly for long enough can go out with the goal of generating an "epic" suffer score for the day.

Suffer score is an obvious correlary with the Coggan "training stress score" (TSS). TSS is an attempt to quantify the training stress of a ride: it's effect on fatigue and its stimulus for physiological adaptation. That both of these can be captured with the same simple metric is far from obvious, but TSS is a blunt instrument, and its popularity among hardcore power meter fans proves people find it useful.

But Strava's focus isn't on hard-core training junkies. It's on the typical Mission Cycling or SF2G rider: people who like to ride, and when they ride like to ride quickly, and as a consequence of this quick riding tend to acquire fitness. However, the goal of every ride is still the joy of the ride, not strictly to improve fitness. So "suffer score" is a "don't take me quite so seriously" number by which long-hard-rides can be compared. "Pain is good", it suggests, not only for it's "training stress".

The big question, however, is how Suffer Score is calculated? To test this, I used a Perl script to generate ride data at constant heartrate. My "rides" consoisted of perfect 1 km radius circules in the Bonneville Salt Flats ridden at a perfect 10 meters per second. Each ride had a different heart rate, perfectly constant, or a different duration.

First I tried using the GPX file format for this purpose, but Strava wouldn't digest the heartrate numbers. So I switched to TCX. This worked nicely.

Here's one of my rides:


From a few tests, I was able to guess the following formula was used for Suffer Score:

Suffer score = K1 t1 + K2 t2 + K3 t3 + K4 t4 + K5 t5

where:
t1 = time in hours in zone 1
t2 = time in hours in zone 2
t3 = time in hours in zone 3
t4 = time in hours in zone 4
t5 = time in hours in zone 5

With coefficient roughly equal to the following (may be off by 1/hr):
K1 = 12/hr
K2 = 24/hr
K3 = 45/hr
K4 = 100/hr
K5 = 120/hr

I like this approach, although I'd be tempted to increase K5, for example to 200. Time in Z5 is very, very painful. Of course this depends on having a good number for maximum heart rate, which may not be the case. In fact a geometric progression would have worked well here: 12, 24, 48, 96, 192. I think this would have helped the criticism I've been reading that it's too endurance-focused.

12 comments:

Andrew R. Coggan, Ph.D. said...

So, not only have the Strava folks used my original scale for TSS values (e.g., >250 = "epic") without attribution, they have presented Suffer Score as if it were something original, rather than merely a common variation of Dr. Eric Bannister's TRIMP calculation. Nice...must be a bunch of snowflakes behind that site.

(BTW, TSB = training stress balance.)

djconnel said...

Whoops -- I'll fix the blog (I don't know where "bias" came from -- doing too many semiconductor device simulations for the day job).

To be fair, then did mention TRIMP in the support forum. So they're not practicing active deception (benign neglect if anything). Not sure about the TSS descriptions.

I still need to check the formula against time gaps in the ride to see if they're doing any time averaging. So far I checked linearity only against rides of constant HR. Spent too much time debugging my ride data generation script.

Jason said...

Do you mind posting a link to your perl script that generates the TCX file?

I won't judge your coding, I just want to save myself time from doing fun experiments like these on my own with Strava.

Mark Shaw said...

Hi Andrew, this is Mark Shaw from Strava. You're absolutely right, we should make reference to TRIMP in our "What's this?" section, as it is correct to say we're using a modified TRIMP score. It wasn't our intention to hide this fact and it was an oversight not to mention it directly on the site. As Dan points out, our intention is to be open about this, as we do discuss it on support forums. We've been getting a lot of feedback from our users which we're using to help make adjustments to the score and the language around it. We'll add a mention of TRIMP to our site - thanks for the heads up.

Mark Shaw said...

Hi Andrew, this is Mark Shaw from Strava. You're absolutely right, we should make reference to TRIMP in our "What's this?" section, as it is correct to say we're using a modified TRIMP score. It wasn't our intention to hide this fact and it was an oversight not to mention it directly on the site. As Dan points out, our intention is to be open about this, as we do discuss it on support forums. We've been getting a lot of feedback from our users which we're using to help make adjustments to the score and the language around it. We'll add a mention of TRIMP to our site - thanks for the heads up.

djconnel said...

Maybe I'd better not post the script publicly -- not really fair to Strava.

Péter I. Pápics said...

1st of all, very nice post, I was 100% sure that you would figure this formula out when I saw the SSS on the Strava website ;)

I completely agree with giving zone 5 a much higher score, and I like the idea of the geometric progression, so that's how I included it in my personal workout analyzer script:

k1...k5 is 12.5, 25, 50, 100, 200
while the categories are
leisurely 0-49
moderate 50-99
tough 100-199
very hard 200-399
mind-blowing 400-

It is really a pity that there are basically no Strava users in Europe... :(

Péter I. Pápics said...

Ps.: what I wrote earlier might be good to rate the toughness of the ride, but it should not be mixed with TSS values. I did not mean that. Now that you wrote about it I read a bit into these things, and I have found lots of interesting stuff, thanks again!

thehomme said...

Great post. Since going premium I've been confused by the suffer score. I do a very, very hard race of 1.5hrs with almost all my time in Z4 but I get a greater SS on a 4 hr club ride spent in z2 & z3. The race caused a lot more "suffering"

Why can't Strava just give us a TSS and IF score. And ideally all the analysis you get in WKO+ for a "super premium" membership fee?

djconnel said...

The terms "TSS" and "TSB", etc, are trademarked, so they can't be used without license. But I think Strava views its market as different: not focused on power meters, but more the average rider who just likes to ride hard without formal metrology. So it's intended to be a "fun" number. They've upgraded their metrology to include a "red zone" score, which is the component of "suffer score" from Z4-Z5. Actually, it would make a good API project to extract a TSS-like statistic from Strava data. I've got a bunch of projects on my plate but that wouldn't be too hard.

thehomme said...

There's no doubt Strava is a broad mainstream product. I can understand that as a business strategy at start up and beyond but there's a huge gap in the market for a single cohesive system.

There's currently very little you get from Strava premium. Most people I know pay cos they think they should rather than for what Strava provides. If they want to drive premium membership then they need to be looking to add significant functionality for the growing numbers of club cyclists. To my mind these are the people who will pay...if you just enjoy riding your bike then why go premium?

My ideal product would be trainer road, something akin to WKO+ all integrated with Strava.

Its funny the comment about no one being on Strava in Europe. It seems to be hitting a tipping point here in the UK.

djconnel said...

Yes -- they've made a big marketing push for Europe!

GoldenCheetah has some Strava integration. I've not followed it, but I suspect it does what you want. Try that out...

Strava has a simple API which makes it easy for apps to upload or download rides to Strava accounts. This makes it fairly easy to implement alternative front-ends. It will become simpler when version 3 of the API comes out within the next few months.

For example, I'd like to do an app to extract critical power curves from Strava rides. It's easy to do for one ride, harder if you want some sort of global curve. But GoldenCheetah already offers this capability.