← All metrics

What-if fitness projection

Forward-project CTL/ATL/TSB from a planned future training schedule — the same EWMA recursion, run forward instead of backward.

Illustrative projected CTL forward from a planned block Illustrative example — not a real athlete
Illustrative projected CTL forward from a planned block
Day 1Day 4Day 8Day 14

CTL (TSS/day average)

Projected CTL / ATL / TSB

Where your fitness, fatigue, and form will land after a sequence of planned future training days — the calculation behind "what if I train like this for the next two weeks."

Worked example Illustrative example — not a real athlete
  1. Starting CTL = 45, ATL = 40. Plan: 14 days at 80 TSS/day.
  2. Applying the SAME EWMA recursion forward: CTL climbs toward ≈55, ATL climbs faster toward ≈75.
  3. TSB (form) drops to roughly −20 by day 14 — deep fatigue from the intensity ramp.

This is structurally illustrative, permanently: a "what-if" projects a hypothetical future, so no real athlete’s projection can ever be a verified historical fact — only the recursion itself (identical to the shipped historical series) is verifiable.

Formula, provenance & citation
Formula
Same recursion as CTL/ATL/TSB, applied forward: ctl = ctl + (planned_tss − ctl) / 42; atl = atl + (planned_tss − atl) / 7
Inputs
planned_daily_tss (one value per future day), start_ctl, start_atl (seeded from the current shipped series).
Provenance
computed
Unit
TSS (same convention as the historical CTL series)
Method
Banister/Coggan EWMA, applied forward
Citation
Same Banister/TrainingPeaks impulse-response EWMA as the fitness family’s CTL/ATL/TSB entry, applied forward over a plan instead of backward over history.
Licensing note
Same as the fitness family’s ctl-atl-tsb entry — CTL/ATL/TSB vocabulary traces to TrainingPeaks/Peaksware, formula is public domain.
Implementation pointer
api/backend/backend/pipeline/metrics/projection.py:42 (project_fitness). Tests: api/backend/tests/pipeline/test_metrics_projection.py.
← Back to mythreshold.ai