---
id: wiki-2026-0508-olympic-training-protocols
title: Olympic Training Protocols
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Elite Athlete Training, Periodization, Olympic Periodization]
duplicate_of: none
source_trust_level: A
confidence_score: 0.85
verification_status: applied
tags: [sports-science, training, periodization, polarized, recovery, wearables]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack: { language: Python, framework: pandas }
---

## 한 줄
엘리트 선수의 4년 사이클을 매크로/메조/마이크로 주기로 분할하고, 폴라라이즈드 강도 분포 + 회복 모니터링 + 웨어러블 데이터로 적응을 최적화한다.

## 핵심
- **Periodization**:
  - **Macrocycle** (4년/1년) — Olympic peak 목표.
  - **Mesocycle** (3-6주) — 일반 준비/전문 준비/시합/이행.
  - **Microcycle** (1주) — 일별 강도/볼륨 분배.
  - **Block periodization** (Issurin) — 한 능력 집중 후 전이.
- **강도 분포**:
  - **Polarized (80/20)**: 80% Z1 (저강도), 20% Z3 (고강도). 지구력 종목 표준.
  - **Pyramidal**: Z1 > Z2 > Z3.
  - **Threshold**: Z2 비중 큼 (단축 시즌).
- **회복**: HRV, sRPE, sleep, CK/cortisol, RESTQ-Sport 설문.
- **웨어러블 (2026)**: WHOOP, Garmin HRM-Pro Plus, Polar Vantage V3, Catapult GPS, Oura Ring.
- **Tapering**: 시합 2-3주 전 볼륨 41-60% 감소, 강도 유지.

## 💻 패턴

```python
# 1) ACWR (Acute:Chronic Workload Ratio) — 부상 위험 지표
import pandas as pd

def acwr(loads: pd.Series):
    """loads: 일별 sRPE*duration"""
    acute = loads.rolling(7).mean()
    chronic = loads.rolling(28).mean()
    return acute / chronic  # 0.8-1.3 sweet spot, >1.5 위험
```

```python
# 2) HRV 기반 daily readiness
import numpy as np
def readiness(rmssd_today, rmssd_baseline_7d):
    z = (np.log(rmssd_today) - np.log(rmssd_baseline_7d).mean()) \
        / (np.log(rmssd_baseline_7d).std() + 1e-6)
    if z >= 0.5: return "go_hard"
    if z >= -0.5: return "normal"
    if z >= -1.0: return "easy"
    return "rest"
```

```python
# 3) Polarized 강도 분포 검증
def intensity_distribution(zone_minutes):
    total = sum(zone_minutes.values())
    return {k: round(100 * v / total, 1) for k, v in zone_minutes.items()}
# 목표: {Z1: 75-80, Z2: 5-10, Z3: 15-20}
```

```python
# 4) Banister fitness-fatigue 모델
import numpy as np
def banister(loads, k1=1.0, k2=2.0, tau1=42, tau2=7):
    fitness = np.zeros(len(loads)); fatigue = np.zeros(len(loads))
    for i in range(1, len(loads)):
        fitness[i] = fitness[i-1] * np.exp(-1/tau1) + loads[i]
        fatigue[i] = fatigue[i-1] * np.exp(-1/tau2) + loads[i]
    performance = k1 * fitness - k2 * fatigue
    return performance, fitness, fatigue
```

```python
# 5) Tapering 스케줄 생성 (지수 감소)
def taper_volume(base_min, n_days=14, reduction=0.5):
    import numpy as np
    decay = np.linspace(0, np.log(reduction), n_days)
    return [round(base_min * np.exp(d)) for d in decay]
```

```python
# 6) Catapult GPS 외부 부하 요약 (player load)
def player_load(ax, ay, az, hz=10):
    import numpy as np
    a = np.stack([ax, ay, az])
    diff = np.diff(a, axis=1)
    return np.sqrt((diff ** 2).sum(0)).sum() / (hz * 1.0)
```

```python
# 7) sRPE 기반 weekly load 시각화
import matplotlib.pyplot as plt
def plot_load(df):
    df["load"] = df["rpe"] * df["duration_min"]
    df.groupby("week")["load"].sum().plot(kind="bar")
    plt.axhline(y=df["load"].rolling(7).mean().mean(), color="red", ls="--")
```

## 결정 기준

| 종목 | 강도 분포 |
|---|---|
| 마라톤/사이클/노 (지구력) | Polarized 80/20 |
| 800-3000m (혼합) | Pyramidal |
| 단거리/역도 (파워) | Block (max strength → power → speed) |
| 팀스포츠 시즌 | Conjugate / undulating |

| 부하 신호 | 액션 |
|---|---|
| ACWR > 1.5 | 부하 감소, 회복일 추가 |
| HRV z < -1 (3일 연속) | rest day |
| sRPE 주합 > 평균+2σ | 다음 주 deload |

## 🔗 Graph
- 인접: [[HRV]]

## 🤖 LLM 활용
- 일별 readiness + 캘린더 기반 자동 워크아웃 조정.
- 코치 노트에서 부상 신호 추출.
- ACWR/HRV 트렌드 → 자연어 주간 리포트.

## ❌ 안티패턴
- 시합 직전 신규 자극 도입 (over-reach).
- HRV 단일 측정으로 결정 (7-28일 baseline 필요).
- Polarized 80/20을 모든 종목에 일괄 적용.
- ACWR만 보고 절대 부하 무시.

## 🧪 검증
- 시즌 PB 갱신율, 상대 PB.
- 부상 발생률 (per 1000 hours).
- VO2max, lactate 곡선 시계열.

## 🕓 Changelog
- 2026-05-08 Phase 1 자동 생성
- 2026-05-10 Manual cleanup — house style 적용
