Score Logic

How Readiness and Sleep scores are calculated in Intervals Companion


On this page:

Readiness Score

The Readiness Score is a single daily number (0–100) reflecting how recovered and prepared your body is for training. It draws on overnight physiology, recent training load, and sleep quality, combining them into a weighted composite. Higher is better.

Labels: Excellent (85+), Good (70–84), Fair (60–69), Pay Attention (<60).

Components & Weights

When all data is available, five components contribute to the score. If any component's data is absent, its weight redistributes proportionally across the remaining components — so the score always reflects 100% of available information.

Component Weight What It Measures
HRV vs personal baseline25%Autonomic nervous system recovery
Sleep quality30%Duration + deep/REM stage ratios
Training Load Balance (TSB%)20%Fatigue as a percentage of fitness — ((CTL − ATL) / CTL) × 100
Sleeping HR vs baseline15%Cardiac recovery overnight
HRV 5-day trend10%Directional trajectory of HRV

A minimum data gate applies: at least one of HRV or sleeping HR, and a sleep measurement must be present, or the score returns no result at all.

After all component subscores are combined into a weighted sum, penalty modifiers are applied and the result is clamped to 0–100.

HRV vs Personal Baseline (25%)

Your current morning HRV (rMSSD or SDNN) is compared to your personal trimmed mean from the last 30 days. At least 7 days of history are required; without enough data, this component is omitted entirely. rMSSD and SDNN are maintained on separate baselines and are never cross-compared.

Ratio to personal baselineSubscore
< 0.60×0 — severely suppressed
0.60–0.80×0–40 — notably below baseline
0.80–1.00×40–80 — normal fluctuation
1.00–1.20×80–100 — at or above baseline
> 1.20×100

Baevsky Stress Index modifier

If Baevsky SI is available, it applies an additive adjustment to the HRV subscore. Two scales are supported depending on your calculation method setting:

ScaleConditionAdjustment
Normal (raw SI, ~10–400+)SI < 50+8
SI 50–1000
SI 100–200−8
SI > 200−15
Sqrt (√SI, ~0–10+)SI < 7+8
SI 7–100
SI 10–14−8
SI > 14−15

The Sqrt thresholds are the mathematical square roots of the normal thresholds.

Sleep Quality (30%)

This is the same sleep score computed independently (see the Sleep Score section below) and reused as a readiness component. If sleep stage data is available, it incorporates duration, deep sleep, and REM ratios. Without stage data, duration alone drives the score.

Training Load Balance (20%)

Uses TSB% = ((CTL − ATL) / CTL) × 100, sourced from Intervals.icu. Unlike raw TSB (CTL − ATL), this normalizes by fitness level — a −30% imbalance means the same thing whether the athlete's CTL is 50 or 150. Omitted when CTL or ATL is unavailable.

TSB% RangeSubscore
≥ +25%100 — tapered / peaked
+10% to +25%90–100 — fresh
0% to +10%80–90 — easy week
−15% to 0%70–80 — normal training
−30% to −15%55–70 — hard training block
−50% to −30%30–55 — functional overreaching
< −50%20 — non-functional overreaching

Sleeping Heart Rate vs Baseline (15%)

Overnight resting HR is an inverted metric — lower relative to your baseline is better. With ≥7 days of history, your personal mean is used. Without sufficient history, an absolute scale (45 bpm = 100, 75 bpm = 0) acts as a fallback.

Ratio to personal baselineSubscore
< 0.85×100 — well below baseline, excellent recovery
0.85–1.00×70–100
1.00–1.10×40–70 — slightly elevated
1.10–1.25×0–40 — poor recovery or possible illness
> 1.25×0

HRV 5-Day Trend (10%)

A linear regression slope is calculated over the last 5 days of HRV values and normalized by the mean. Only declining trends are penalized — stable or rising HRV is always ideal.

Normalized slopeSubscore
≥ −1%/day100 — stable or rising, ideal
−1% to −3%/day55–100 — mild decline
−3% to −5%/day25–55 — notable decline
< −5%/day15 — sustained steep decline

Modifiers (Penalty Only)

After the weighted component sum is calculated, up to four modifiers apply additive penalties. Modifiers can only reduce the score — normal readings have no positive effect. They represent red-flag conditions that signal something is wrong, not qualities that make you more ready.

finalScore = clamp(weightedSum + breathingModifier + spO2Modifier + rampRateModifier + wristTempModifier, 0, 100)
ModifierConditionPenalty
Breathing Disturbances< 10 events/hr0
10–20 events/hr−5
20–35 events/hr−12
> 35 events/hr−20
Blood Oxygen (SpO₂)≥ 92%0
90–92%−5
88–90%−10
< 88%−15
Training Ramp Rate≤ 50
5–7−3
7–10−8
> 10−15
Wrist Temperature (deviation from norm)≤ +1.0°C0
+1.0 to +1.5°C−3
+1.5 to +2.0°C−6
> +2.0°C−10

In an extreme scenario, all four modifiers could stack to a combined −59 points — but this would require severe breathing disturbances, low blood oxygen, a steep training ramp, and elevated temperature simultaneously, which is precisely the situation where a dramatic score reduction is warranted.


Sleep Score

The Sleep Score is a single nightly number (0–100) summarizing how restorative your sleep was. Two methods are available and can be selected in Settings. Both produce scores on the same label scale and both use the same dynamic weight redistribution — if a component's data is missing, the remaining weights normalize to 100%. Neither method applies post-score modifiers; all factors are weighted components.

Labels: Excellent (85+), Good (70–84), Fair (60–69), Pay Attention (<60).

Method 1: Stages + Restfulness

This method uses four components available from Apple HealthKit: total sleep, deep sleep, REM sleep, and restfulness. Three additional factors (sleep efficiency, latency, and timing) are not available from HealthKit, so their weight is redistributed across the four available components.

ComponentWeightData Source
Total Sleep35%Total sleep duration
Deep Sleep25%Deep sleep as % of total stages
REM Sleep25%REM sleep as % of total stages
Restfulness15%Breathing disturbances, or awake time if unavailable

Total Sleep (35%) — U-shaped curve with oversleep taper

HoursSubscore
< 5h0–50 (linear)
5–6h50–70
6–7h70–85
7–9h85–100 — optimal window
9–10h100–85 — mild oversleep taper
10–11h85–70
11h+70 — floor

Deep Sleep (25%) — Scored against PSG norm of ~20% of total sleep

Deep sleep %Subscore
< 5%0–25
5–15%25–80
15–20%80–100
≥ 20%100

REM Sleep (25%) — Targeting ~20% PSG norm; 15% is clinically low (→65)

REM sleep %Subscore
< 5%0–20
5–15%20–65
15–20%65–100
≥ 20%100

Restfulness (15%)

Breathing disturbances data (events per hour) is preferred. If unavailable, awake time as a percentage of total sleep is used as a fallback.

Breathing disturbances (events/hr)Subscore
< 5100
5–1080–100
10–2050–80
20–3520–50
35+10
Awake time (% of total sleep — fallback)Subscore
< 2%100
2–5%85–100
5–10%60–85
10–15%35–60
15%+10–35

Method 2: Duration / Bedtime / Interruptions

A simpler three-factor formula that does not require sleep stage data. It adds bedtime timing as a scoring dimension, rewarding circadian-aligned sleep.

ComponentWeightData Source
Duration50%Total sleep duration
Bedtime30%Sleep onset time
Interruptions20%Breathing disturbances, or awake time if unavailable

Duration (50%) — Flat optimal window (AASM 7–9h)

HoursSubscore
< 4h0–30
4–6h30–70
6–7h70–90
7–9h100 — flat optimal
9–10h85–100
10–11h70–85
11h+65 — floor

Bedtime (30%) — Sleep onset scored against a ~10pm circadian optimal

Hours before 6am are treated as late night (e.g. 1am is scored as late, not early morning).

Bedtime (sleep onset)Subscore
Before 8pm60 — unusually early
8–9:30pm60–80
9:30–11pm100 — optimal window
11pm–midnight80–100
Midnight–1am50–80
1–3am10–50
After 3am10

Interruptions (20%)

Uses the same scoring as Method 1's Restfulness component: breathing disturbances preferred, awake time as a percentage of sleep as a fallback.

Comparing the Two Methods

Stages + RestfulnessDuration / Bedtime / Interruptions
Requires sleep stage dataYes, for full scoreNo
Uses bedtime timingNoYes — 30% weight
Duration curve shapeGradual ramp: 85→100 in 7–9hFlat 100 across entire 7–9h window
Best forApple Watch users with sleep stage trackingUsers who want bedtime accountability