Source:
report/version10/lab-leader/v10-02_vq_multi_model_design.md
v10-02: Multi-Model VQ × Structured Codebook × Peak-Specialized FL — 정식 설계서¶
본 문서는 초안
v10-01_fl_aspect.md의 16-섹션 구조를 유지하면서, ADR-010(2026-04-25 Accepted) 및 user 승인 수정사항을 반영한 정식 설계서이다. 초안은 archival 용으로 보존되며 본 문서가 engineer dispatch 기준이 된다.
0. Executive Summary¶
- 문제 재정의: v6~v9 전체 phase는 "DLinear 대체 VQ-친화 backbone 탐색" 축에서 전개되었고, v9-06 에서 (1) NBEATSx — PAPE 점추정 1위 34.58 (통계 비유의, 95% CI [30.71, 38.46]), (2) SCINet — v9-06 Watch PASS (PAPE 42.35, HR@1 34.48, MSE 20-model 1위 0.498) 두 후보가 "VQ 이식 실험 진입 자격" 을 획득했다. v10 은 backbone 탐색 phase 를 종료하고, 4 모델 × 4 VQ 전략 이식 phase 로 전환한다.
- 핵심 가설 (H10-1~5): 각 모델 아키텍처의 귀납 편향(inductive bias) 에 대응하는 VQ 구조를 이식했을 때, codebook collapse 없이 peak 특화 FL 성능 개선이 일어나며, "구조 정합(structural match) 이 비정합보다 PAPE 를 낮춘다" (H10-5).
- 실험 설계: E1 NBEATSx + Decomposition CB (3 CB: trend/seasonal/generic), E2 NHITS + Frequency-Band CB (3 CB: low/mid/high-freq), E3 SCINet + Residual Quantization (3 level × M=32), E4 Crossformer + Product Quantization (4 sub-space × M=16). 공정 비교를 위해 단변량(univariate), UMass Smart Home 100 가구, Train/Cold 50/50 split, seed=42 단일 로 통일.
- 계승: v6 R1b peak-weighted loss α=2.0, v8/ADR-008 Memory Alignment γ=0.95/δ=0.7 (collapse 시 γ=0.8 rollback), v9-06 EpochMLflowCallback 강제 (CLAUDE.md 규약).
- 폐기: B0/B1/B2/B3 신규 재학습 전면 스킵 (v9-01/v9-06 recap 인용만). Ablation (Cold unfreeze, 3-seed 확장, ETSformer) 은 결과 관찰 후 addendum 의사결정 대기.
- 성공 기준: v9-05/06 Strict (PAPE ≤ 43 AND HR@1 ≥ 37) 유지. Watch 는 재정의 필요 (§10 경고). H10-5 통계적 근거는 단일 seed 한계로 약함 (§11 R3), 3-seed 확장 트리거 명시.
- 실행 방식: engineer 순차 구현 → 본 실험 subprocess 4 병렬 launch (GPU OOM 시 순차 fallback) → exp-expert 4 병렬 dispatch 로 E1-E4 결과 수집.
1. 실험 목적 (Experiment Objective)¶
1.1 핵심 연구 질문 (Core Research Question)¶
"peak-specialized FL 을 위한 VQ codebook 이식 시, 각 backbone 의 자연 분해 공간(natural decomposition space) 에 structurally-matched VQ 구조를 매핑하면 (a) codebook collapse 를 회피할 수 있는가, (b) v9-01/06 baseline (PAPE: B0=42.51, B1=43.64, R1b=37.36, NHITS=39.26) 대비 peak 예측 성능이 개선되는가, (c) 4가지 (backbone × VQ-전략) 조합에서 '구조 정합' 이 '비정합' 보다 일관된 PAPE 우위를 보이는가?"
1.2 가설 (Hypotheses)¶
ADR-010 §가설 H10-1~5 를 본 설계서의 falsifiable 형태로 정식화.
| ID | 가설 | Falsification 조건 (모두 PAPE=%, HR@1=%, CB util=codebook utilization) |
|---|---|---|
| H10-1 | NHITS + Frequency-band CB 에서 high-freq CB 가 peak 정보를 선택적으로 집중한다 | PAPE ≥ 42.51 (= B0) 또는 high-freq CB util < 50% |
| H10-2 | NBEATSx trend block 의 basis expansion (n_polynomials=3) 계수가 FL round 간 drift 를 수학적으로 낮은 차원(poly coeff 3-d)에서 제한 → alignment anchor 역할을 한다 | round 간 trend block θ-계수의 weighted L2 drift 가 generic block 대비 통계적으로 낮지 않음 (round-wise std, 1-sided Wilcoxon signed-rank p ≥ 0.1) — 외생변수 없이도 성립해야 함 (§3.6 단변량 통일) |
| H10-3 | SCINet + Residual Quantization (RQ, 3 level × M=32) 은 동일 통신량(총 code budget ≈ 96) 조건에서 flat VQ (M=96 단일) 대비 collapse 를 회피한다 | 전체 CB util < 50% 또는 MSE > 0.515 (= B0) |
| H10-4 | Crossformer + Product Quantization (PQ, 4 sub × M=16) 는 sub-space 분할 덕분에 UMass 50 가구 cold-start (Train 50 가구로 학습 → Cold 50 가구 few-shot 평가) 에서 4 모델 중 가장 낮은 PAPE 를 달성한다 | cold-start PAPE 순위에서 Crossformer+PQ 가 1위가 아님 (동순위 tie 불포함) |
| H10-5 | 모델 아키텍처 × VQ 구조 정합성이 유의미 — 4 조합(정합)이 4 대조군(비정합 swap, 예: NBEATSx+PQ, SCINet+DecompCB) 대비 PAPE 평균 우위 | 4 정합 조합의 PAPE mean 이 4 비정합 대조군의 PAPE mean 보다 낮지 않음. 단일 seed(42) 기준이므로 통계적 유의 주장 불가 (§11 R3) — 점추정 순위만 검증 |
H10-2 재작성 근거 (v10-01 초안에서 변경): 초안의 "외생변수 alignment anchor" 가설은 user 결정 §3.6 단변량 통일 에 따라 성립 불가. 외생변수 없이도 NBEATSx 의 basis expansion (Oreshkin 2019 / Olivares 2023) 이 trend/seasonal block 의 θ-space 를 저차원 다항식/조화함수 계수로 제한하므로, 이 저차원 θ 자체가 FL aggregation 시 drift 를 수학적으로 제한하는 anchor 역할을 할 수 있다. NeuralForecast docs 의 interpretable config 에서 n_polynomials=3, n_harmonics=2 가 기본이므로 trend block θ 차원 = 3 (polynomial coeff 3개) 로 매우 낮다. 이 저차원성 자체가 실증적으로 FL drift 를 억제하는지가 H10-2 의 falsifiable 주장.
1.3 성공 기준 (Success Criteria, 정량)¶
| 레벨 | 조건 (모두 seed=42 단일, UMass Train 50 가구 기준) |
|---|---|
| Strict Pass (primary) | 4 E 중 1개 이상*이 PAPE ≤ 43 AND HR@1 ≥ 37 — v9-05/06 gating 유지 |
| Watch Pass (보조) | 4 E 중 2개 이상이 PAPE ≤ 43 OR* HR@1 ≥ 37 (v9-05 정의, §10 Watch 재정의 경고) |
| Structural Match Supported | H10-5 점추정 기준 성립 (4 정합 조합 mean PAPE < 4 비정합 대조군 mean PAPE) |
| Collapse-Free | 4 E* 전체에서 codebook utilization ≥ 20% (Stage 2 smoke 단계 alert 임계) |
| Peak-Specialization Supported | E1 (decomp CB) 에서 trend vs generic CB 의 usage 분리 관찰 + E2 에서 high-freq CB 가 peak 이벤트에 선택적 활성 |
1.4 선행 연구 근거 (Literature Basis — web search)¶
- NBEATSx (Olivares et al. 2023, Int'l J. Forecasting; arXiv:2104.05522): interpretable config 에서 polynomial + harmonic basis 로 trend/seasonality 분해,
n_polynomials=3이 기본. basis expansion 이 θ-space 해석성 제공. 전력가격 예측에서 NBEATS 대비 5% 개선. - SVQ for Spatio-Temporal Forecasting (arXiv:2312.03406, ICML 2024): VQ plug-in 이 일반적으로는 예측 오차를 증가시키나 sparse VQ 와 Residual-VQ 는 개선. E1/E3 설계 근거 (일반 VQ 대신 구조화된 RQ/sparse VQ 사용).
- ReCast: Codebook-Assisted Lightweight Forecasting (arXiv:2511.11991, 2025): patch-wise quantization + residual modeling 이 경량 예측에 효과적. "quantization path = regular structure + residual path = irregular variation" 의 2-path 분해 논리.
- LSCodec: Group Residual Vector Quantization for TS (Appl. Intelligence 2025): trend 와 fluctuation 을 VQ 의 guiding principle 로 명시. E1 decomposition CB (trend/seasonal/generic) 의 2025 직접 선례.
- VQ-TR (OpenReview IxpTsFS7mh): transformer 내부 표현에 basis-expansion-style quantization. E1 NBEATSx theta-space CB 매핑의 가장 가까운 architectural analog.
- SimVQ: One Linear Layer for Representation Collapse (ICCV 2025; arXiv:2411.02038): codebook collapse 해결용 단일 linear reparameterization. Stage 2 smoke 에서 collapse 발생 시 (§11 R2) fallback candidate.
- Addressing Codebook Collapse with EMA/commitment (Huh et al. ICML 2023): EMA ≡ commitment loss β=1.0 등가성 — v8 V5 RESET 과 동질. ADR-008 γ=0.95/δ=0.7 설정의 이론적 배경.
- Crossformer (Zhang & Yan, ICLR 2023): Dimension-Segment-Wise (DSW) embedding + Two-Stage Attention. sub-space 분할 개념이 PQ 와 자연스럽게 매핑. 단 v9-06 에서 5-apt × 3-seed 평균 PAPE 44.45 로 boundary FAIL.
- Product Quantization (Jégou et al. 2011, TPAMI): d-차원 벡터를 m 개 sub-space 로 분할, 각 sub-space 에 독립 codebook — 총 code 수 M^m 이지만 통신은 m × log2(M) bits.
- Residual Quantization / RQ-VAE (Lee et al. CVPR 2022): L level 의 계층적 quantization, 각 level 은 이전 level residual 만 quantize. fine-grained 정보 보존.
2. 배경 및 동기 (Background & Motivation)¶
2.1 왜 지금 이 실험인가¶
v6~v9 의 축적된 관찰:
- VQ utilization 과 PAPE 의 decoupling (ADR-009 archive): v6 R1b 는 codebook util 4.06% (near-collapse) 에서 PAPE 38.40 달성. VQ 는 "정보 채널" 이 아닌 "regularizer" 로 작동.
- 모델 아키텍처가 peak 예측의 dominant driver (v9-06): NBEATSx PAPE 34.58 점추정 1위, SCINet MSE 20-model 1위 0.498. DLinear 기반 v6 R1b (37.36) 는 여전히 통계적 구별 불가 범위 내.
- "decomposition + attention" 계열 구조적 약점 (v9-05/06): Autoformer/Informer/FEDformer + Pyraformer/Crossformer 5/5 PAPE ≥ 44 FAIL 재현. 단 Crossformer 의 cross-dimension attention 은 PQ 와 sub-space 분할 논리가 자연 매핑 → E4 에서 재도전 가능.
- DLinear+VQ collapse 재발 위험 (ADR-009): V4/V5 단계에서 util 4-86%, PAPE 53-57 발산. E1-E4 는 같은 실수 반복 방지 를 위해 각 backbone 의 자연 분해 공간을 codebook 축으로 매핑.
2.2 전체 연구 목표와의 연결¶
논문 contribution 축은 "peak-weighted loss + FL aggregation + VQ as communication-efficient regularizer" 의 3축 조합. v10 은 세 번째 축을 "DLinear + flat VQ" 라는 단순 조합 대신 "backbone-specific structured VQ" 로 승격시켜, "왜 VQ 가 collapse 해도 peak 예측에 기여하는가" 를 아키텍처별로 해체 · 재조립하는 phase 이다.
2.3 웹 서치 결과 요약¶
- VQ × time series 2025 주류 방향: (a) sparse VQ / Residual-VQ 가 flat VQ 대비 forecasting error 낮음 (SVQ arXiv:2312.03406), (b) trend/fluctuation guiding principle 로 group residual VQ 설계 (LSCodec 2025), (c) patch-wise quantization + residual path 의 2-path 분해 (ReCast 2025). 세 방향 모두 "한 codebook 이 모든 것을 담당" 하지 않고 구조적으로 분리 — v10 의 E1 decomp CB / E2 freq CB / E3 RQ / E4 PQ 는 이 흐름과 정합.
- Codebook collapse 2025 해결: SimVQ 단일 linear reparameterization (ICCV 2025), GM-VQ Gaussian mixture VQ (commitment 없이도 utilization 확보). ADR-010 에서 γ=0.8 rollback 이후에도 collapse 지속 시 이 두 기법 중 1 개 도입 (addendum 절차).
- Crossformer + PQ: 직접 결합 선례는 2025 검색 기준 없음 (web search 확인). 단 Crossformer 의 cross-dimension attention 자체가 variable 축을 sub-space 화한 구조이므로 PQ 와 구조적 호환성이 높다고 판단. v10 E4 가 novel contribution 후보.
- NBEATSx 의 FL alignment 선례: 직접 선례 없음 (web search). v10 H10-2 (trend θ 저차원성 = FL drift anchor) 가 novel hypothesis.
3. 실험 설계 (Experiment Design)¶
3.1 독립 변수 (Independent Variables)¶
| 축 | 수준 |
|---|---|
| Backbone × VQ 전략 (primary IV) | {E1 NBEATSx+DecompCB, E2 NHITS+FreqCB, E3 SCINet+RQ, E4 Crossformer+PQ} |
| CB 개수 / level / sub-space | E1: 3 CB × M=32 each / E2: 3 CB × M=32 each / E3: 3 level × M=32 each / E4: 4 sub × M=16 each (총 code budget 거의 동일 ≈ 96) |
| FL vs Local | 각 E* 에 대해 {FL (FedAvg + Memory Alignment γ=0.95/δ=0.7), Local-only} 2 조건 (H10-3/H10-5 aggregation 기여도 분리용) |
| Cold-start 여부 | {Train 50 가구 (in-fed), Cold 50 가구 (held-out, few-shot 168h)} — H10-4 |
3.2 종속 변수 / 메트릭 (Dependent Variables / Metrics)¶
Primary: - PAPE (%) — peak hour absolute percentage error (v6 정의 계승) - HR@1, HR@2 (%) — peak hour hit ratio tol=1/2
Secondary: - MSE, MAE, MAPE, sMAPE (v9-05/06 과 동일 정의) - Codebook utilization (%) per CB — E1 3개, E2 3개, E3 3×3=9, E4 4개 - Per-CB usage entropy — peak vs non-peak window 분리 집계 (H10-1/H10-2 정성 증거) - Round-wise trend block θ drift (L2) — H10-2 검증용 E1 전용 - Cold-start PAPE after 168h few-shot — H10-4 전용
통계적 요구사항: seed=42 단일이므로 점추정 순위 와 per-household breakdown (5 apt + Cold 50가구 샘플) 만 보고. 3-seed std / p-value / CI 보고 금지 (통계 비유의 표현 강제, v9-06 Major 2 교훈). 3-seed 확장 트리거는 §11 R3.
3.3 통제 변수 (Control Variables)¶
- 데이터: UMass Smart Home 100 가구 (EC50 = Energy Community 50가구의 확장, 동일 데이터 소스) — year=2016 기준, min_hours=7000 필터 후 상위 100가구. 모든 E* 동일 데이터.
- 입출력: input_size=96, horizon=24. features=S (univariate).
- 스케일러: standard scaler (v6/v9 계승).
- Optimizer / lr: AdamW, lr=1e-3 (NF 계열 v9-06 계승) / SCINet 은 TSLib default Adam lr=1e-3.
- Max steps / epochs: NF 계열 max_steps=500 (v9-06 계승, P3 한계 인지 — §11 R5). TSLib 계열 train_epochs=50, patience=5.
- Batch size: 32.
- Seed:
RANDOM_SEED = 42(단일). - Peak-weighted loss: α=2.0, β=0.1 (v6 R1b / v7/v8 계승).
- Memory Alignment 초기값: γ=0.95, δ=0.7 (ADR-008 계승). Collapse 발생 시 γ=0.8 rollback (§11 R2).
- FL aggregation: FedAvg with Memory Alignment. Rounds = 30 (v6 R1b 계승). Local epochs per round = 3.
- 단변량 통일 (외생변수 제거): NBEATSx (E1) 에서 hour/dayofweek exogenous features 제거. E1-E4 모두
y단일 입력으로 공정 비교. H10-2 재작성의 전제.
3.4 베이스라인 (Baselines — 전면 스킵, recap 인용)¶
재학습 없음. 아래 수치는 v9-01 recap 및 v9-06 summary 에서 인용.
| ID | Model | PAPE | HR@1 | HR@2 | MSE | 출처 | seeds/n |
|---|---|---|---|---|---|---|---|
| B0 | DLinear Local | 42.51 | 34.58 | 46.60 | 0.515 | v9-01 recap | seed=42, n=5 |
| B1 | DLinear FedAvg | 43.64 | 36.92 | 49.39 | 0.505 | v9-01 recap | seed=42, n=5 |
| B2 | NHITS (NF) | 39.26 | 22.29 | 31.71 | 0.648 | v9-01 recap | seed=42, n=5 |
| B3 | R1b (FedPM+DLinear) | 37.36 | 21.27 | 32.42 | 0.629 | v9-01 recap | seed=42, n=5 |
| — | NBEATSx (v9-06) | 34.58 (점추정) | 22.86 | 32.76 | 0.671 | v9-06 summary | {42,7,123}, n=15 |
| — | SCINet (v9-06) | 42.35 | 34.48 | 46.38 | 0.498 | v9-06 summary | {42,7,123}, n=15 |
| — | Chronos-Bolt ZS | 44.98 | 37.71 | 48.56 | 0.555 | v9-01 recap | seed=42, n=5 |
수치 출처 각주:
v10-01 초안의 "NHITS 39.73" / "R1b 38.40" 은 v6 기록 (MLflow run
5e040971계열) 이며 v9-01 recap 재계산 기준으로는 NHITS 39.26 / R1b 37.36 이다. 두 출처의 차이는 (a) seed 변동, (b) test window 경계 정의의 미세 차이 (v6 는 2016 전체 vs v9-01 은 min_hours 필터 후 동일 window) 에서 발생. 본 설계서는 v9-01/06 recap 수치를 정식 기준 으로 채택한다.
gating 임계: v9-05/06 Strict (PAPE ≤ 43 AND HR@1 ≥ 37) 유지. Watch 정의 는 v10 에서 재정의 필요성 경고 (§10).
3.5 데이터셋 (Dataset)¶
- 소스: UMass Smart Home Dataset (https://traces.cs.umass.edu/index.php/Smart/Smart). year=2016 범위.
- 가구 수: 100 가구 (EC50 확장판). min_hours=7000 filter 후 상위 100 가구.
- Train/Cold split: 50 / 50. Train 50 가구 = federation 참여 (학습 + per-household test). Cold 50 가구 = held-out (학습 중 제외, 최종 few-shot 평가만).
- Train 50 가구 내부 분할 (per-household): 80% train / 10% val / 10% test (v6 계승).
- Cold 50 가구 분할: few-shot 168h = 7일치 (앞부분) 를 local adapt 용, 나머지는 test.
- Split 버전 tag (MLflow):
split_version="v10",n_train_households=50,n_cold_households=50. - Cold 가구 선정 방법 (편향 회피, v10-01 §3.1.1 승계):
- 100 가구의
mean, std, 일평균 peak load, weekday/weekend ratio4차원 feature 계산. - K-means (k=2, seed=42) stratify 후 각 cluster 에서 교대 추출 → 50 가구.
- Cold 50 의 load profile KL-divergence 가 Train 50 대비 유의하게 크면(>0.5) 재추첨 1회. 결정된 목록은
src/fed_learning/config.py의COLD_HOUSEHOLDS_V10: list[str]에 하드코딩. - Stage 0 smoke 단계에서 선정 결과 CSV 를 MLflow artifact 로 저장.
3.6 모델 구성 (Model Configuration)¶
공통 (E1-E4):
- input_size=96, horizon=24, univariate (features='S').
- Peak-weighted smooth L1 loss (α=2.0, β=0.1).
- FedAvg + Memory Alignment (γ=0.95, δ=0.7).
E1. NBEATSx + Decomposition Codebook
- Backbone: NeuralForecast
NBEATSx, interpretable config (stack_types=['trend','seasonality','generic'],n_polynomials=3,n_harmonics=2,mlp_units=[[512,512],[512,512],[512,512]]). 외생변수 없음 (futr_exog_list=None, hist_exog_list=None). - VQ 이식점: 각 stack 의 block 내 MLP 마지막 layer 출력 (θ-space, trend block 은 3차원 / seasonality 는 2×(2+1) = ~5차원 / generic 은
mlp_units마지막 dim) 바로 전에 VQ layer 삽입. - Codebook 분할: 3 CB (trend / seasonal / generic) × M=32 each. commitment β=0.25, EMA update (Huh et al. 2023).
- 근거: LSCodec 2025 의 trend/fluctuation guiding principle 직접 적용. ReCast 2025 의 "quantization + residual 2-path" 와 호환.
E2. NHITS + Frequency-Band Codebook
- Backbone: NeuralForecast
NHITS, defaultn_pool_kernel_size=[2,2,2],n_freq_downsample=[4,2,1](v9-01 계승). - VQ 이식점: 3 개 stack 각각이 이미 pooling kernel 로 low/mid/high-freq 분리된 구조 — 각 stack 의 block MLP 마지막 layer 출력에 VQ layer 삽입.
- Codebook 분할: 3 CB (low-freq / mid-freq / high-freq) × M=32 each. commitment β=0.25, EMA.
- H10-1 검증 hook: 각 CB 의 usage 를 peak hour window vs non-peak window 로 분리 기록 (per-batch, MLflow metric
cb_{band}_util_peak,cb_{band}_util_nonpeak). peak 에서 high-freq CB 가 비peak 대비 2× 이상 활성되면 H10-1 지지.
E3. SCINet + Residual Quantization (RQ)
- Backbone: TSLib
SCINet(hidden_size=1, num_levels=3, dropout=0.5, kernel=5, v9-06 계승. TSLib git hash4e938a1767106324dd753b2a44832bf870a0252e). - VQ 이식점: SCI-Block 의 interact 단계 fused feature (odd/even split 후) 에 3-level Residual Quantization 삽입.
- Codebook 분할: L=3 level × M=32 each. 총 code budget = 96 개 (flat VQ M=96 과 동일). level 별 commitment β=0.25, EMA.
- 근거: SVQ arXiv:2312.03406 — Residual-VQ 가 flat VQ 대비 forecasting error 낮음. H10-3 직접 검증.
E4. Crossformer + Product Quantization (PQ)
- Backbone: TSLib
Crossformer(seg_len=6, win_size=2, factor=3, d_model=256, n_heads=4, e_layers=3, v9-06 계승). - VQ 이식점: DSW embedding 직후, TSA layer 입력 바로 전에 PQ layer. d_model=256 을 4 개 sub-space (각 64-dim) 로 분할.
- Codebook 분할: 4 sub-space × M=16 each. 총 code budget = 64. commitment β=0.25, EMA.
- 근거: Crossformer 의 cross-dimension attention 이 이미 variable 축을 sub-space 화 — PQ 의 sub-space 분할과 구조적 호환. H10-4 (cold-start sub-space 일반화) 직접 검증.
Collapse guard (4 E* 공통): - Stage 2 smoke 단계에서 매 round 끝에 codebook utilization 측정. - util < 20% 시 alert + γ=0.8 rollback trigger — ADR-010 §6 부정적 open risks 명시. - Rollback 후에도 util < 20% 지속 → SimVQ (ICCV 2025) / GM-VQ 중 하나 도입 (addendum ADR).
4. 실행 계획 (Execution Plan)¶
4.1 Stage 0 — Split & infrastructure (engineer 순차)¶
src/fed_learning/config.py:COLD_HOUSEHOLDS_V10: list[str]상수 추가 +N_TRAIN=50,N_COLD=50.- Cold 가구 선정 스크립트:
experiments/federated/v10_0425_cold_split.py. 결과 CSV + MLflow artifact. EpochMLflowCallback(v9-06 계승) + raw torch loop 용mlflow.log_metric(step=epoch)유틸 — per-epoch loss 강제 (CLAUDE.md 규약).evaluate_cold_heldout(backbone, cold_clients, k_shot=168)헬퍼 —src/fed_learning/eval_utils.py.- Gate (Pass): Cold 50 가구 리스트 재현성 확보, Train/Cold KL-divergence < 0.5.
4.2 Stage 1 — E1-E4 smoke (engineer 순차, 각 E* 1-apt × 3 epochs)¶
- 각 E* 의 VQ layer 정합성, collapse guard 작동, MLflow per-epoch 로깅 검증.
- Gate (Pass): 4 E* 전수 smoke FINISHED + util > 10% (smoke 단계 최소 기준).
4.3 Stage 2 — E1-E4 본 실행 (subprocess 4 병렬)¶
- 각 E* × {FL, Local-only} × 50 Train 가구 × 30 round × seed=42.
- subprocess 4 병렬 launch 로 GPU 공유. OOM 시 순차 fallback (engineer 책임).
- 비정합 대조군 4 조합 추가 (H10-5 검증용, 단일 seed): NBEATSx+PQ / NHITS+RQ / SCINet+DecompCB / Crossformer+FreqCB. 이들은 smoke 단계 1-apt × 1-seed 만 돌려 점추정 순위 확인용 (전체 50 가구 학습 아님, 범위 관리).
- 예상 wall-clock (RTX 5070 Ti, subprocess 4 병렬 기준):
- E1 NBEATSx: ~25s/run × 50 가구 × 30 round = ~10.4h. 병렬 4 → ~2.6h.
- E2 NHITS: ~20s/run × 50 × 30 = ~8.3h → 병렬 ~2.1h.
- E3 SCINet: ~107s/run × 50 × 30 = ~44.6h → 병렬 ~11.2h (최장).
- E4 Crossformer: ~73s/run × 50 × 30 = ~30.4h → 병렬 ~7.6h.
- Cold-start eval (168h few-shot) 추가 ≈ 2h.
- 총 예상 병렬 wall-clock ≈ 14-15h (SCINet 이 bottleneck).
- 순차 fallback 시 ≈ 96h.
4.4 Stage 3 — exp-expert 4 병렬 dispatch¶
- E1/E2/E3/E4 각각 별도 exp-expert 호출 (주소:
report/exp-expert/v10-03_E1_NBEATSx_results.md등 4 파일). - 각 exp-expert 는 H10-1..4 중 담당 가설 및 공통 H10-5 비정합 비교 수행.
- exp-critic 자동 체이닝 (hook). revision 1 cycle 후 reporter 합본.
4.5 필요 코드 변경 (engineer 작업 범위)¶
| 파일 | 변경 |
|---|---|
src/fed_learning/config.py |
COLD_HOUSEHOLDS_V10, N_TRAIN=50, N_COLD=50 상수 추가 |
src/fed_learning/data_utils.py |
get_train_cold_split() 신규, 기존 get_federation_households(exclude=...) 활용 |
src/fed_learning/eval_utils.py (신규) |
evaluate_cold_heldout(model, cold_clients, k_shot=168) |
src/peak_analysis/vq_layers/ (신규 디렉토리) |
decomp_cb.py, freq_band_cb.py, residual_quant.py, product_quant.py — 4 VQ 타입 구현. 공통 base class VQBase (EMA + commitment + utilization tracker + collapse guard) |
experiments/forecasting/v10_0425_E1_nbeatsx_decomp.py (신규) |
E1 학습 스크립트 |
experiments/forecasting/v10_0425_E2_nhits_freq.py (신규) |
E2 학습 스크립트 |
experiments/forecasting/v10_0425_E3_scinet_rq.py (신규) |
E3 학습 스크립트 |
experiments/forecasting/v10_0425_E4_crossformer_pq.py (신규) |
E4 학습 스크립트 |
experiments/federated/v10_0425_cold_split.py (신규) |
Stage 0 Cold 가구 선정 |
tests/test_v10_vq_layers.py (신규) |
4 VQ 타입 단위 테스트 (forward shape, EMA update, commitment loss 수치) |
tests/test_v10_cold_split.py (신규) |
Cold 가구 선정 재현성 테스트 |
4.6 테스트 요구사항¶
uv run python -m pytest tests/test_v10_vq_layers.py tests/test_v10_cold_split.py -v.- Stage 0 완료 전 필수 통과.
5. 예상 결과 및 분석 계획 (Expected Results & Analysis Plan)¶
5.1 E1. NBEATSx + Decomposition Codebook¶
기대 결과 (점추정): - PAPE ≈ 34-38 (v9-06 NBEATSx 34.58 근처, VQ 이식으로 1-5%p 하락 가능성 상쇄 = peak loss α=2.0 + trend CB alignment 기여). - HR@1 ≈ 22-27 (v9-06 22.86 보다 약간 개선 기대, FL aggregation 기여). - Trend CB util > 70% (3-d polynomial θ 가 균일 분포에 가까움 기대), Seasonal CB util ≈ 40-60%, Generic CB util 가변. - Round-wise trend θ drift: trend block 이 generic block 대비 std 1/3 이하 (H10-2 지지 기대).
분석: - H10-2 검증: 30 round × 4 (trend vs generic block) × 50 가구 의 L2 drift 를 Wilcoxon signed-rank 로 비교. seed=42 단일이므로 점추정 방향성만 보고 (통계 유의성 주장 금지). - Per-apt breakdown (5 apt + Cold 10 가구 샘플).
v9-06 결과 기반 근거: - v9-06 NBEATSx PAPE 점추정 1위 (34.58, 95% CI [30.71, 38.46]) — R1b/N-HiTS 와 통계적 구별 불가, "실무 가치 있는 baseline" 수준. v10 E1 은 이 점추정 유지 또는 개선이 목표이되, VQ 이식 후 HR@1 이 22.86 보다 악화되지 않는 것이 critical. - v9-06 NBEATSx Apt51 PAPE 47.51 outlier (다른 4가구 28-34 대비 +10-20%p) — per-apt 학습의 구조적 약점. v10 E1 의 FL aggregation 이 이 Apt51 drift 를 완화하는가가 보조 관찰 포인트.
5.2 E2. NHITS + Frequency-Band Codebook¶
기대 결과 (점추정): - PAPE ≈ 39-43 (v9-01 NHITS 39.26 근처). - HR@1 ≈ 22-30. - High-freq CB util (peak window 에서) > low-freq CB util (peak window 에서) × 2 (H10-1 지지).
분석: - H10-1 검증: peak hour window (top 5% load) 와 non-peak window 에서 각 CB 의 usage 비율 비교. high-freq CB 가 peak 에서 선택적으로 활성되면 지지. - Per-apt HR@1/PAPE breakdown.
v9-06 결과 기반 근거: - v9-06 에서 NHITS 자체는 재실행하지 않았으나 (v9-01 recap 인용), v9-05 §8.1 에서 "NHITS (v6, PAPE 39.26) 가 v9-05 신규 3종 대비 13%p 우위, hierarchical interpolation + multi-rate sampling 구조가 peak 축에 우위" 관찰. E2 는 이 구조적 우위에 frequency-band CB 를 이식해 peak-aware regularization 를 추가.
5.3 E3. SCINet + Residual Quantization¶
기대 결과 (점추정): - PAPE ≈ 40-44 (v9-06 SCINet 42.35 근처). - HR@1 ≈ 30-37 (v9-06 34.48 대비 개선 기대, FL aggregation 기여). - MSE ≤ 0.515 (H10-3 조건). - 3 level 전체 CB util 평균 > 50% (H10-3 조건).
분석: - H10-3 검증: 3-level RQ 의 각 level utilization 분포 vs flat VQ M=96 (대조군) 비교. RQ 가 level 1 > level 2 > level 3 monotonic decreasing usage 이면 정상. - Per-apt MSE/HR@1 breakdown.
v9-06 결과 기반 근거: - v9-06 SCINet Watch PASS (PAPE 42.35, HR@1 34.48) + MSE 20-model 1위 (0.498) + PAPE seed std 1.15%p (Track B 내 최소). VQ 이식 후 HR@1 이 34.48 에서 32 이하로 하락하지 않는 것이 Strict gating 진입의 전제. - v9-06 SCINet Apt51 HR@1 67.62 (Chronos 69.04 근접) — 단 Apt51 은 전-모델 공통 spike 가구 (v9-06 Major 3 교정), SCINet 구조 특이성 단일 해석 금지. E3 에서도 Apt51 strong 유지 여부는 breakdown 에서 확인만.
5.4 E4. Crossformer + Product Quantization¶
기대 결과 (점추정): - PAPE ≈ 40-45 (v9-06 Crossformer 44.45 boundary FAIL 에서 개선 기대, PQ regularization 기여). - HR@1 ≈ 20-30. - Cold-start (168h few-shot) PAPE 가 E1-E3 대비 최선 (H10-4 조건). - 4 sub-space 각 CB util > 50% (sub-space 분할로 collapse 완화 기대).
분석: - H10-4 검증: Cold 50 가구에서 168h few-shot adapt 후 PAPE 순위. Crossformer+PQ 가 1위이면 지지. - Per-sub-space codebook usage 분석 (어떤 sub-space 가 peak 정보를 담는지).
v9-06 결과 기반 근거: - v9-06 Crossformer PAPE 44.45 boundary FAIL, seed std 4%p+ (Track B raw torch loop seed 비결정성). HR@1 21.24 낮음. E4 는 (a) PQ regularization 으로 PAPE 개선, (b) sub-space 분할로 cold-start 일반화력 확보 — 두 축 모두 필요. - 주의: v9-06 에서 "Crossformer 는 단변량에서 무력화 가능성" 지적 (v9-05 §8.1). E4 는 univariate features='S' 통일 제약 하에서 Crossformer 의 cross-dimension attention 이 얼마나 의미 있는지 자체가 실험 대상.
5.5 H10-5 구조 정합성 검증 (4 정합 vs 4 비정합)¶
- 4 정합 조합 (E1-E4) PAPE mean vs 4 비정합 조합 (NBEATSx+PQ, NHITS+RQ, SCINet+DecompCB, Crossformer+FreqCB, 각 smoke 1-apt × seed=42) PAPE mean 비교.
- 단일 seed 한계로 통계적 유의 주장 금지, 점추정 순위만 보고.
- 정합 mean < 비정합 mean 이면 H10-5 Supported (점추정).
5.6 Failure Mode 분석 (가설 기각 시)¶
| 가설 기각 | 해석 | 후속 조치 |
|---|---|---|
| H10-1 기각 (high-freq CB peak 집중 안 됨) | NHITS pooling kernel 이 frequency 분리 충분하지 않음 | E2 drop, v11 에서 FreqCB 를 STFT 기반으로 재설계 |
| H10-2 기각 (trend θ drift 이 generic 과 동등) | basis expansion 의 저차원성이 FL 에서 anchor 역할 안 함 | E1 drop, v11 에서 trend block 에 명시적 regularizer 추가 |
| H10-3 기각 (RQ collapse) | SCI-Block interact feature 의 표현 capacity 가 level 간 redundancy 를 허용 안 함 | E3 drop, SimVQ 대체 또는 flat VQ 로 rollback |
| H10-4 기각 (Crossformer+PQ cold-start 꼴찌) | univariate 에서 cross-dimension attention 무력화 가설 확정 | E4 drop, Crossformer 를 multivariate 축으로 재설계 (ADR-011) |
| H10-5 기각 (정합 ≥ 비정합) | "구조 정합" 명제 자체가 반증됨, VQ 의 기여는 아키텍처 독립 | v10 contribution pivot: "flat VQ 로 충분" 으로 narrative 단순화 (ADR-011) |
5.7 시각화 계획¶
- Fig 1: 4 E* 의 PAPE / HR@1 bar chart (v9-06 baseline + B0/B1/B3 같이).
- Fig 2: Codebook utilization heatmap (E1 3 CB × round / E3 3 level × round / E4 4 sub × round).
- Fig 3: E2 per-band usage peak vs non-peak (H10-1 증거).
- Fig 4: E1 trend vs generic θ drift trajectory (H10-2 증거).
- Fig 5: H10-4 cold-start PAPE 순위 (E1-E4 × 50 Cold 가구 boxplot).
- Fig 6: H10-5 정합 vs 비정합 산점도.
6. 리스크 및 대안 (Risks & Alternatives)¶
§6 은 §11 (공식 risk table) 의 요약. 세부 mitigation 은 §11 참조.
7. Cold-start 평가 프로토콜¶
7.1 프로토콜 정의¶
- Cold 50 가구 각각에 대해:
- 최종 round 의 Train 50 서버 aggregate 모델 파라미터 로드.
- Cold 가구의 첫 168h (7일) 로 local adapt — 3 epoch, lr=1e-4 (fine-tune 안정성).
- 이후 test window 에서 PAPE/HR@1/MSE 측정.
7.2 H10-4 기준 (UMass Cold 50 가구, 초안 "30가구" → 승인 수정 "50가구")¶
- 4 E* 의 Cold 50 가구 PAPE mean 순위에서 Crossformer+PQ 가 1위이면 H10-4 Supported.
- Tie (동순위 차이 < 0.5%p) 는 unsupported 처리.
7.3 Cold Unfreeze (ablation 후보)¶
- Future work 로 등록 (ADR-010 §결정 파라미터 테이블).
- 본 v10 범위 외. Cold adapt 시 encoder 는 freeze, head 만 tune 이 기본. Unfreeze 변형은 addendum phase 에서 검토.
8. 병렬 실행 상세¶
8.1 engineer 순차 구현¶
- Stage 0 → Stage 1 smoke 순차. VQ layer 공통 base 가 먼저 완성되어야 4 E* 이 동시 smoke 가능.
- 예상 engineer wall-clock: Stage 0 (1일) + Stage 1 smoke (1일) = 2일.
8.2 본 실험 subprocess 4 병렬¶
- Python
subprocess.Popen으로 E1-E4 스크립트를 4 프로세스 병렬 launch. - 각 프로세스는 독자 MLflow run ID + 독자 seed (모두 42) + 독자 GPU memory partition.
- GPU OOM 시 순차 fallback: OOM 감지 logic 을 launcher 에 포함 —
torch.cuda.OutOfMemoryErrorcatch 시 해당 프로세스 kill + 남은 큐 순차 실행 전환. - Launcher 스크립트:
experiments/forecasting/v10_launcher.py(engineer 작업 항목).
8.3 exp-expert 4 병렬 dispatch¶
- Stage 2 완료 후 exp-expert 를 E1-E4 각각 별도 호출.
- 각 exp-expert 산출:
report/exp-expert/v10-03_E1_NBEATSx_results.md,v10-04_E2_NHITS_results.md,v10-05_E3_SCINet_results.md,v10-06_E4_Crossformer_results.md. - Hook 에 의해 exp-critic 4 회 연쇄 자동 호출 (각 E* 별 critic 1 cycle).
- reporter 는 4 critic 통과 후 1 회 합본 보고서 작성 (
report/reporter/v10_multi_model_vq_summary.md).
9. MLflow 로깅 스키마¶
9.1 공통 (per run)¶
mlflow.set_experiment("v10-multi-model-vq").- Tag:
split_version="v10",backbone,vq_strategy,n_train=50,n_cold=50,seed=42,fl_mode(FL/local). - Per-epoch:
train_loss,val_loss(CLAUDE.md 강제, v9-06 EpochMLflowCallback 계승). - Per-round:
round_val_loss,round_val_pape,round_val_hr1,codebook_utilization_{cb_id},commitment_loss. - Test-time:
test_pape,test_hr1,test_hr2,test_mse,test_mae,test_mape,test_smape. - Artifact: best checkpoint, y_true/y_pred
.npy(CLAUDE.md MLflow Logging Rules).
9.2 VQ 전용 (E1-E4 공통)¶
cb_util_{cb_id}_{peak|nonpeak}per round — H10-1/H10-2 검증용.cb_usage_entropy_{cb_id}per round.commitment_loss_{cb_id}per round.alignment_sim_mean_{cb_id}per round (Memory Alignment 작동 시).
9.3 H10-2 전용 (E1)¶
trend_theta_drift_l2_round_{r}— round r 의 trend block θ 와 round r-1 의 θ 간 L2 distance.generic_theta_drift_l2_round_{r}— 동일 (generic block).
9.4 H10-4 전용 (cold-start)¶
cold_pape_{apt},cold_hr1_{apt},cold_mse_{apt}— Cold 50 가구 각각.cold_pape_mean,cold_hr1_mean— 50 가구 mean.
10. Watch 정의 경고 및 gating 정책¶
Strict 유지: PAPE ≤ 43 AND HR@1 ≥ 37 (v9-05/06 계승). 4 E* 중 1 개 이상 충족이 Strict Pass 조건.
Watch 재정의 경고:
- v9-05 Watch: PAPE ≤ 43 OR HR@1 ≥ 37 (OR, 단일축 임계).
- v9-06 Watch: PAPE ≤ 46 AND HR@1 ≥ 30 (AND, 완화 임계). 46/30 정량 근거 부재 (v9-06 Major 1 지적).
- v10 에서의 Watch 정의 결정은 본 설계 범위 외 — reporter 단계에서 v9-05 OR 병기 재판정만 보고. ADR-011 으로 표준화 제안 예정 (future work).
- 본 설계는 Strict 만 primary gating 으로 사용, Watch 는 보조 참고 지표로만 취급.
11. 리스크 및 가드 (Risks & Guards)¶
| # | 위험 | 영향 | 가드 |
|---|---|---|---|
| R1 | Cold 50 가구 선정 편향 (쉬운/어려운 가구 편중) | H10-4 결론 신뢰도 훼손 | §3.5 계층 추출 + KL-divergence 검사 + 재추첨 1회 + MLflow artifact 재현성 |
| R2 | VQ codebook collapse (util < 20%) | E* 중 1-4개 결과 무효화 | Stage 2 smoke 단계 util 모니터, < 20% 시 γ=0.8 rollback trigger. 그래도 지속 시 SimVQ (ICCV 2025) / GM-VQ 도입 (addendum ADR 절차) |
| R3 | H10-5 통계적 근거 약함 — seed=42 단일 | 구조 정합성 주장의 일반화 근거 부족 | (a) 점추정 순위만 보고, p-value/CI 주장 금지 (v9-06 Major 2 교훈). (b) 1차 결과에서 정합 mean < 비정합 mean 차이가 2%p 이상이면 addendum 에서 3-seed {42, 123, 456} 확장 자동 트리거. 차이 < 2%p 이면 확장 무의미 판정. |
| R4 | Crossformer 가 univariate 에서 cross-dim attention 무력화 (v9-05 §8.1 기존 경고) | E4 설계 전제 붕괴 | Stage 1 smoke 에서 DSW embedding 이후 sub-space variance 측정. variance 가 d_model/4 sub-space 간 1% 이내면 "sub-space 분리 무의미" 로 E4 drop (addendum) |
| R5 | Track A (E1/E2) max_steps=500 한계 도달, 수렴 여부 미확인 (v9-06 Minor 3 재발) | PAPE 점추정 불안정 | Stage 2 후 per-epoch loss 기록에서 plateau 확인. plateau 미도달 시 max_steps=1000 재실험 (addendum, engineer 1일 추가 비용) |
| R6 | SCINet 107s/run × 50 가구 × 30 round = 44.6h wall-clock bottleneck | 전체 phase wall-clock 지연 | subprocess 4 병렬로 병목 완화. 그래도 시간 부족 시 SCINet 을 15 round 로 축소 (local epoch 3 → 5 로 보상) — 단 E3 결과 해석 시 "15 round 한정" 명시 |
| R7 | B0/B1/B2/B3 recap 수치와 v10 결과 seed/n 비대칭 (v10=seed=42 n=50가구, recap=seed=42 n=5가구) | 직접 비교 정당성 훼손 | v10 결과 보고 시 5-apt (EVAL) subset 을 별도로 추출 → recap n=5 와 동일 조건 비교 표 추가 (reporter 단계). |
| R8 | Peak-weighted loss α=2.0 가 4 E* 모두에 최적이 아닐 가능성 | 1-2 개 E* 가 α 튜닝 부족으로 FAIL 판정 | 본 phase 에서는 α=2.0 고정 (공정 비교 우선). α 튜닝은 addendum ablation 으로 위임 |
| R9 | Memory Alignment γ=0.95 가 4 VQ 전략 모두에 부적합할 가능성 (ADR-009 collapse 재발) | 2-4 E* 가 collapse 로 무효화 | R2 의 γ=0.8 rollback 이 1차 가드. 그래도 수렴 안 하면 memory alignment 자체를 off 로 ablation (addendum) |
12. v9 산출물 재활용 인벤토리¶
| 자원 | 경로 | v10 재사용처 |
|---|---|---|
| v9-01 recap baseline 예측 | outputs/v9_recap/**/predictions/*.npy |
B0/B1/B2/B3 수치 인용 (재학습 없음) |
| v9-06 NBEATSx/SCINet/Crossformer 설정 | experiments/forecasting/v9_0424_baseline_extension_2.py |
E1/E3/E4 학습 스크립트 base. 단변량 통일 + VQ layer 삽입만 추가 |
| v9-06 EpochMLflowCallback | 동일 스크립트 내 callback 클래스 | 전 E* per-epoch 로깅 강제에 재사용 |
| TSLib (SCINet/Crossformer) | src/tslib/ (git hash 4e938a1767106324dd753b2a44832bf870a0252e) |
재사용, import 경로 유지 |
| FedPM MemoryAlignmentServer | src/fed_learning/fedpm.py |
4 E* FL aggregation backend 재사용 (γ=0.95/δ=0.7) |
get_federation_households(exclude=...) |
src/fed_learning/data_utils.py:102-136 |
Cold 가구 분리 인프라 (기존 구현 재사용) |
13. 문헌 근거 (References)¶
13.1 Backbone¶
- Oreshkin et al. (ICLR 2020) — NBEATS. arXiv:1905.10437.
- Olivares et al. (Int'l J. Forecasting 2023) — NBEATSx. arXiv:2104.05522. https://nixtlaverse.nixtla.io/neuralforecast/models.nbeatsx.html
- Challu et al. (AAAI 2023) — NHITS. arXiv:2201.12886.
- Liu et al. (NeurIPS 2022) — SCINet. arXiv:2106.09305.
- Zhang & Yan (ICLR 2023) — Crossformer. https://openreview.net/forum?id=vSVLM2j9eie
13.2 VQ / Quantization¶
- Jégou et al. (TPAMI 2011) — Product Quantization.
- Lee et al. (CVPR 2022) — RQ-VAE (Residual Quantization).
- Huh et al. (ICML 2023) — Codebook collapse & EMA ≡ commitment. https://proceedings.mlr.press/v202/huh23a/huh23a.pdf
- SVQ for Spatio-Temporal Forecasting (ICML 2024) — arXiv:2312.03406. Sparse VQ / RQ 가 flat VQ 대비 forecasting error 낮음.
- VQ-TR — OpenReview IxpTsFS7mh. Basis-expansion style quantization in transformer.
- LSCodec (Appl. Intelligence 2025) — Group Residual VQ for time series with trend/fluctuation guiding principle. https://link.springer.com/article/10.1007/s10489-025-06842-2
- ReCast (arXiv:2511.11991, 2025) — Codebook-assisted lightweight forecasting, patch-wise + residual 2-path.
- Zhu et al. (ICCV 2025) — SimVQ: one linear layer for representation collapse. arXiv:2411.02038.
- EDVAE (OpenReview) — codebook collapse mitigation with EV (참고).
13.3 FL × TS¶
- FeDPM / Memory Alignment — 본 프로젝트 내부 자산 (ADR-008).
- FedAvg — McMahan et al. AISTATS 2017.
14. 실행 명령 (Execution Commands)¶
14.1 Stage 0: Cold 가구 선정¶
14.2 Stage 1: Smoke (E1-E4 각각 1-apt × 3 epoch, 순차)¶
uv run python experiments/forecasting/v10_0425_E1_nbeatsx_decomp.py --smoke --seed 42
uv run python experiments/forecasting/v10_0425_E2_nhits_freq.py --smoke --seed 42
uv run python experiments/forecasting/v10_0425_E3_scinet_rq.py --smoke --seed 42
uv run python experiments/forecasting/v10_0425_E4_crossformer_pq.py --smoke --seed 42
14.3 Stage 2: subprocess 4 병렬 launch¶
uv run python experiments/forecasting/v10_launcher.py \
--experiments E1 E2 E3 E4 \
--parallel 4 \
--oom_fallback sequential \
--seed 42
launcher 내부 의사코드:
# experiments/forecasting/v10_launcher.py
import subprocess
from concurrent.futures import ProcessPoolExecutor, as_completed
CMDS = {
"E1": ["uv","run","python","experiments/forecasting/v10_0425_E1_nbeatsx_decomp.py","--seed","42"],
"E2": ["uv","run","python","experiments/forecasting/v10_0425_E2_nhits_freq.py","--seed","42"],
"E3": ["uv","run","python","experiments/forecasting/v10_0425_E3_scinet_rq.py","--seed","42"],
"E4": ["uv","run","python","experiments/forecasting/v10_0425_E4_crossformer_pq.py","--seed","42"],
}
def run(exp_id):
try:
return subprocess.run(CMDS[exp_id], check=True, capture_output=True, text=True)
except subprocess.CalledProcessError as e:
if "OutOfMemoryError" in e.stderr:
return ("OOM", exp_id) # launcher catches, queues sequential
raise
with ProcessPoolExecutor(max_workers=4) as ex:
futures = {ex.submit(run, k): k for k in CMDS}
oom = []
for f in as_completed(futures):
r = f.result()
if isinstance(r, tuple) and r[0] == "OOM":
oom.append(r[1])
# OOM fallback: sequential re-run
for exp_id in oom:
subprocess.run(CMDS[exp_id], check=True)
14.4 Stage 3: exp-expert 4 병렬 dispatch¶
- Orchestrator 수준에서 Task 도구로 4 개 exp-expert 를 동시 호출 (cwd 독립, 각자 E1/E2/E3/E4 결과 분석).
- 각 exp-expert 는
@exp-expert호출 시 args 로--experiment E1등 전달. - Hook 에 의해 각 exp-expert 종료 시 exp-critic 1 cycle 자동 연쇄.
14.5 Stage 4: reporter 합본¶
# orchestrator가 4 critic 통과 확인 후 수동 dispatch
# reporter 산출: report/reporter/v10_multi_model_vq_summary.md
15. 의사결정 (Decisions — 모두 승인됨, 단 #2 예외)¶
| # | 의사결정 | 상태 | 근거 |
|---|---|---|---|
| 1 | UMass Smart Home 100 가구 사용 (EC50 확장) | Approved | ADR-010 §설계 파라미터, 기존 데이터 소스 일치 |
| 2 | NBEATSx 외생변수 제거 (단변량 통일) | 미승인 (reconfirm 대기) | E1-E4 공정 비교 + H10-2 재작성 요구 때문. user 의 approval 내역에 "미승인" 으로 표시된 항목 — 본 설계서는 단변량 통일을 설계 전제로 채택하되, 본 §15 에 미승인 flag 를 유지하여 engineer dispatch 전 최종 user 확인 대기 |
| 3 | Train/Cold 50/50 split | Approved | ADR-010, cold-start 검증력 강화 |
| 4 | Seeds {42} 단일 (1차), 확장은 결과 관찰 후 addendum | Approved | ADR-010, wall-clock 절약 + H10-5 한계 명시 (R3) |
| 5 | 베이스라인 (B0/B1/B2/B3) 재학습 전면 스킵 | Approved | ADR-010, v9-01/06 recap 인용 |
| 6 | Per-epoch MLflow 로깅 강제 (EpochMLflowCallback 계승) | Approved | CLAUDE.md 규약 + v9-06 P1 계승 |
| 7 | Cold unfreeze = ablation 후보 등록 | Approved | ADR-010 future work |
| 8 | 병렬 실행: engineer 순차 / 본 실험 subprocess 4 병렬 (OOM 순차 fallback) / exp-expert 4 병렬 dispatch | Approved | ADR-010, 단일 RTX 5070 Ti 제약 |
| 9 | Strict gating (PAPE ≤ 43 AND HR@1 ≥ 37) 유지 | Approved | v9-05/06 계승, v10-02 §10 |
미승인 항목 #2 재확인 필요: E1 NBEATSx 의 외생변수 제거는 H10-2 재작성의 전제이자 E1-E4 공정 비교의 핵심 조건이다. 그러나 사용자 지시에는 "미승인" 표시만 있고 제거 자체를 부정하지 않았다. 본 설계는 제거를 채택하되 engineer dispatch 전 user 재확인 포인트로 §15 에 명시한다.
16. 다음 단계 (Next Steps)¶
- 본 설계서 user 승인 (특히 §15 #2 재확인).
- engineer Stage 0+1 작업 (Task #16) — Hook 체이닝으로 자동 이관 예정.
- engineer Stage 1 smoke Gate 통과 후 → Stage 2 subprocess 4 병렬 launch.
- Stage 2 완료 → exp-expert 4 병렬 dispatch (E1-E4 각각).
- 각 exp-expert 완료 → exp-critic auto-chain (1 cycle).
- 4 critic 통과 → reporter 합본 (
report/reporter/v10_multi_model_vq_summary.md). - reporter 결과 기반 addendum 의사결정: (a) 3-seed 확장 여부 (R3 트리거), (b) Watch 정의 표준화 (§10, ADR-011 후보), (c) Cold unfreeze ablation 착수 여부, (d) ETSformer TSLib 1-line 패치 재시도 여부.
판정 (design-level)¶
v10 phase 는 "backbone 탐색" 에서 "아키텍처-정합 VQ 이식" 으로 전환한다. 4 E 의 성공/실패가 각각 "구조 정합" 명제의 독립 증거/반증이 되며, H10-5 가 핵심 결론 축이다. 단일 seed 한계와 univariate 통일 제약은 본 phase 의 외부 유효성을 제한하나, 내부 비교 (E1-E4 + 4 비정합 대조군)* 의 점추정 순위는 통계 비유의 하에서도 설계의 novelty (각 모델 자연 분해 공간 × VQ 구조 매핑) 를 증거할 수 있다. Collapse 재발 방지 가드 3-layer (γ=0.95 primary / γ=0.8 rollback / SimVQ or GM-VQ addendum) 로 ADR-009 교훈을 반영한다.
engineer Stage 0+1 작업으로 이관 준비 완료.