Methodology

Science & Sources

Every score OutPerform shows you is derived from peer-reviewed sports-science and sleep research. This page documents every algorithm, formula, and the published studies behind each one. All calculations happen entirely on your device — no data ever leaves your phone.

⚕️ Not a medical device. OutPerform is a wellness and sports-science tool. The screening indicators (sleep apnea risk, SpO₂ alerts) are informational only and are never a clinical diagnosis. Always consult a qualified healthcare professional for medical concerns.

01 — Sleep Performance Score

A 0–100 score that weighs four evidence-based dimensions of sleep quality: efficiency, restorative content, need fulfillment, and timing consistency.

Sleep Staging

Sleep is categorised into Awake, Core (light NREM: N1 + N2), Deep (slow-wave, N3), and REM stages, following the standard AASM two-stage scoring model. Apple Watch and most modern wearables use accelerometry plus heart-rate variability to classify stages in real time against these criteria.

Sources
  1. Berry R.B. et al. (2018). AASM Manual for the Scoring of Sleep and Associated Events, Version 2.5. American Academy of Sleep Medicine. aasm.org
  2. Iber C. et al. (2007). The AASM Manual for the Scoring of Sleep and Associated Events. American Academy of Sleep Medicine.

Sleep Efficiency

efficiency = total_sleep_min / time_in_bed_min × 100

Sleep efficiency is the percentage of time in bed actually spent asleep. Normal efficiency in healthy adults is ≥ 85%. Values below 75% are associated with insomnia and poor daytime function.

Sources
  1. Morin C.M. et al. (2006). Psychological and behavioral treatment of insomnia. Sleep, 29(11), 1398–1414.
  2. Ohayon M. et al. (2017). National Sleep Foundation's sleep quality recommendations. Sleep Health, 3(1), 6–19. doi:10.1016/j.sleh.2016.11.006

Restorative Sleep

restorative_pct = (rem_min + deep_min) / total_sleep_min × 100 restorative_score = clamp(restorative_pct / 40, 0, 1) // 40% = perfect

REM and slow-wave (deep) sleep are the most physiologically restorative stages. Deep sleep drives growth hormone secretion, immune function, and physical repair. REM sleep consolidates memory and regulates emotion. Healthy adults spend roughly 15–25% of sleep in deep and 20–25% in REM; 40% combined is used as a ceiling representing optimal restorative content.

Sources
  1. Walker M.P. (2017). Why We Sleep. Scribner. Chapter 3–5.
  2. Dijk D.J., Czeisler C.A. (1995). Contribution of the circadian pacemaker and the sleep homeostat to sleep propensity, sleep structure. Journal of Neuroscience, 15(5), 3526–3538.
  3. Van Cauter E. et al. (2000). Age-related changes in slow wave sleep and REM sleep. JAMA, 284(7), 861–868.
  4. Tononi G., Cirelli C. (2014). Sleep and the price of plasticity. Neuron, 81(1), 12–34.

Wake Events

Awake segments longer than 5 minutes that occur after sleep onset are counted as wake events. Brief arousals (< 5 min) are normal and excluded to reduce noise. Frequent sustained awakenings are associated with fragmented sleep and next-day cognitive impairment.

Sources
  1. Bonnet M.H., Arand D.L. (1992). Caffeine use as a model of acute and chronic insomnia. Sleep, 15(6), 526–536.
  2. Lim J., Dinges D.F. (2010). A meta-analysis of the impact of short-term sleep deprivation on cognitive variables. Psychological Bulletin, 136(3), 375–389.

Sleep Consistency (Bedtime Regularity)

consistency_score = clamp(1 − std_dev_bedtime_hours / 2, 0, 1) // 0 h std-dev = perfect 1.0 · ≥ 2 h std-dev = 0.0

Social jetlag — variability in sleep timing across nights — independently predicts worse metabolic health, mood, and cognitive performance even when total sleep duration is held constant. A standard deviation of 2+ hours in bedtime is used as the lower bound (score = 0), with a perfectly consistent schedule scoring 1.0.

Sources
  1. Phillips A.J.K. et al. (2017). Irregular sleep/wake patterns are associated with poorer academic performance and delayed circadian and sleep/wake timing. Scientific Reports, 7, 3216. doi:10.1038/s41598-017-03171-4
  2. Lunsford-Avery J.R. et al. (2018). Validation of the sleep regularity index in older adults. Scientific Reports, 8, 14158.
  3. Roenneberg T. et al. (2012). Social jetlag and obesity. Current Biology, 22(10), 939–943. doi:10.1016/j.cub.2012.03.038

Sleep Performance Score — Final Formula

score = (efficiency × 0.30) + (restorative × 0.30) + (need_fulfillment × 0.25) + (consistency × 0.15) All components are first normalised 0–1, result is scaled × 100.

Weights are user-adjustable in Settings → Advanced.

ComponentDefault weightRationale
Efficiency30%Most directly reflects sleep quality per unit of time in bed.
Restorative content30%Deep + REM are the physiologically critical stages.
Need fulfillment25%Sleeping enough for your personal demand is essential.
Consistency15%Circadian regularity; secondary to raw quality metrics.
Sources
  1. Hirshkowitz M. et al. (2015). National Sleep Foundation's sleep time duration recommendations. Sleep Health, 1(1), 40–43. doi:10.1016/j.sleh.2014.12.010
  2. Ohayon M. et al. (2017). National Sleep Foundation's sleep quality recommendations. Sleep Health, 3(1), 6–19.

02 — Sleep Need & Bedtime Planner

Sleep need is a dynamic quantity: it rises with prior-day training load and accumulated debt. OutPerform builds a personalised baseline from your own historical data.

Personal Baseline

baseline = mean sleep duration on low-strain days (strain < 8) over the last 30 nights // falls back to 480 min (8 h) until enough history exists

Low-strain days are used because strain augments sleep need (see below). Using only easy days lets the baseline reflect the individual's true resting need, free from training-load artifacts. The 8-hour fallback aligns with the median recommendation across age groups from the National Sleep Foundation.

Sources
  1. Hirshkowitz M. et al. (2015). National Sleep Foundation's sleep time duration recommendations. Sleep Health, 1(1), 40–43.
  2. Watson N.F. et al. (2015). Recommended amount of sleep for a healthy adult. Sleep, 38(6), 843–844. doi:10.5665/sleep.4716

Strain Component (f₁)

f₁(strain) = 1.7 / (1 + e^((17 − strain) / 3.5)) hours → × 60 = minutes

A sigmoid function maps yesterday's strain (0–21) to extra sleep minutes needed. At strain = 10 this adds ~20 min; at strain = 21 it adds ~100 min. The sigmoid shape reflects the nonlinear dose–response seen between training load and recovery sleep: mild exercise has little effect; very high loads demand substantially more sleep.

Sources
  1. Mah C.D. et al. (2011). The effects of sleep extension on the athletic performance of collegiate basketball players. Sleep, 34(7), 943–950. doi:10.5665/SLEEP.1132
  2. Fullagar H.H. et al. (2015). Sleep and athletic performance. Sports Medicine, 45(2), 161–186. doi:10.1007/s40279-014-0260-0

Sleep Debt Component (f₂)

f₂(debt) = min(debt × 0.5, 90) minutes debt = clamp(prev_debt + prev_need − prev_actual, 0, 180) minutes

Accumulated sleep debt is carried forward each night. You cannot fully repay debt in one night; the 0.5 multiplier reflects that only a portion of debt is typically recovered per night. The 90-minute cap prevents extreme overcorrection; the 180-minute debt cap bounds the model within realistic physiology.

Sources
  1. Dinges D.F. et al. (1997). Cumulative sleepiness, mood disturbance and psychomotor vigilance performance decrements during a week of sleep restricted to 4–5 hours per night. Sleep, 20(4), 267–277.
  2. Belenky G. et al. (2003). Patterns of performance degradation and restoration during sleep restriction and subsequent recovery. Journal of Sleep Research, 12(1), 1–12.

Bedtime Planner

sleep_need = baseline + f₁(yesterday_strain) + f₂(debt) − nap_minutes bedtime = wake_time − sleep_need × target_multiplier − sleep_latency Performance targets: Peak = 100% · Good = 85% · Minimum = 75%

The bedtime recommendation works backwards from your chosen wake time, accounting for how long it typically takes you to fall asleep (sleep latency, configurable in Settings). Target multipliers reflect the real-world tradeoff between optimal performance and practical constraints.

Sources
  1. Åkerstedt T., Folkard S. (1997). The three-process model of alertness. Journal of Sleep Research, 6(S1), 1–11.
  2. Van Dongen H.P.A. et al. (2003). The cumulative cost of additional wakefulness. Sleep, 26(2), 117–126.

03 — Heart-Rate Variability (HRV)

HRV quantifies the fluctuation in time between consecutive heartbeats (RR intervals). Higher variability indicates a well-regulated autonomic nervous system and better recovery capacity.

RMSSD — Root Mean Square of Successive Differences

RMSSD = √[ (1/(N−1)) × Σᵢ (RRᵢ₊₁ − RRᵢ)² ]

RMSSD is the gold-standard time-domain HRV metric for monitoring autonomic recovery. It primarily reflects parasympathetic (vagal) modulation of the heart, which is suppressed by stress, overtraining, and illness. OutPerform computes RMSSD directly from beat-to-beat RR intervals recorded by Apple Watch during the sleep window; Google Health daily HRV values are used where beat-level data is unavailable.

Sources
  1. Task Force of the European Society of Cardiology and the North American Society of Pacing and Electrophysiology (1996). Heart rate variability: standards of measurement, physiological interpretation, and clinical use. European Heart Journal, 17(3), 354–381. doi:10.1093/oxfordjournals.eurheartj.a014868
  2. Plews D.J. et al. (2013). Heart rate variability in elite triathletes. International Journal of Sports Physiology and Performance, 8(5), 536–545.
  3. Buchheit M. (2014). Monitoring training status with HR measures: do all roads lead to Rome? Frontiers in Physiology, 5, 73. doi:10.3389/fphys.2014.00073

SDNN — Standard Deviation of NN Intervals

SDNN = √[ (1/(N−1)) × Σᵢ (RRᵢ − RR̄)² ]

SDNN reflects total autonomic variability (both sympathetic and parasympathetic). It is used as a fallback metric when beat-to-beat intervals are unavailable (it matches HealthKit's HeartRateVariabilitySDNN quantity type).

DFA-α1 — Detrended Fluctuation Analysis Short-Term Scaling Exponent

1. Integrate mean-centred RR series → profile yₖ 2. For box sizes n = 4…16 beats: - Split into non-overlapping windows of n beats - Linearly detrend each window - F(n) = RMS of residuals across all windows 3. α₁ = slope of log F(n) vs log n Interpretation: α₁ ≈ 1.0 = healthy fractal correlation α₁ < 0.75 = exercise / sympathetic dominance

DFA-α₁ is a nonlinear HRV index that reflects fractal correlation properties of heartbeat dynamics. A value near 1.0 characterises healthy, well-rested physiology. It decreases as exercise intensity or metabolic stress increases, and sustained values below 0.75 are associated with sympathetic nervous system dominance and insufficient recovery. This metric is rarely exposed by commercial trackers — OutPerform computes it from raw beat-to-beat series when available (Apple Watch).

Sources
  1. Peng C.K. et al. (1995). Quantification of scaling exponents and crossover phenomena in nonstationary heartbeat time series. Chaos, 5(1), 82–87. doi:10.1063/1.166141
  2. Rogers B. et al. (2021). Fractal correlation properties of HRV as a biomarker of endurance exercise intensity. Journal of Applied Physiology, 130(5), 1426–1436. doi:10.1152/japplphysiol.00124.2021
  3. Chalder T., Rogers B. (2022). DFA alpha1: from research to real-world application. Frontiers in Physiology, 13, 893818.

04 — Recovery Score

A 0–100 score that reflects how fully your body has recovered overnight. It combines your HRV, resting heart rate, respiratory rate, and sleep performance, all personalised to your own baselines.

Z-Score Normalisation (Personal Baseline)

z = (today_value − personal_mean) / personal_std component_score = clamp(50 + 22 × z, 0, 100) // z capped at ±2 std · 50 = your average · >50 = better than baseline

Each physiological signal is interpreted relative to your own historical baseline — not population norms. This personalisation is critical: a resting HR of 55 bpm is excellent for most people but poor for a trained athlete with a baseline of 42 bpm. The z-score maps to 50 at your personal mean, with ±2 standard deviations spanning the full 0–100 range.

Sources
  1. Flatt A.A., Esco M.R. (2016). Evaluating individual training adaptation with smartphone-derived heart-rate variability in a collegiate female soccer team. Journal of Strength and Conditioning Research, 30(2), 378–385.
  2. Plews D.J. et al. (2017). Performance keys for elite triathletes: HR and HRV-guided training. International Journal of Sports Physiology and Performance, 12(3), 329–338.

Component Baselines

SignalMean windowStd windowDirection
HRV (RMSSD)3-night rolling mean7-night rolling stdHigher = better
Resting HR7-night rolling mean14-night rolling stdLower = better
Respiratory rate14-night rolling mean14-night rolling stdLower = better
Sleep performanceAlready 0–100

The short 3-night mean for HRV reflects its natural high day-to-day variance; using a longer window would mask genuine acute changes. Resting HR and respiratory rate are more stable and warrant longer averaging windows for reliable baselines.

Sources
  1. Plews D.J. et al. (2013). Heart rate variability in elite triathletes. Int J Sports Physiol Perform, 8(5), 536–545.
  2. Bellenger C.R. et al. (2016). Monitoring athletic training status through autonomic heart rate regulation. Sports Medicine, 46(10), 1461–1486.

Recovery Score — Weighted Formula

base = (HRV × 0.40) + (RHR × 0.25) + (resp × 0.10) + (sleep_perf × 0.25) [re-normalised over available inputs if some are missing] recovery = clamp(base + temp_penalty + spo2_penalty, 0, 100)
InputDefault weightRationale
HRV (RMSSD)40%Most sensitive autonomic recovery marker available non-invasively.
Resting HR25%Elevated RHR is a reliable indicator of under-recovery and illness.
Sleep performance25%Sleep quality directly determines next-day physical and cognitive capacity.
Respiratory rate10%Early signal for illness and overtraining; secondary to HRV and HR.
Sources
  1. Kellmann M. (2010). Preventing overtraining in athletes in high-intensity sports. Scandinavian Journal of Medicine & Science in Sports, 20(S2), 1–10.
  2. Buchheit M. (2014). Monitoring training status with HR measures. Frontiers in Physiology, 5, 73.
  3. Esco M.R., Flatt A.A. (2014). Ultra-short-term heart rate variability indexes at rest and post-exercise in athletes. JSSM, 13(3), 535–541.

Skin Temperature Penalty

if deviation > +0.5 °C: penalty = −clamp((deviation − 0.5) × 10, 0, 10) if deviation < −0.3 °C: bonus = +1 (deep recovery signal) // deviation = tonight − 14-night personal mean

Elevated skin temperature during sleep is an early indicator of illness or systemic inflammation. The threshold at +0.5 °C above personal baseline is aligned with clinical studies showing this magnitude of increase precedes fever or immune response. A slight decrease is associated with deeper restorative sleep.

Sources
  1. Haghayegh S. et al. (2019). Before-bedtime passive body heating by warm shower or bath to improve sleep. Sleep Medicine Reviews, 46, 124–135. doi:10.1016/j.smrv.2019.04.008
  2. Mok J.M.Y. et al. (2023). Wrist skin temperature as a digital biomarker for illness detection and wellness monitoring. npj Digital Medicine, 6, 43.
  3. Kräuchi K. et al. (1999). Warm feet promote the rapid onset of sleep. Nature, 401(6748), 36–37.

SpO₂ Penalty

SpO₂ ≥ 96% → 0 penalty 94% ≤ SpO₂ < 96% → −5 points 90% ≤ SpO₂ < 94% → −15 points SpO₂ < 90% → −25 points

Normal nocturnal SpO₂ is ≥ 95%. Values below 94% suggest impaired oxygen delivery during sleep (obstructive sleep apnea, altitude, or respiratory illness). The penalty thresholds follow the clinical classification of nocturnal hypoxemia used in sleep medicine.

Sources
  1. American Thoracic Society (1999). Indications and standards for use of nasal CPAP in sleep apnea syndromes. American Journal of Respiratory and Critical Care Medicine, 144(3), 559–565.
  2. Punjabi N.M. (2008). The epidemiology of adult obstructive sleep apnea. Proceedings of the American Thoracic Society, 5(2), 136–143. doi:10.1513/pats.200709-155MG

Calibration Requirement

Recovery requires at least 14 nights of HRV and resting HR data before it is displayed. This matches the minimum needed for reliable personal baselines. The app shows a "Calibrating n/14" indicator during this period.

Sources
  1. Plews D.J. et al. (2012). Evaluating training adaptation with heart-rate measures: a methodological comparison. International Journal of Sports Physiology and Performance, 8(6), 688–691.

05 — Strain (TRIMP-Based)

Strain (0–21) quantifies the cardiovascular and muscular load placed on your body. It is based on TRIMP — Training Impulse — binned into heart-rate zones, then mapped to a logarithmic 0–21 scale.

HR Zones (Percentage of HRmax)

Zone% HRmaxTRIMP weight
Zone 0 (Recovery)< 50%0
Zone 1 (Very Light)50–60%1
Zone 2 (Light)60–70%2
Zone 3 (Moderate)70–80%3
Zone 4 (Hard)80–90%4
Zone 5 (Maximum)≥ 90%5

Heart-rate samples are binned into 1-minute buckets. The average HR per minute is assigned a zone weight, and TRIMP = sum of all minute weights.

Sources
  1. Banister E.W. (1991). Modeling elite athletic performance. In H.J. Green et al. (Eds.), Physiological Testing of Elite Athletes (pp. 403–425). Human Kinetics.
  2. Edwards S. (1993). The Heart Rate Monitor Book. Fleet Feet Press.

Workout Muscular-Load Multiplier

Strength training, HIIT, and yoga produce muscle damage that is not captured by heart rate alone. A type-specific multiplier is applied to the TRIMP of workouts. Steady-state cardio uses multiplier 1.0; strength work and HIIT use higher multipliers to account for the non-cardiovascular load component.

Sources
  1. Fleck S.J., Kraemer W.J. (2004). Designing Resistance Training Programs. 3rd ed. Human Kinetics.
  2. Schoenfeld B.J. (2010). The mechanisms of muscle hypertrophy and their application to resistance training. Journal of Strength and Conditioning Research, 24(10), 2857–2872.

TRIMP → 0–21 Strain Scale

strain = coefficient × ln(1 + TRIMP / scale) = 4.8 × ln(1 + TRIMP / 150) [defaults, user-adjustable] clipped to [0, 21]

A logarithmic mapping reflects the physiological reality that each additional unit of effort is harder to achieve at the upper end of the scale. Sedentary days produce single-digit strain; hard training days approach the high teens. The 0–21 range is a common convention in sports-science monitoring platforms.

Sources
  1. Morton R.H. et al. (1990). Modelling human performance in running. Journal of Applied Physiology, 69(3), 1171–1177.

06 — Acute:Chronic Workload Ratio (ACWR)

The ACWR compares recent training load (last ~7 days) to long-term load (~28 days) to identify the "sweet spot" of fitness-building without excessive injury risk.

Exponentially Weighted Moving Average

EWMA_acute = λ_a × strain_today + (1 − λ_a) × EWMA_acute_prev EWMA_chronic = λ_c × strain_today + (1 − λ_c) × EWMA_chronic_prev λ_acute = 2 / (7 + 1) = 0.250 // ~7-day responsiveness λ_chronic = 2 / (28 + 1) = 0.067 // ~28-day responsiveness ACWR ratio = EWMA_acute / EWMA_chronic

EWMA-based ACWR is preferred over simple rolling-average ACWR because it weights recent days more heavily, reducing lag, while still capturing the longer-term chronic load. This addresses a known limitation of simple rolling averages identified by Windt & Gabbett (2019).

Sources
  1. Gabbett T.J. (2016). The training-injury prevention paradox. British Journal of Sports Medicine, 50(5), 273–280. doi:10.1136/bjsports-2015-095788
  2. Hulin B.T. et al. (2016). The acute:chronic workload ratio predicts injury. British Journal of Sports Medicine, 50(4), 231–236. doi:10.1136/bjsports-2015-094817
  3. Windt J., Gabbett T.J. (2019). How do training and competition workloads relate to injury? British Journal of Sports Medicine, 53(5), 294–300.
  4. Williams S. et al. (2017). Better way to determine the acute:chronic workload ratio? British Journal of Sports Medicine, 51(3), 209–210.

ACWR Zones

RatioZoneInterpretation
< 0.8Under-trainingToo little recent load relative to baseline — detraining risk.
0.8 – 1.3Sweet spotBalanced acute and chronic load — optimal for adaptation.
1.3 – 1.5CautionElevated injury risk zone — monitor for fatigue signs.
> 1.5DangerHigh acute spike — injury risk substantially elevated.

Requires ≥ 14 prior days of strain data to be calculated.

07 — Training Monotony & Training Strain

Monotony measures how uniform your training load is over the past 7 days. High monotony (same intensity every day) suppresses adaptation and increases illness risk even when total load is moderate.

Foster's Monotony Formula

monotony = mean(last_7_strain) / std_dev(last_7_strain) training_strain = sum(last_7_strain) × monotony High monotony threshold: > 2.0

Monotony penalises low variance in training load. A well-varied week (hard–easy–hard alternation) produces a low monotony score. Monotony > 2.0 is associated with increased illness incidence in athletes. Training strain (volume × monotony) combines load and variety into a single overtraining risk indicator.

Sources
  1. Foster C. et al. (2001). A new approach to monitoring exercise training. Journal of Strength and Conditioning Research, 15(1), 109–115.
  2. Foster C. (1998). Monitoring training in athletes with reference to overtraining syndrome. Medicine & Science in Sports & Exercise, 30(7), 1164–1168.

08 — Readiness Score

Readiness integrates recovery, sleep performance, and training load into a single daily readiness-to-perform score (0–100).

ACWR Load Factor

if ACWR in [0.8, 1.3]: acwr_factor = 100 else: acwr_factor = clamp(100 − distance × 30, 0, 100) // distance = how far outside the sweet spot

Readiness Formula

readiness = (recovery × 0.60) + (sleep_performance × 0.25) + (acwr_factor × 0.15)
InputWeightRationale
Recovery60%Autonomic state and physiological readiness is the primary determinant.
Sleep performance25%Sleep quality directly predicts next-day cognitive and physical capacity.
ACWR load factor15%Training load context — accumulated fatigue or detraining risk.
Sources
  1. Hecksteden A. et al. (2017). Individual response to exercise training. Journal of Applied Physiology, 118(12), 1551–1568.
  2. Halson S.L. (2014). Monitoring training load to understand fatigue in athletes. Sports Medicine, 44(S2), 139–147. doi:10.1007/s40279-014-0253-z

09 — VO₂ Max

Maximal oxygen uptake (mL/kg/min) is the single best predictor of cardiovascular fitness and long-term health outcomes. OutPerform reads VO₂ max directly from Apple Health (estimated by Apple Watch using heart-rate response to walking/running) or from Google Health.

VO₂ Max Estimation

Apple Watch estimates VO₂ max from the relationship between heart rate and pace during outdoor runs or brisk walks using a validated algorithm (Firstbeat Technologies). The value is stored in HealthKit as HKQuantityTypeIdentifierVO2Max in mL/kg/min. OutPerform reads this value directly — it does not independently compute VO₂ max.

VO₂ max categories for health-risk stratification follow ACSM guidelines, which differentiate norms by age and sex.

Sources
  1. Kaminsky L.A. et al. (2022). Cardiorespiratory fitness and cardiovascular disease. Mayo Clinic Proceedings, 97(6), 1154–1164.
  2. Ross R. et al. (2016). Importance of assessing cardiorespiratory fitness in clinical practice. Circulation, 134(24), e653–e699. doi:10.1161/CIR.0000000000000461
  3. American College of Sports Medicine (2018). ACSM's Guidelines for Exercise Testing and Prescription. 10th ed. Wolters Kluwer.

10 — Maximum Heart Rate

HRmax sets the ceiling for all HR-zone calculations. OutPerform offers three methods and selects the best available by default.

Gellish Non-Linear Formula

HRmax_Gellish = 192 − 0.007 × age²

The Gellish formula is more accurate than the classic Fox & Haskell "220 − age" across the full age range, particularly in older adults, because the age-related decline in HRmax is not linear. It was validated in a prospective study of 132 participants across ages 21–81.

Sources
  1. Gellish R.L. et al. (2007). Longitudinal modeling of the relationship between age and maximal heart rate. Medicine & Science in Sports & Exercise, 39(5), 822–829. doi:10.1097/mss.0b013e31803349c6
  2. Robergs R.A., Landwehr R. (2002). The surprising history of the "HRmax = 220 − age" equation. JEPonline, 5(2), 1–10.

Personalised HRmax (Learned)

HRmax_learned = 95th percentile of all recorded HR samples HRmax_used = max(HRmax_Gellish, HRmax_learned) [default: "max" method]

When sufficient HR history exists (> 50 samples), the 95th percentile of observed heart rates provides a personalised ceiling. The "max" method uses whichever is higher — protecting against the formula underestimating a fit individual's true HRmax while avoiding dependence on a single outlier sample. The user can override to Gellish-only or learned-only in Advanced Settings.

11 — Blood Oxygen (SpO₂)

Peripheral oxygen saturation measured during sleep. OutPerform reads SpO₂ from Apple Health (Apple Watch) or Google Health (Fitbit devices).

Clinical Thresholds

SpO₂ rangeInterpretation
≥ 95%Normal. No clinical concern.
92–94%Mild hypoxemia. Possible sleep-disordered breathing or altitude effect.
88–91%Moderate hypoxemia. Evaluation recommended.
< 88%Severe hypoxemia. Clinical assessment warranted.

Values below 70% are filtered as physiologically implausible (sensor artifact). OutPerform flags nightly averages below 94% in the Body health monitor.

Sources
  1. Punjabi N.M. (2008). The epidemiology of adult obstructive sleep apnea. Proc Am Thorac Soc, 5(2), 136–143.
  2. American Academy of Sleep Medicine (2014). International Classification of Sleep Disorders. 3rd ed.
  3. Lévy P. et al. (2015). Obstructive sleep apnoea syndrome. Nature Reviews Disease Primers, 1, 15015.

12 — Skin Temperature

Nightly wrist skin temperature deviation from personal baseline. Available on Apple Watch Series 8+ and Fitbit Sense/Versa devices.

Deviation from Personal Baseline

deviation = tonight_temperature − 14-night_personal_mean Alert threshold: deviation > +0.5 °C above personal baseline

Because absolute skin temperature varies widely between individuals, all alerts are relative to the user's personal 14-night baseline. A deviation of +0.5 °C or more is associated with illness onset or systemic inflammation. This metric is used to adjust the recovery score (see Section 4) and to flag potential illness in the Body health monitor.

Sources
  1. Mok J.M.Y. et al. (2023). Wrist skin temperature as a digital biomarker for illness detection and wellness monitoring. npj Digital Medicine, 6, 43. doi:10.1038/s41746-023-00778-y
  2. Gustafsson M. et al. (2016). Changes in wrist skin temperature during fever measured with a wrist worn device. PLOS ONE, 11(1), e0146581.
  3. Kräuchi K. (2007). The thermophysiological cascade leading to sleep initiation in relation to phase of entrainment. Sleep Medicine Reviews, 11(6), 439–451.

Disclaimer. OutPerform is a wellness application, not a medical device. The algorithms documented here are derived from published sports-science and sleep research for informational and motivational purposes only. They are not intended to diagnose, treat, cure, or prevent any disease or medical condition. All scores are computed on your device and are not reviewed by a healthcare professional. Consult a qualified clinician for any health concern.

Page last updated: June 2026. All cited studies were accessed from their respective publisher or institutional repository. DOI links lead to publisher pages. Some articles may be behind a paywall; accepted manuscripts are often available through PubMed.

← Back to OutPerform  ·  Privacy policy