콘텐츠로 이동

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 E1개 이상*이 PAPE ≤ 43 AND HR@1 ≥ 37 — v9-05/06 gating 유지
Watch Pass (보조) 4 E2개 이상이 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 이벤트에 선택적 활성
  • 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 의 축적된 관찰:

  1. VQ utilization 과 PAPE 의 decoupling (ADR-009 archive): v6 R1b 는 codebook util 4.06% (near-collapse) 에서 PAPE 38.40 달성. VQ 는 "정보 채널" 이 아닌 "regularizer" 로 작동.
  2. 모델 아키텍처가 peak 예측의 dominant driver (v9-06): NBEATSx PAPE 34.58 점추정 1위, SCINet MSE 20-model 1위 0.498. DLinear 기반 v6 R1b (37.36) 는 여전히 통계적 구별 불가 범위 내.
  3. "decomposition + attention" 계열 구조적 약점 (v9-05/06): Autoformer/Informer/FEDformer + Pyraformer/Crossformer 5/5 PAPE ≥ 44 FAIL 재현. 단 Crossformer 의 cross-dimension attention 은 PQ 와 sub-space 분할 논리가 자연 매핑 → E4 에서 재도전 가능.
  4. 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 ratio 4차원 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.pyCOLD_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, default n_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 hash 4e938a1767106324dd753b2a44832bf870a0252e).
  • 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 순차)

  1. src/fed_learning/config.py: COLD_HOUSEHOLDS_V10: list[str] 상수 추가 + N_TRAIN=50, N_COLD=50.
  2. Cold 가구 선정 스크립트: experiments/federated/v10_0425_cold_split.py. 결과 CSV + MLflow artifact.
  3. EpochMLflowCallback (v9-06 계승) + raw torch loop 용 mlflow.log_metric(step=epoch) 유틸 — per-epoch loss 강제 (CLAUDE.md 규약).
  4. evaluate_cold_heldout(backbone, cold_clients, k_shot=168) 헬퍼 — src/fed_learning/eval_utils.py.
  5. 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.OutOfMemoryError catch 시 해당 프로세스 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 가구 선정

uv run python experiments/federated/v10_0425_cold_split.py --seed 42 --n_train 50 --n_cold 50

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)

  1. 본 설계서 user 승인 (특히 §15 #2 재확인).
  2. engineer Stage 0+1 작업 (Task #16) — Hook 체이닝으로 자동 이관 예정.
  3. engineer Stage 1 smoke Gate 통과 후 → Stage 2 subprocess 4 병렬 launch.
  4. Stage 2 완료 → exp-expert 4 병렬 dispatch (E1-E4 각각).
  5. 각 exp-expert 완료 → exp-critic auto-chain (1 cycle).
  6. 4 critic 통과 → reporter 합본 (report/reporter/v10_multi_model_vq_summary.md).
  7. 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 작업으로 이관 준비 완료.