Tuesday, April 1, 2025

Putting Banister To Bed

 



Graph of the Fatigue, Fitness, and Form the Banister model predicted for me based on my training over the the last few years.


I have blogged a lot about the Banister model. At the bottom of this post you will find a list of my earlier posts on this topic. The input to the Banister Model is daily training Load, where Load is a combination of how long I ride (in minutes) and how hard I ride (which I calculate from my heart rate.) The output of the Banister Model is predicted performance a.k.a. Form. (Think of this as perFORMance.) How well does that prediction match my actual performance? In my most recent post on this topic I said "I have been using the Banister model for more than two years now and it certainly has not been perfect at predicting the impact of my training on my cycling ability, but I have the impression that it does give me hints that are helpful in combination with what my body tells me in optimizing my training." That evaluation is both subjective and qualitative. The management consultant Peter Drucker is famous for his saying "If you cannot measure it, you cannot improve it." In this post I am going to discuss my efforts to quantitatively compare my performance to that predicted by the Banister model.

I have all kinds of subjective impressions about my performance. For example, last May I rode the 60 mile long Art of Survival with my friend Roger and felt that my performance was poor because, despite the fact that I relied heavily on the eAssist of my eBike and despite the fact that he reported that he had not had the opportunity to train enough before the event, I found it very difficult to keep up with him. Obviously that is not a metric I can use to determine if the Banister Model's prediction of my performance is accurate. What could I use? Can I look at the scientific literature concerning the Banister Model for guidance on a metric? I have read a few papers on this topic and the kinds of metrics they use tend to be things like maximum power output during a five minute time trial. (See, for example, this paper.) What I am trying to optimize is average speed during a five hour group ride which is a very different thing. The former is a measure of fast twitch muscle strength whereas the latter relies much more on slow twitch muscle fibers. It would be like trying to determine how strong your legs are by measuring your arms. I am unenthusiastic about using such short term metrics.

I could use a longer time trial to assess my Form. The problem with that is, in my old age, a long time trial is tiring to the extent that the very training I am trying to optimize is disrupted. It is similar in concept to crash testing a car if you only have one car. After the test, you might know the car was safe, but unfortunately it is now destroyed so that knowledge is of no value. So what could I measure that would be relevant to my training goals and would also not disrupt my training? If you look at my recent posts, it's obvious that I have been hoping to use the average speed at which I ride my training rides for that purpose. For many reasons, that is a very imprecise and subjective measure but back in 2021 I did a statistical analysis that my speed on selected subsets of these rides might be useful nonetheless. For this post, I used my speed on a subset of rides all of which were on my Cañada route, where the level of effort I attempted during ride were all the same, and the bicycle I rode was the same. This is how the speed on those rides compared to the performance predicted by the Banister model:


As is shown in this graph, the Banister has essentially no ability to predict my speed on a Cañada ride. R2, shown at the top of the graph, is a measure of predictive power that varies between 0 and 1, where a value of 1 means perfect prediction and a value of 0 means no prediction. The value of 0.001 measured here is about as close to 0 as one is likely ever to see.

Why is the Banister model not working for me? There are many plausible explanations, but before I get into them, I think it will be useful to say a little more about how the Banister model works. As noted above, the Banister model takes as its input the Load of each of my bike rides. It then uses that to calculate two hidden variables, Fitness and Fatigue. I call these variables hidden because there is no way to measure Fitness and Fatigue on their own, instead they are used to calculate Form (performance) which can be measured. To calculate Fitness and Fatigue, Banister uses two constants called k1 and k2. It multiplies Load by k1 and adds it to Fitness and multiplies it by k2 and adds it to Fatigue. In modern usage, k1 and k2 are often customized for each athlete but out of the box, the Banister model sets k1 = 1 and k2 = 2 and those are the values I am using. If this was all there was to the model, Fitness and Fatigue would just keep increasing forever. However, because we know that Fitness and Fatigue decrease over time, every day those accumulated values of Fitness and Fatigue are decreased exponentially. Specifically:

FatigueToday = FatigueYesterday x e-1/Ta
FitnessToday  = FitnessYesterday x e-1/Tb

Ta and Tb are two more constants whose value can be customized to the athlete, but out of the box, have values of 15 and 45, respectively. I use these out of the box values, and as a result, my calculated Fatigue decreases by half after 10 days and my Fitness decreases by half after 31 days.

Finally Fitness and Fatigue are used to calculate the output of the model which can be measured as follows:

Form = Fitness - Fatigue

...where Form (perFORMance) is related to how fast I can complete a ride. And that is what is not working for me, the Form I calculate has nothing to do with how quickly I complete a ride.

There are reports that Banister model and the related, widely used Training Peaks software package do work for many athletes so this is a problem with me, not with Banister. Given that, I can now turn to the question of why.

1) Maybe the Banister model is not working for me because my training is too constant.

The idea here is that I try to plan my training so that I ride my Cañada rides on days when I am fairly well rested. Thus, if I never vary my Load and resulting Fatigue much, I cannot expect my ride speed to vary much either; what looks like a lack of correlation (low R2) might be a lack of variation in my level of Form caused by a lack of variation in my Fatigue on the days that I measured my performance. It is not that the Banister model cannot predict my ride speed, rather it is that I never gave the Banister Model anything to work with.

Consistent with this idea, if you look at the graph at the top of this post, it looks as if Form doesn't vary much; it is always uniformly high. This is a bit misleading; Form on that graph uses a different Y axis than does Fitness or Fatigue. (I did that to make it more visible.) In fact, over the set of suitable Cañada rides, Form varies 7-fold from a low of 114 to a high of 765. On the other hand, if I look at all days, not just the days I chose to ride a Cañada ride, the variation is 43-fold, from 21 to 894. Perhaps if I had attempted a Cañada ride on a day where my Form was 21, I might have seen a more dramatic effect on my speed.

2) Maybe the Banister model is not working for me because of confounding factors.

If Point 1 were the whole problem, we would see that ride speed doesn't vary much. In fact, it varies between 9 and 12 miles per hour, a range that feels like a big difference to me. If changes in the Banister-predicted Form, Fitness, and Fatigue don't explain this, what does? As I have noted before, I often feel tired after a stressful day, even if that stress is mental rather than physical, a day when my babysitting responsibilities are particularly heavy, for example. Depending on how large the impact of non-cycling stress is, this could obscure the effects of my training.

3) Maybe the Banister model is not working for me because training speed is a bad metric.

In all my reading, I have never come across anyone who has attempted to use training speed as a metric in the way I have. Maybe there is a reason. Coaches recommend time trials as a metric to measure Form. One aspect of a time trial is that, because the athlete is riding as fast as possible, some confounding factors are eliminated. When I go for a training ride, I might be slow because of the Fatigue from an earlier ride or I might be slow just because I am not in the mood to go fast.

4) Maybe the Banister model is not working for me because I have not customized its constants.
Most current writing about the Banister model recommends not using the out of the out of the box constants but rather fitting these constants to the data from each individual athlete. I am working on software to allow me to do that, but to date, have not completed that work and don't know if or when I will. It is possible I will complete this software, fit the constants, and all of a sudden the Banister model will start working for me. If that happens, I will post about it.

5) Maybe (gasp!) the Banister model is wrong. (Not likely, but hear me out.)

There is a lot about the Banister model that doesn't make intuitive sense to me. It is my understanding that most coaches and exercise scientists believe that it is important that an athlete not do a workout (at least a hard workout) until that athlete has recovered from the previous workout. What "recovered" means varies, but at a minimum, it is when their Form has returned to what it was before the workout. According to the Banister model using the out of the box constants, that takes 16 days. A more stringent version of this rule is that "recovered" means until an athlete's form has peaked. According to the Banister model, this would take 39 days. Both of these numbers seem totally bonkers to me. Similarly, I am puzzled that following any reasonable training program means that, according to the Banister model, Fatigue always remains high. As I was laying awake thinking about this one night before bed, I asked myself what seemed reasonable to me. It seemed to me that a linear model of recovery might better fit my experience than the exponential model of Banister, that my Fatigue would be reduced by a fixed amount each day until it was gone entirely. But by how much each day? My experience has been that it takes me two days to recover from a Cañada ride, so I set up a model where my Fatigue decreased by that much. When I fit the same set of Cañada rides I used above to test the Banister model, I again found no correlation between my level of Fatigue and my speed on a ride. However, I remembered my post from last January where I found that the correlation between heart rate and ride speed improved dramatically when I looked at rides over the course of a few months rather than over the course of a few years, so I tried again, using a shorter time frame. In addition, to improve my chances, I used a time frame during which my predicted Fatigue changed substantially. Here is what I found:


An R2 value of 0.229 is very unimpressive and not very useful, but it is a lot higher than 0.001. But that is an unfair comparison, my Linear Fatigue only had an R2 value of 0.009 when evaluated over all the Cañada rides. What if I looked at the Banister model over the same reduced time frame? It did improve,  with an R2 value of 0.079 for Banister Fatigue and 0.082 for Banister Form but not to a degree to be useful.

Conclusion:

For some unknown reason or reasons, the Banister Model is not able to predict my performance. If that changes, I will revisit the subject, but until then, I am through blogging about the Banister model; it's time for me to put the Banister Model to bed.



Banister Posts: