HR TSS Estimate

I’ve had TP (free) for many years and believe it does hrTSS without paying. Right now I have TP premium, and WKO.

In any case, I took a quick look at intervals for the ride sent to TR, and I don’t agree with hrTSS it looks too high. And last week I took my hybrid bike to get a haircut, in that situation hrTSS seems too low. :man_shrugging:

“All models are wrong, but some are useful”

The way Intervals works is quite simple, it creates a regression model from all your rides with power and HR and uses that to assign a TSS from HR-only trace.

In the HR tab for the activity you can see how it’s been calculated:

The graph on the left shows the spread of the error in the HR-only model from events which also have power. You can see in this case, the agreement is very good, because this was a pretty standard ride for me (TR indoor workout) the kind of which I have done loads of times before, so it’s not a surprise they match - however the spread is quite wide (lots of points a long way above and below the line).

I have had surprisingly high HR TSS estimates from Intervals on very easy rides - I did 28k round towpaths with my wife last Monday and it gave me 76 TSS… I think because my minimum HR while cycling tends to sit around 100-110 even when I am essentially coasting, so it thinks I am working a lot harder than I actually am. See below two calendar entries, the ride on the right with power and giving a lower TSS than the one on the left despite being practically quite a lot harder:

TrainingPeaks I believe uses a HR time in zone model based on your lactate threshold heart rate - so it’s a fundamentally different model (pretty much the same method as the Strava relative effort score, but ranked on a different scale since relative effort in Strava makes no attempt to be similar/equivalent to TSS).

So you would not expect them to be the same. The HR TiZ model isn’t great for shorter intervals or very variable efforts due to HR lag (as noted by TP), plus all the normal issues with HR variability. The regression model isn’t very good for rides which look a lot different to the rides which the regression model has been trained on. It might be slightly better with HR variability in some cases since it’s already “baked in” to the regression model (i.e., the rides feeding the model will have HR variability in them - the model knows what my HR decoupling usually looks like over 3 or 4 hours), but given how variable my decoupling is depending on weather conditions, hydration, time of day etc. I don’t have a lot of faith (I have seen decoupling as high as 22% and negative decoupling up to -5% before…).

What I do like about the Intervals one is it tells you what the HR TSS would have been for rides with power so you can make a bit more of an informed decision about when it is likely to be too high or too low.

The TR HR TSS usually looks pretty close to the Intervals value for me, especially for shorter/more standard rides, but we can’t look under the hood to make that more informed decision. I expect it will also struggle with rides that look a lot different to those the model is trained on. They do seem to deviate more for longer rides - I did a 3+hr MTB ride in the heat on Sunday and got 189 off TR and 167 off Intervals.

But then, I find Garmin, Strava, TrainerRoad and Intervals all give slightly different TSS figures even for rides WITH power (I think based on how they treat coasting?), so who knows…

My ride from Saturday (yes, FTP is set the same on all 4):
Garmin 121
Intervals 116
Strava 111
TR 120

(I don’t really think this is a problem mind)

1 Like

:thinking: that isn’t slightly different. My TSS for last night’s outdoor workout:
Garmin 102.1
WKO 102
TrainingPeaks 101
TrainerRoad 101
intervals 100
Strava is wacky and I never look at it (ok, I looked, its 89)

Nearly every ride looks like that, and +/- 1 TSS is my definition of ‘slightly different.’ And re: power or HR TSS, TrainingPeaks has allowed switching between the two, or completely overriding with a manually entered value. Back in 2016 I trained myself to one of my highest fitness levels, using hrTSS and TrainingPeaks. The TP hrTSS model is straightforward and easy to understand.

Yeah, I only looked at the Strava one to compare… I don’t usually look at it either.

I’m not saying there’s anything wrong with the TP HR one - they’re just different. The Intervals HR one is easy to understand as well, especially given it’s free. Any HR based method is more open to variability but that doesn’t mean it’s not possible to train with - people did it for years. I did similar to you in 2016 using nothing but Strava Suffer Score :laughing: . I started training with power (=using TR) in October that year, but I’ve still not beaten some of my segment PRs from that year.

(I might ask @davidtinker why the proper TSS is lower in Intervals sometimes though - it could be as simple as it’s using my eFTP for the calculation, which is 4 watts higher than the one I’ve set, but the TSS only varies on outside rides, not on inside TR workouts so that would be weird).

Tx @bobmcstuff . TSS excludes coffee stops because it doesn’t make sense to me that your TSS will be higher for a ride if you add 30 mins in the middle having coffee. So that would be one reason why it is lower sometimes. Apparently this is the burrito break discussion on wattage (before my time). It always uses your manually set FTP.

With regards to HR TSS in you can choose between 3 models:

  • Time in zones: Regression model based on time in zones for your previous rides with power and HR. Works well if you have those and your HR and power zones are aligned. Sometimes overestimates low intensity activities if you don’t have a lot of Z1 riding with power
  • Average HR: Simple model that looks at previous rides with power and HR and works out TSS/hour for a given average HR.
  • HRSS (normalised TRIMP): This uses your resting, threshold and max HR and apparently is what Elevate uses. It’s nice because you don’t need any power data. For me time in zones produces better results but I have loads of power and HR data and my zones are aligned. will also estimate TSS using pace data for running and swimming.

You can also always choose to enter whatever load you like. The dialog shows the estimates from power, HR and/or pace as a guide.


This will be why I got such a high estimate for the low intensity ride last Monday then - makes sense.

Is that also likely to be similar to TP?

I usually turn my Garmin off if I have a long stop (cafe or shop) - I assume that would also be excluded from Garmin, TR calcs too (looks that way in the TR ride profile). But this ride included 5-10 mins waiting at the start plus maybe another 5 waiting at the top of a climb, so probably 15-ish mins of stopped time which I guess would be excluded.

I am not sure what TP uses. I found the HRSS formula on a Github issue for Elevate. The issue implies that it is similar to TP: