--- 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 적용