Fitness model2016.09.19 – 2026.07.02

Ten years of runs, one index

A random forest reads every workout since 2016, plus the hour-by-hour weather at each run's GPS point, and answers one question: how fast is a mile at heart rate 150 in standard conditions?

Fitness index, Jul 2026
8:14 /MI @ HR 150
8 seconds off the all-time peak
All-time peak
8:06 /MI · SEP 2023
set when 42-day training load held near 90
Heat cost, equal effort
+10 S/MI · 45°F → 82°F
smaller than textbook: summer runs start earlier

The fitness curve

Each month the model is asked the same question, a flat 5-miler at heart rate 150, 59°F, and answers with a pace. Training load is the rust area underneath; the pace line follows it with a lag.

Predicted pace at fixed effort & weather
data: 1,126 runs, monthly index, 2019 – 2026
PACE @ HR 150 · MIN/MI
TRAINING LOAD · CTL
2020 2021 2022 2023 2024 2025 2026 8:00 8:30 9:00 9:30 0 50 100 PEAK 8:06 · SEP 2023 CTL 33 · REBUILD 8:14 NOW
YearPace @ HR 150Avg CTL
20199:244
20209:1722
20219:1818
20228:5151
20238:1084
20248:1385
20258:1777
20268:1652

The 2022 to 2023 block is the whole story: training load went from 51 to 84 and bought back 41 seconds per mile at the same heart rate. The February 2026 layoff cost the index 7 seconds; the June rebuild has already recovered most of it.

What a hot day costs

Residuals from a weather-blind model, binned by apparent temperature: how much faster or slower each easy run was than the model expected, given effort, terrain, and training state.

Pace cost vs expectation, equal heart rate
data: 993 easy and steady outdoor runs
−8s −4s even +4s 10°F 30°F 50°F 70°F 90°F 9.5°F: +1.3 s/mi (n=23) 18.5°F: +0.6 s/mi (n=37) 27.5°F: +1.1 s/mi (n=76) 36.5°F: -2.5 s/mi (n=101) 45.5°F: -6.2 s/mi (n=95) 54.5°F: -0.6 s/mi (n=102) 63.5°F: +1.7 s/mi (n=152) 72.5°F: +0.8 s/mi (n=184) 81.5°F: +3.6 s/mi (n=169) 90.5°F: +2.6 s/mi (n=44) SWEET SPOT · 46°F · -6 S/MI +4 S/MI AT 82°F

The measured penalty is gentler than the textbook 10 seconds per 10°F, and the data shows why: July runs start four to five hours earlier in the day than January runs. The heat you never run in costs nothing.

What moves the needle

Permutation importance: how much prediction error rises when the model is denied each input. Heart rate dominates, as it should; training load is the strongest signal you can actually change.

Drivers of run speed
MAE increase in m/s when feature is shuffled
AVG HEART RATE 0.088 DESCENT PER KM 0.020 CLIMB PER KM 0.017 RUN DISTANCE 0.016 TRAINING LOAD, 42-DAY 0.011 LONG-TERM TREND 0.009 TRAINING LOAD, 7-DAY 0.008 TEMPERATURE 0.008

Model & data

ModelForecast MAEInterp MAEInterp R²
Predict the mean0.225n/an/a
Ridge regression0.1940.1780.31
Gradient boosting0.1910.1610.39
Random forest0.1810.1580.42

MAE of 0.16 m/s is roughly 27 seconds per mile on a single run. The index averages over a month, which is where the signal lives. This is a fitness tracker, not a race predictor.

  • Workouts pulled from Final Surge2,168
  • Raw files downloaded (FIT + Apple Health)2,163
  • Runs passing quality filters1,126
  • Joined to hourly ERA5 weather98%
  • Location-year weather cells71
  • Max heart rate, verified 2024187
  • Load model: Banister TRIMP, EWMA42 / 7 day