PIRX Docs
Dashboard

Projection Confidence

Source: components/home/projection-status-indicator.tsx


Why there's a badge next to my projection

PIRX projects your finish time for six distances — 1500m, 3K, 5K, 10K, half marathon, and marathon — every time we finish syncing your data. Those six projections should all point at roughly the same underlying fitness. When one of them disagrees with the rest, that's a signal we need to tell you about rather than hide.

The small pill next to your projected time shows how much you should trust this particular number right now. Most of the time you'll see nothing — that's the ok status, which means the projection looks consistent with your other distances and no disclosure is needed.

The five statuses

Reconciled

The pre-reconciliation projection for this distance disagreed with your other five distances enough that PIRX nudged the number toward the cluster's median fitness. You'll usually see this on a single event (often 1500m or Marathon) where a noisy recent signal pulled the raw projection away from reality. The nudged projection is still our honest best estimate — we just stopped the one event from lying about your fitness.

Under the hood, each event's projection is converted to a VDOT score (Daniels' standard aerobic capacity measure) and an independent Mercier world-record-scaled score. If your six events produce six tightly clustered VDOTs, everything reports as ok. If one event's VDOT sits more than roughly two MAD z-scores from the median, we flag it.

Low confidence

The projection itself looks right, but the honest "best case → worst case" range widened beyond what we've calibrated for your event. This usually happens when your recent training is noisy — inconsistent workouts, missed days, or a sudden load change. The midpoint is still our best estimate; the wider range is PIRX being honest about the uncertainty instead of manufacturing false precision.

The cap that triggers this status is calibrated per-event from every race/projection pair in the PIRX fleet (the P85 of observed relative error). It's regenerated by scripts/calibrate_range_caps.py whenever we want to re-tune the knob.

Data unusual

PIRX cross-checks every event against the other five. If fewer than three of your distances have a usable projection on a given recompute, we can't run the cross-check — three is the minimum cluster size where a robust median is still meaningful. You'll see this status when you're very new, when you've only trained one distance, or after a long gap where most of your per-event history was cleaned out.

The fix is straightforward: log or race a second or third distance (a time trial counts) and the next sync will unlock the full reconciliation.

Hidden

Upstream of the reconciliation engine, PIRX runs a pace-order sanity assertion: your 1500m → marathon projected times must always get slower. A projection that breaks pace order almost always indicates a data problem rather than a real fitness signal, so we suppress the display until the next sync resettles the underlying data. You'll rarely see this; when you do, usually a new activity has already fixed it and refreshing will clear the state.

OK (no pill shown)

The projection is inside the cluster and the range is within the calibrated cap. No disclosure is needed, so no pill is rendered — this is the state most projections live in most of the time.

Frequently asked questions

"Did you change my projection without telling me?" Currently, no — Phase C ships in dry-run mode. The reconciliation engine computes what it would change and records the decision, but doesn't move the midpoint until our accuracy validator (scripts/validate_reconciliation_accuracy.py) confirms the change would not degrade accuracy on paired race / projection samples. The reconciled badge you see represents what the engine has flagged.

"Why does my projection look worse than I expected?" Check for a low_confidence or data_unusual pill. If either is present, the projection is honestly uncertain and your best path forward is more varied training data. If the projection is ok and still looks off, Why this time? on the projection tile breaks down the five drivers so you can see which one pulled the number where it went.

"I disagree with the reconciled value." Reconciliation uses VDOT, which assumes a fairly normal distribution of strengths across distances. A specialist (a pure marathoner or a pure track miler) will legitimately sit outside the cluster for one distance. If you're seeing reconciled on the same event repeatedly, it's worth telling us — the threshold and actions flag can both be tuned per-event in app/services/reconciliation_service.py.

On this page