← All metrics

Race prediction

Two INDEPENDENT published race-time models over one best effort, plus the honest spread between them — never a single black-box number.

Illustrative predicted-time spread across distances Illustrative example — not a real athlete
Illustrative predicted-time spread across distances
5K10KHalfMarathon

min

Riegel endurance/fatigue prediction

Predicts your time at a different race distance from one known performance, using a fixed "fatigue factor" that’s held up across decades of race results.

Worked example Verified real-world example
  1. T1 = 7,235 s at D1 = 42,195 m; predicting D2 = 21,097.5 m (half marathon).
  2. T2 = T1 × (D2/D1)^1.06 = 7235 × 0.5^1.06 ≈ 3,471 s ≈ 57:51

Riegel’s model predicts a ~57:51 half-marathon equivalent to Kiptum’s ratified marathon WR pace — the input time/distance is verified, this predicted output is MyThreshold’s own model computation, not an independently verified time.

Source: Kelvin Kiptum’s ratified marathon world record (2:00:35)

Formula, provenance & citation
Formula
T2 = T1 × (D2/D1)^k, k = 1.06 (Riegel’s cross-distance fatigue exponent)
Inputs
source_time_s, source_distance_m, target_distance_m; exponent=1.06 (config).
Provenance
estimated
Unit
s
Method
Riegel endurance/fatigue model
Citation
Riegel P. (1981) — Athletic Records and Human Endurance, American Scientist 69(3):285-290.
Licensing note
No trademarked vendor term.
Implementation pointer
api/backend/backend/pipeline/metrics/prediction.py:66 (riegel_time), prediction.py:134 (predict_race). Tests: api/backend/tests/pipeline/test_metrics_prediction.py.

VDOT-equivalent prediction

Predicts your time at a different distance from the principle that VDOT is a fitness constant across distances — the equal-VDOT time at the new distance is the prediction.

Worked example Illustrative example — not a real athlete
  1. A runner’s 25:00 5K (1,500 s over 5,000 m) implies a specific VDOT.
  2. MyThreshold solves numerically for the time at 10,000 m with that SAME VDOT (bisection, since VDOT(distance, time) has no closed-form inverse).
  3. For illustration: this lands close to ≈52 minutes for the 10K.

The method is Daniels & Gilbert’s published equal-VDOT principle; this specific 52-minute figure is illustrative, not tied to a real published case.

Formula, provenance & citation
Formula
Solve VDOT(target_distance, t2) = VDOT(source_distance, source_time) for t2 by bisection
Inputs
source_time_s, source_distance_m, target_distance_m; v_min/v_max speed bracket, max_iterations (config).
Provenance
estimated
Unit
s
Method
Daniels-Gilbert VDOT equivalent-performance principle
Citation
Daniels J., Gilbert J. (1979) — Oxygen Power.
Licensing note
Same VDOT trademark note as the thresholds family’s vdot entry — attributed to Daniels & Gilbert (1979).
Implementation pointer
api/backend/backend/pipeline/metrics/prediction.py:83 (vdot_equivalent_time). Tests: api/backend/tests/pipeline/test_metrics_prediction.py.

Between-model prediction spread

How much the two independent models disagree with each other — an honest measure of prediction uncertainty instead of a single number presented as exact.

Worked example Illustrative example — not a real athlete
  1. Riegel predicts 52:07 for a 10K; the VDOT-equivalent model predicts 51:40 for the same runner.
  2. spread = |3127 − 3100| = 27 s (≈ 0.9%)

A small spread (<1%) means the two independent models agree closely — a wide spread would be the honest signal to trust the prediction less, not paper over it.

Formula, provenance & citation
Formula
spread = abs(riegel_s − vdot_equivalent_s); spread_pct = spread / mean(riegel_s, vdot_equivalent_s) × 100
Inputs
Both the Riegel and VDOT-equivalent results above — both models must succeed.
Provenance
estimated
Unit
s
Method
MyThreshold-original composition of two published models
Citation
Cites both riegel and vdot_equivalent’s own sources as the basis for the two models being compared.
Licensing note
No trademarked vendor term — a MyThreshold-original composition, documented in the module header.
Implementation pointer
api/backend/backend/pipeline/metrics/prediction.py:134 (predict_race). Tests: api/backend/tests/pipeline/test_metrics_prediction.py.
← Back to mythreshold.ai