The KOM Informatics Project

I rolled my own cycling analytics application. I got interested in the interval detection problem. It seems like a pretty obvious feature: After defining power zones provide some minimum duration interval per zone where the physiological benefits start to accrue. When you upload your ride, the system notices those intervals that at least meet the minimum standards for watts and duration that you've provided. Yet, to my knowledge, no company in the industry has come up with a solution.

It turns out that it's relatively easy to detect intervals, the problem is is that there are too damn many of them. Even a relatively small ride like the demo I link to below can yield over 1.5 million intervals, most of which are very similar to each other. But displaying and storing that many intervals per ride is not feasible for a commercial application.

To make a long story short I found a heuristic solution to the problem. The algorithm distills potentially millions of candidates down to the most important and relevant ones for your ride. I've been working on it for almost a three years now and it's gone through 4 major revisions.

Ride Page

Power Curve Comparison

Race Readiness Graph

Here are some screenshots of the system. (click on any of the adjacent thumbnails for a full size image). If you want a more interactive experience you can sign up for the free trial.

Once interval detection was working I had to figure out how to aggregate and report on results. The main question is "How is workload affecting performance?". This article, first published in December 2017, discusses the 6 Week Training Summary report, the first tool created to focus on this question, and how I used it to explain a small improvement, year over year in a TT effort.

In the first quarter of 2018 I worked on making the reporting on workload/performance better.

As discussed above, KOM Informatics tracks time and kilojoules for all interval work, as well as non-interval work.

At the same time the Personal Records subsystem records best wattage effort for 18 "time boxes" for each ride. These time boxes were selected to correspond to pretty standard interval lengths which are prescribed by cycling coaches. The Personal Records report allows filtering this data by date range, and number returned.

The system brings the 2 concepts together by providing statistical correlations between workload and performance. Here is an article which discusses how the system accomplishes this.

June 2018 marked the first month where I had a chance to digest and use the findings of a whole year's worth of data. The system's reports gave some pretty clear indications of what the most beneficial mix of training (out of what I've tried so far) was for me. So what happened when I tried to apply the lessons learned from the system? Here's an article which discusses that topic

In the Fall of 2018 I integrated muscle oxygen data (SmO2) into the system. I had long suspected that cycling analytics applications using traditional power based methods for calculating weighted average power were under-reporting training load for rides involving high intensity efforts. So, I did a study comparing the output of 2 popular smoothing algorithms, simple moving average (SMA) and exponential moving average (EMA) with muscle oxygen data. I ended up creating a new formula called SmO2 Weighted Average Power, which uses muscle oxygen data to account for the physiological stress of a ride. Under the new formula the rides that gained the most weighted average power were characterized by much higher workloads in the anaerobic and neuromuscular zones then those that only gained a few watts or less. Here's a link to the study.

In 2019 I worked on integration with the Humon Hex muscle oxygen device. Humon has a color based system for tagging how hard a cyclist is working based on muscle oxygen data. Viewing the muscle oxygen data alongside interval data can yield valuable insights as to how well the intervals are working. For more detail on how this works see KOM Informatics: Gauging Interval Quality With The Help Of Humon Hex Data

2019 also saw the advent of Ride Summary Charts an ad hoc chart creation tool. The user can select 1 or more of 35 ride summary based metrics and display them on a chart which is implemented as a .png image which can be saved to a local file system. The data reported on can be constrained by date range or through the use of tags which get matched to the Comments column of a ride on a contains basis. Here's an article that shows how this functionality is used to report on the outcomes of Humon threshold tests

A module to calculate Critical Power was also created in 2019. The main practical use of the theory is to predict wattage of a longer TT based on shorter trials. An article on the history, theory, and some of the practical considerations of Critical Power, along with an overview of how it's been implemented into the system can be found in this article: KOM Informatics: Critical Power