2026-08-05

New Perspective on Multicollinearity

This is a brief blog about an interesting perspective I gained while working on my New Bike Day application. A core piece of this application was predicting bike speed. The most impactful features are gradient, and watts. One thing people often asked me was "How do you account for fitness?". This is also a question I asked myself. I considered bringing in a fitness metric like trailing average training miles, or even VO2 max. Upon thinking I realized that this would actually be a case of multicollinearity. Being fit doesn't actually make you fast, being fit lets you make more watts which in turn makes you fast. So by this logic, including a fitness metric would have such a high correlation to watts that it would actually be problematic.

I wasn't using a linear model, which is where multicollinearity is really problematic so it's not like my process would've been ruined if I didn't catch this. Still, on the modeling side, I would be splitting credit between 2 variables which are essentially the same thing if I had included both, likely weakeneing the signal.

The technical term for this is mediation. A mediator is a variable that sits in the middle of a causal chain, transmitting the effect of a feature (Fitness), through itself (Watts) to the dependent variable (Speed). Fitness is upstream of watts in this causal chain. If I were to include fitness and watts, they wouldn't really be independent features because one of them causes the other. So I decided not to include fitness at all in my model. There is an argument to be made that when I am more fit I can put down more watts in a seated position, and be more aero, but this isn't a very strong argument. In fact a stronger argument is that even when I am super fit, I may not be giving it my 100% every ride. A super fit Logan riding at 75% effort putting out 200 watts isn't really any faster than an out of shape Logan riding at 100% putting out 200 watts.

In this way, what I am calling multicollinearity here actually helped me out, making my job easier, because I didn't have to account for fitness. This is in a stark contrast to how I learned about multicollinearity, always presented as a 'bad thing'. So my new perspective is that multicollinearity, while you shouldn't include it in a model, isn't a 'bad' thing. When you recognize it and think about it, it can actually make your job easier. In my case I got to skip the step of trying to build a feature to represent fitness.

There is a counterpoint I should address. I touched on it briefly earlier, but fitness does do more than just watts. Maybe I am smoother at power, or better holding my aero position. So for this reason, If I had a strong variable for fitness, it would be worth trying to extract these non-watt factors from fitness and see how that comes into play with the model. This is not something I tried because I don't have a super clean variable for fitness, so I think pulling sensitive secondary factors out of it would do more harm than good.

A takeaway here, as data scientist with over 4 years of experience, is that there is often still a deeper understanding to be gained by dealing in topics you're intuitively familiar with. I have likely encountered similar situations at work, but it's on topics like supply chains, which doesn't resonate with me the way cycling does. So seeing this in action with something I am familiar with really helps the concept click in a way that work/academic examples never did.