A coach notices: an athlete complains of fatigue, HRV has dropped 30%, and tests aren't improving. Yet the training log shows overload. With unstable Wi-Fi, data may be lost, and HRV intervals contain artifacts — without proper filtering and interpolation, the AI model will err. Without continuous monitoring and AI analysis, it's hard to distinguish overtraining from the onset of illness. We build systems that turn raw wearable data into actionable insights: recovery assessment, performance prediction, and early failure warnings.
Wearable devices — Whoop, Oura Ring, Garmin, Apple Watch — continuously collect biometrics. An AI system aggregates these streams, computes a Recovery Score, a personal physiological baseline, and long-term trends. The result is an objective picture of readiness for load. A personalized baseline is 2 times more sensitive than population norms for detecting deviations. Stack: Python, PyTorch, PostgreSQL with TimescaleDB for time-series storage, MLflow for experiment tracking.
How We Do It
How AI Analyzes Wearable Sensor Data
Cardiovascular metrics: HRV, resting heart rate, SpO2. Activity: steps, GPS, gyroscope. Sleep: REM, deep, light. Skin temperature: deviation from baseline — indicator of illness.
Recovery Score Model
def calculate_recovery_score(hrv_today, hrv_baseline, sleep_quality, sleep_duration, resting_hr, resting_hr_baseline): hrv_score = min(1.0, hrv_today / hrv_baseline) sleep_score = (sleep_quality * 0.5 + min(1.0, sleep_duration / 8.0) * 0.5) hr_score = max(0, 1.0 - (resting_hr - resting_hr_baseline) / resting_hr_baseline) recovery = hrv_score * 0.5 + sleep_score * 0.35 + hr_score * 0.15 return recovery * 100 Recovery < 33% — red, 34-66% — yellow, 67%+ — green.
Why Personal Physiological Baseline Matters
The key principle is comparison with one's own baseline, not population "norms":
class PersonalBaseline: def __init__(self, lookback_days=30, percentile=50): self.lookback = lookback_days self.percentile = percentile def fit(self, history): self.hrv_baseline = np.percentile(history['hrv'], self.percentile) self.hr_baseline = np.percentile(history['resting_hr'], self.percentile) self.sleep_baseline = np.percentile(history['sleep_hours'], self.percentile) return self def deviation(self, today): return { 'hrv_dev': (today['hrv'] - self.hrv_baseline) / self.hrv_baseline, 'hr_dev': (today['resting_hr'] - self.hr_baseline) / self.hr_baseline, 'sleep_dev': (today['sleep_hours'] - self.sleep_baseline) / self.sleep_baseline } Sports Performance Prediction
Fitness-Fatigue model (Banister):
Performance(t) = Fitness(t) - Fatigue(t) Fitness(t) = Σ TSS(i) × exp(-(t-i)/τ_fitness), τ=45 days Fatigue(t) = Σ TSS(i) × exp(-(t-i)/τ_fatigue), τ=15 days Personal τ are estimated via nonlinear optimization (scipy.optimize). The model designs tapering for competition. Saves up to 50% of coach's time on manual data analysis.
Early Illness Detection
def illness_risk_score(temp_deviation, hrv_drop, hr_elevation, symptom_report): if temp_deviation > 0.5 and hrv_drop < -0.2 and hr_elevation > 5: return 0.8 return 0.1 Research Stanford COVID study shows: wearables detected COVID 0-2 days before symptoms in 63% of participants. Reduces medical consultation costs through early detection.
Long-term Progress
VO2max estimation via Firstbeat methodology (error ±3-5 ml/(kg·min)). Analysis of load dynamics over 12-52 weeks, adaptation through resting HR and HRV trends.
What We Provide
- Documentation on API and data model
- Dashboard with Recovery Score, prediction, and trends
- REST API for integration into your ecosystem
- Team training (3 sessions)
- Technical support for 3 months
- Source code of models (upon agreement)
Process of Work
- Analytics: requirements gathering, selection of wearable APIs.
- Design: data ingestion architecture, Recovery Score model.
- Implementation: API integration, ML models (fitness-fatigue, illness detection).
- Testing: validation on real data, A/B test.
- Deployment: dashboard + REST API, team training.
Signal Processing: Artifact Filtering
Raw data from wearables contains outliers and gaps. For HRV intervals, we apply a Berthou filter: remove RR intervals deviating >20% from median of neighbors. Gaps are filled via cubic interpolation for gaps ≤5 minutes and forward extrapolation with confidence degradation for gaps >5 minutes. For accelerometer and gyroscope — median filter with window of 5 points removes impact artifacts during wear. Proper preprocessing reduces Recovery Score RMSE by 12–18% compared to raw data. Interpolation quality is verified on control gaps intentionally inserted into the test dataset.
Estimated Timelines
| Module | Scope of Work | Estimated Time |
|---|---|---|
| Integration with wearables | Connect 2-3 APIs (Garmin, Whoop, Apple HealthKit), unified data collection | 2-3 weeks |
| Recovery Score | Model implementation based on HRV, sleep, and heart rate; baseline calibration | 2-3 weeks |
| Performance Prediction | Fitness-fatigue model with personal τ, tapering scheduler | 4-6 weeks |
| Early Illness Detection | Logic based on temperature, HRV, and heart rate; threshold tuning | 1-2 weeks |
| Dashboard and API | Web interface + REST API for external systems, mobile ready | 4-8 weeks |
| Parameter | Population Norm | Personal Baseline |
|---|---|---|
| Detection Sensitivity | 0.4 | 0.85 |
| Calibration Time | 0 days | 30 days |
| Adaptation to Changes | No | Yes |
Get a consultation from our engineers: we will analyze your data and find the right architecture. Contact us to evaluate your project. Request demo access to a working prototype. Our experience: 5 years in the AI/ML solutions market, over 20 successful projects in sports analytics. We guarantee quality and timely delivery.







