콘텐츠로 이동

v10-04: E3 SCINet + Residual Quantization — Final 분석 (revision 1)

본 보고서는 E3 학습 종료 (round 30 완료, FINISHED) 시점의 최종 판단이다. 모든 수치는 round 30 종료 후 MLflow 기록 기준 점추정이며, seed=42 단일이다. exp-critic CONDITIONAL 판정에 따른 revision 1 cycle 반영본 — 핵심 수정 사항: (1) 잠정 → final 결과 갱신, (2) "C2 dead restart 효과" 가짜 인과 제거, (3) HR@1 baseline 출처 (Phase1 NF Local) 정정, (4) L1 dead 3원인 교집합 약화, (5) v9-06 SCINet 대비 후퇴 정량화.


0. Executive Summary (final)

항목 판정
진행 상황 round 30/30 (100%), FINISHED (run_id b7eac626…7667e9)
Best val (round 4, step=3) 0.2974 (peak-weighted L1 + VQ commit, standardized scale) round 4 이후 26 round 미갱신 (plateau 확정)
Final val (round 30) 0.3142 (best 대비 +5.65%) mild overfitting
Test PAPE 49.67 v9-06 SCINet 42.35 대비 +7.32pp 악화
Test HR@1 20.21 v9-06 SCINet 34.48 대비 -14.27pp 악화
Test HR@2 31.66 v9-06 SCINet 46.38 대비 -14.72pp 악화
Test MSE 0.493 v9-06 SCINet 0.498 ≈ 동등 (Δ -0.005)
Test MAE 0.443
L1 util final 11.19% dead 계열 collapse (< 20% threshold, ADR-010 §6)
L2 util final 32.25% partial collapse (50% 미달)
L3 util final (β=0.375 가중) 36.19% β 가중 효과 간접 작동, 단 H_β/H_cascade confound (§4.3)
3-level 평균 util (11.19 + 32.25 + 36.19) / 3 = 26.54% H10-3 axis 1 FAIL (50% threshold 미달)
통신량 bytes_per_round 12,288 (3 × M=32 × d=32 × 4) 4 E* 중 두 번째로 낮음 (E1 33,792 / E2 24,576 / E4 4,096)

Final 결론: 1. H10-3 conjunctive 평가 FAIL — axis 1 (util > 50%): 26.54% FAIL, axis 2 (test_mse ≤ 0.515): 0.493 PASS. 두 axis를 conjunctive AND로 평가하든 OR로 평가하든 axis 1 FAIL이므로 결합 FAIL (ADR-010 falsification 표기 OR/AND 정합성은 §3.4에서 별도 처리). 2. VQ 이식이 SCINet을 약화시켰음 (확정) — v9-06 SCINet (Watch PASS, 20-model 1위) 대비 PAPE +7.32pp, HR@1 -14.27pp, HR@2 -14.72pp 후퇴. MSE만 동등 (0.493 vs 0.498). v6 R1b PAPE 37.36과 비교하면 v10 phase 전체가 통신/품질 모두 regression. 3. L3 β=0.375 (1.5× peak 가중) 효과는 inconclusive — L3 util 36.19%로 L1 (11.19%)의 3.2배, simple ablation (β uniform 0.25)에서 L3 util 5.63%였던 것과 +30.56pp 차이. 그러나 PAPE Δ(E3 - E3_simple) = -1.09 (E3가 약간만 좋음) → β 단독 peak 품질 효과는 통계적으로 비유의에 가까운 미미한 수준. confound: simple은 C1/C3/M1 동시 변경이라 β 단독 효과 분리 불가. 4. Best round 4 plateau (사후 확정) — 30 round의 13.3% 시점에 수렴. round 4-30 동안 best val 갱신 0건. wait 권고는 사후 정확 — 추가 14 round로 (a) test 메트릭 final 확정, (b) artifact 저장 산출물 회수. 5. L1 dead 원인 — 단일 요인 dominant 분리 불가 — simple ablation (γ uniform 0.95) 결과 L1 util 4.25%로 오히려 악화. 가설 C (γ=0.98 anchoring 단독 기여)는 부호 반대 가능성, 가설 A (SCINet pool 평균화) 와 가설 B (restart_dead_codes 미구현) 는 robust. addendum 1-apt × 8-round one-out-at-a-time ablation 필수 (§5.4).

Critic-corrected disclosure (revision 1): - E3의 v10 내 상대 우위 (PAPE 49.67 vs E1 55 / E2 85 / E4 67) 는 H10-3 가설 통과를 시사하지 않는다. v10 phase 전체가 partial collapse 상태이므로 E3의 49.67조차 v6 R1b (37.36) / v9-06 SCINet (42.35) 대비 약화. relative ranking을 partial pass로 읽지 말 것. - "C2 dead restart 효과" 진술은 본 revision에서 제거. residual_quant.pyrestart_dead_codes() 미정의 + vq_base_simple.py:145 no-op return 0 → E3/E3_simple 양쪽 모두 C2 비작동. simple과 full의 차이는 C1 (K-means++ vs torch.randn) + C3 (β=0.375 vs uniform 0.25) + M1 (γ differential vs uniform 0.95) 의 stack 효과. - HR@1 baseline 출처 정정: v10 FL no-VQ baseline (B0–B4) 은 HR@1 미기록 → E3 HR@1 20.21의 의미는 v10 phase 내부에서 검증 불가. 이전 컨텍스트의 "B3 17.14 / B4 18.57 우위" 는 Phase1 NF Local 베이스라인 (paradigm mismatch) 출처 misalignment였음 (§9.1 정정).


1. 실험 메타데이터

1.1 MLflow 식별

  • Experiment: v10-multi-model-vq (id 738860791398377455)
  • Run name: E3_SCINet_RQ_seed42
  • Run ID (full): b7eac626124342fe84f3c12ecc7667e9
  • Status: FINISHED (round 30 / 30, end_time 2026-04-25 17:17:14 KST)
  • Start time: 2026-04-25 18:44:39 (KST) — 표기상 이슈 (start > end는 실험 timezone 보정 결과로 추정, MLflow 원본 기록 신뢰)
  • 이전 KILLED runs: 47ad331975f2… (round 1까지), 56d2f3d116dd… (round 4까지) — 모두 사전 시도, 본 분석 대상은 FINISHED run 1건만.

1.2 핵심 하이퍼파라미터 (MLflow 기록)

Param Value
backbone SCINet (TSLib)
vq_strategy ResidualQuantization (3 level × M=32 × d=32)
commitment_weights [0.25, 0.25, 0.375] (L3 1.5× peak 가중 = β 주입)
ema_decay 0.99
per_cb_gamma (Memory Alignment) {L1: 0.98, L2: 0.95, L3: 0.85}
memory_delta 0.7
peak_alpha 2.0 (peak-weighted smooth L1)
fl_rounds 30
local_epochs 3
n_train_households 50
input_size / horizon 96 / 24
lr / batch_size 1e-3 / 128
seed 42
amp bfloat16 (RTX 5070 Ti)
bytes_per_round 12,288
split_version v10 (Train 50 + Cold 50)

1.3 비교 대상 (v10 phase 내, MLflow v10-multi-model-vq 기록 기준)

Run Status PAPE HR@1 HR@2 MSE 비고
B0_local_DLinear_seed42 FINISHED 40.34 nan nan 0.4755 v10 베이스라인 (사용자 컨텍스트 일치)
B1_FedAvg_DLinear_seed42 FINISHED 44.56 nan nan 0.7767 FL DLinear
B2_NBEATSx_noVQ_seed42 FINISHED 46.38 nan nan 0.8083 E1 ablation 대조
B3_NHITS_noVQ_seed42 FINISHED 44.66 nan nan 0.7732 E2 ablation 대조
B4_Crossformer_noVQ_seed42 FINISHED 41.81 nan nan 0.8397 E4 ablation 대조
E1_NBEATSx_DecompCB_seed42 FINISHED 55.01 nan nan 0.8074 VQ 추가 → 8.6%p 악화
E2_NHITS_FreqBand_seed42 FINISHED 84.97 nan nan 0.4816 대실패 (PAPE 84.97)
E3_SCINet_RQ_seed42 FINISHED 49.67 20.21 31.66 0.493 본 분석 대상 (final)
E4_Crossformer_PQ_seed42 FINISHED 67.59 11.30 17.44 0.7901 VQ 추가 → 25.8%p 악화

외부 비교 (v9-06 recap, 동일 SCINet 구성, 단변량, n=15 = 5-apt × 3-seed): - SCINet (v9-06 Watch PASS): PAPE 42.35 / HR@1 34.48 / HR@2 46.38 / MSE 0.498 (20-model 1위) - 본 E3 의 round 30 test 결과가 위 수치 근방이면 VQ 이식이 SCINet 베이스 성능을 보존, 더 낮으면 v9-06 대비 더 우수, 더 높으면 VQ 가 SCINet 을 약화.

주의: B0/B1/…/B4 는 50가구 전수 평가, v9-06 recap 은 5-apt × 3-seed. n 비대칭으로 직접 비교 위험. ADR-010 §11 R7 가드 — reporter 단계에서 5-apt subset 별도 추출이 정식 비교 방법.


2. Round-by-round 추이 (MLflow 기록, step 0-15 = round 1-16)

step round train val util_L1 util_L2 util_L3 alig_L1 alig_L2 alig_L3
0 1 0.4683 0.3174 0.0506 0.1113 0.1406 0.0349 0.0122 0.0147
1 2 0.4509 0.3070 0.0656 0.1650 0.2112 0.0641 0.0200 0.0215
2 3 0.4391 0.3003 0.0706 0.2506 0.2644 0.0548 0.0086 0.0131
3 4 0.4320 0.2974 0.0825 0.2581 0.2956 0.0547 0.0086 0.0096
4 5 0.4277 0.3000 0.0794 0.2594 0.3131 0.0353 0.0075 0.0077
5 6 0.4226 0.2978 0.0881 0.2706 0.3144 0.0393 0.0078 0.0063
6 7 0.4200 0.2988 0.0862 0.2800 0.3019 0.0324 0.0083 0.0058
7 8 0.4190 0.2988 0.0981 0.2894 0.3319 0.0358 0.0076 0.0051
8 9 0.4146 0.3000 0.0981 0.2662 0.3444 0.0365 0.0082 0.0058
9 10 0.4123 0.3022 0.1013 0.2919 0.3300 0.0256 0.0065 0.0061
10 11 0.4116 0.3014 0.0975 0.2981 0.3287 0.0346 0.0044 0.0054
11 12 0.4095 0.3009 0.1025 0.2938 0.3387 0.0282 0.0052 0.0057
12 13 0.4075 0.3022 0.1006 0.2950 0.3544 0.0284 0.0046 0.0057
13 14 0.4058 0.3030 0.1044 0.3038 0.3469 0.0292 0.0055 0.0064
14 15 0.4066 0.3049 0.0931 0.2900 0.3450 0.0353 0.0041 0.0064
15 16 0.4034 0.3025 0.1056 0.3019 0.3450 0.0401 0.0043 0.0060

2.1 train_loss 추이

  • round 1: 0.4683 → round 16: 0.4034 (Δ = -0.0649, -13.9%)
  • 단조 감소이나 round 12 이후 감소율 둔화 (round 12 0.4075 → round 16 0.4034, Δ = -0.0041 over 4 round).
  • train_loss 는 학습 자체가 진행 중임을 보여주나, val_loss plateau 와 결합 시 overfitting 초기 진입 신호 가능.

2.2 val_loss 추이

  • round 1: 0.3174 → round 4 (best): 0.2974 → round 16: 0.3025
  • best 갱신 11 round 미발생, 추세는 round 4-7 까지 0.298 plateau, round 9-13 에서 0.300-0.302 사이 진동, round 14-16 에서 0.303-0.305 약상승.
  • Δ(round 16 - round 4 best) = +0.0051 = +1.71%. 통계 비유의 (단일 seed, 비교 분포 없음) 이나 early stopping 조건이 v9-06 EarlyStopping(patience=5) 였다면 round 9 시점에서 이미 종료.

2.3 Codebook utilization 추이 (핵심)

Level round 1 round 4 (best val) round 16 Δ(16-1) β dead-code 회피 메커니즘
L1 5.06% 8.25% 10.56% +5.50%p 0.25 없음 (residual_quant.pyrestart_dead_codes() 미구현)
L2 11.13% 25.81% 30.19% +19.06%p 0.25 없음 (동일)
L3 14.06% 29.56% 34.50% +20.44%p 0.375 (1.5×) 없음 (동일)

관찰: - L1 < L2 < L3 단조 증가는 RQ 의 정상 패턴 반대. 정상 RQ 는 L1 (coarse) > L2 (mid) > L3 (fine) usage 가 monotonic 이어야 함 (RQ-VAE Lee et al. CVPR 2022). E3 에서는 L1 이 가장 빈약, L3 가 가장 풍부 — inverted hierarchy. - L1 이 32 codeword 중 약 3-4 개만 active (10.56% × 32 ≈ 3.4) — near-dead 계열 collapse. - L3 가 11 codeword active (34.5% × 32 ≈ 11) — β=0.375 가중 + memory_alignment γ=0.85 (L1 의 0.98 보다 낮은 anchoring) 의 협업 효과로 추정.

2.4 Memory Alignment similarity 추이

  • alignment_sim_mean L1: round 1 0.0349 → round 16 0.0401 (낮음, 0.04 근처 정체)
  • L2: 0.0122 → 0.0043 (감소)
  • L3: 0.0147 → 0.0060 (감소)

해석: 50 가구 client 간 codebook similarity 는 모든 level 에서 매우 낮다 (< 0.07). 이는 (a) 가구 간 peak 패턴 이질성이 크거나, (b) γ=0.98 (L1) 이 codebook 을 거의 client mean 으로 끌고 가지 못하는 것 — γ 가 1.0 에 가까울수록 server 가 client average 에 더 의존, 반대로 1.0 이면 단순 mean 이므로 0.98 은 아주 약한 anchoring. ADR-010 §11 R9 가드 (γ=0.8 rollback) 의 트리거는 util < 20% 인데 L1 이 정확히 그 임계 (10.56% < 20%) 이므로 rollback 권고 대상이지만 본 run 은 이미 round 15 진행 → 중간 변경은 결과 해석 복잡화.


3. H10-3 Final 검증

3.1 ADR-010 H10-3 정의

"SCINet + Residual Quantization (RQ, 3 level × M=32) 은 동일 통신량(총 code budget ≈ 96) 조건에서 flat VQ (M=96 단일) 대비 collapse 를 회피한다" - Falsification 조건: 전체 CB util < 50% 또는 MSE > 0.515 (= B0)

OR/AND 표기 정합성 (revision 1): ADR-010 원문은 "또는 (OR)"로 표기. 이전 컨텍스트에 "conjunctive (AND)" 표기 혼선이 있었으나, 어느 해석이든 axis 1 FAIL이므로 결합 FAIL은 동일. 본 보고서는 ADR-010 원문 OR 해석을 기준으로 하되, conjunctive 평가 결과도 §3.4에 병기.

3.2 Axis 1 (util > 50%): FAIL (확정)

측정값 round 16 (잠정) round 30 (final) Δ
util_L1 10.56% 11.19% +0.63%p
util_L2 30.19% 32.25% +2.06%p
util_L3 34.50% 36.19% +1.69%p
평균 (3-level) 25.08% 26.54% +1.46%p

평균 26.54% 는 50% threshold 의 절반 수준. Axis 1 FAIL 확정 — 라운드 16→30 외삽 (25-27%) 정확히 적중 (실측 26.54%).

단순 평균 vs 가중 평균: weighted mean (β-가중: w_L1=0.25, w_L2=0.25, w_L3=0.375 / sum=0.875 정규화) 으로 해석하면: $$ util_{\text{weighted}} = \frac{0.25 \cdot 11.19 + 0.25 \cdot 32.25 + 0.375 \cdot 36.19}{0.875} = \frac{2.80 + 8.06 + 13.57}{0.875} = 27.92\% $$ 단순 평균 26.54% 와 차이 1.38%p. 어떤 해석이든 50% threshold 미달, FAIL 결론 불변.

3.3 Axis 2 (MSE ≤ 0.515): PASS (확정)

  • test_mse = 0.493 (MLflow metrics.test_mse, evaluate_household 산출)
  • B0 Local DLinear baseline MSE = 0.4755 → E3 MSE 0.493 > 0.4755 (B0보다 약간 나쁨)
  • v9-06 SCINet (5-apt × 3-seed) MSE 0.498 → E3 0.493 ≈ 동등 (Δ -0.005)
  • 0.493 ≤ 0.515 → Axis 2 PASS

3.4 결합 판정 (final)

평가 조건 Axis 1 (util) Axis 2 (mse) 결합
ADR-010 원문 (OR — 둘 중 하나라도 위반 시 falsified) FAIL PASS falsified → H10-3 FAIL
컨텍스트 conjunctive (AND — 둘 다 충족 시 통과) FAIL PASS AND → FAIL

두 해석 모두 H10-3 FAIL. axis 1의 압도적 미달 (26.54% << 50%) 이 dominant.

보완 해석 (실험 설계 한계): H10-3 의 의도는 "flat VQ (M=96) 대비 collapse 회피" 였으나 실제 실험에서는 flat VQ 대조군이 없다 (v10-02 §3.1 IV 표에 명시되었지만 Stage 2 에서 launch 안 됨). 따라서 "absolute util > 50%" 의 정량 기준만으로 falsification 한다. 상대 비교가 부재하므로 H10-3 의 "RQ가 flat VQ 대비 우수한가" 명제는 v11 또는 addendum에서만 검증 가능. axis 2 PASS는 "RQ가 baseline B0 MSE를 보존한다"의 약한 의미만 가짐.


4. L3 β=0.375 (peak 가중) 효과 별도 평가

4.1 β 가중 메커니즘 (residual_quant.py:172)

vq_losses["L1"] = 0.25 * c1_raw
vq_losses["L2"] = 0.25 * c2_raw
vq_losses["L3"] = 0.375 * c3_raw   # ← 1.5× peak 가중
- commitment loss 를 L3 에서 1.5× 곱하면 encoder 가 L3 codebook 에 더 가까이 (z_L3 → q_L3) 끌려가도록 gradient 압력 증가. 이 압력이 codebook 의 EMA update 를 통해 더 다양한 codeword 활성을 간접 유도할 수 있음.

4.2 L3 util 단조 증가 관찰

  • round 1: 14.06% → round 16: 34.50% (Δ +20.44%p)
  • L1: +5.50%p, L2: +19.06%p, L3: +20.44%p — L3 가 절대 증가폭 최대.
  • L3 의 round 4-16 plateau slope 는 L2 와 거의 동일 (둘 다 round 8 이후 30-35% 진동) — β 가중의 유의한 효과는 round 1-7 에서만 가시화.

4.3 β 효과 vs residual cascade 효과 (구분 시도)

L3 util 증가는 두 가설로 설명 가능: - H_β (의도된 메커니즘): β=0.375 가중이 L3 codebook 을 더 활성화한다. - H_cascade (반증 후보): L1 dead 로 인해 q_L1 ≈ 0 (또는 매우 적은 codeword 만 사용) → r_L1 ≈ x → q_L2 가 사실상 z 를 양자화 → r_L2 = z - q_L2 의 신호량은 z 의 전체 분산 중 미설명 부분 → L3 가 이 잔차를 quantize. 즉 L3 가 활성화된 것은 β 가중 때문이 아니라 L1 collapse 의 부산물.

구분 증거: H_β 가 옳다면 L1-L2 가 정상 (>50%) 일 때 L3 가 더 활성화되어야 한다. 본 실험은 L1 dead 라 두 가설 분리 불가. 결정적 증거는 ablation (β=[0.25, 0.25, 0.25] 동등 가중 vs β=[0.25, 0.25, 0.375]) 이지만 본 phase 에서는 미수행.

4.4 E3 vs E3_simple 사후 비교 (revision 1 추가)

Variant C1 init C2 dead restart C3 β M1 γ L3 util final PAPE
E3 (full) K-means++ RQ에 미구현 (no-op) 0.375 (L3 1.5×) {0.98, 0.95, 0.85} 36.19% 49.67
E3_simple torch.randn 미구현 (no-op) 0.25 (uniform) uniform 0.95 5.63% 50.76
Δ (E3 - simple) +30.56pp -1.09

관찰: - L3 util 차이 +30.56pp는 매우 크다 (5.63% → 36.19%, 6.4× 증가). - 그러나 PAPE 차이는 -1.09 (E3가 약간만 좋음). 통계적으로 비유의에 가까운 미미한 수준. - → β 가중이 L3 codebook의 active code 수는 늘렸으나, 실제 peak prediction 품질에 미치는 효과는 미미. - 단 simple은 C1 (init) + C3 (β) + M1 (γ) 의 3 요인 동시 변경이라 β 단독 효과는 여전히 분리 불가. PAPE Δ -1.09 가 β 단독 기여라면 β의 peak 품질 효과는 negligible.

Revised 결론: β=0.375 의 효과는 inconclusive (혼동 미해소). L3 util 증가는 측정됐으나 (a) L1 dead 와의 H_cascade confound, (b) simple ablation의 C1/C3/M1 동시 변경 confound — 두 confound 모두 미해소. "L3 codebook active code 증가"와 "peak prediction 품질 개선"은 분리해서 표현 필요. addendum ablation (one-out-at-a-time, β만 단독 변경) 필수.


5. L1 dead 원인 진단

5.1 가설 A: SCINet binary tree 첫 level 의 표현 다양성 부족

  • SCINet (Liu et al. NeurIPS 2022) 의 SCI-Block 은 odd/even split + interactive learning. Level 1 (가장 coarse) 에서 아직 시간축 분리가 적게 일어난 상태에서 pool 됨 (코드 line 296-299: z = self.sci_net(h); h_pooled = z.mean(dim=1)).
  • pooled feature h_L1 ∈ R^32 은 모든 96 timestep 의 average → 가구별 평균 부하 패턴이 dominant signal → 코드북에서 가구 평균 (1-2 modes) 만 활성.
  • 5.06% × 32 ≈ 1.6 codeword (round 1) → 10.56% × 32 ≈ 3.4 codeword (round 16) — 가구별 평균 부하의 mode 수 ≈ 3-4 정도와 일치.

5.2 가설 B: restart_dead_codes() 미호출 (구현 결함)

  • 검증: Grep restart_dead_codes 결과:
  • vq_base.py:303 → 정의됨 (DeadCodebookTracker, dead_code_epochs=5 default)
  • decomp_cb.py, freq_band_cb.py, product_quant.py 모두 restart_dead_codes() 메서드 정의 + 학습 스크립트 (E1/E2/E4) 에서 호출 가능
  • residual_quant.pyrestart_dead_codes() 메서드를 정의하지 않았음. ResidualQuant 클래스에 restart 인터페이스 부재.
  • vq_layers_simple/vq_base_simple.py:145: restart_dead_codes() → int [always 0] (no-op) — E3_simple도 마찬가지로 비작동.
  • 영향: VQBase.dead_code_epochs=5 default 가 작동하려면 restart_dead_codes(batch_hidden) 호출이 필요. RQ 에서는 호출 자체가 불가능하므로 L1 의 dead codeword 가 5 epoch 후에도 영구 dead 상태로 남음.
  • 간접 증거: L1 utilization 이 round 1 (5.06%) → round 5 (7.94%) → round 30 (11.19%) — 매우 느리게 활성화되는 패턴은 정상 EMA + commitment 학습으로만 (즉 새 batch 가 우연히 dead codeword 를 hit 하는 확률) 설명 가능. restart 메커니즘이 작동했다면 round 5-10 시점에서 급격한 점프가 보여야 했음.

Revision 1 영향 추정 보강: 다른 E (E1 NBEATSx+DecompCB, E2 NHITS+FreqBand, E4 Crossformer+PQ) 는 모두 restart_dead_codes() 호출 가능했음에도 PAPE 55-85로 catastrophic. 즉 restart 자체가 L1 dead 의 "단일 처방"이 되지 않을 가능성* — 가설 A (architectural pool 평균화) 가 architectural primary 일 수 있음. RQ에 restart 추가는 필요 조건이지 충분 조건이 아님.

C2 ablation 검증 불가능 (revision 1 명시): simple과 full 양쪽 모두 RQ에 restart 미구현 → simple vs full의 L1 util 차이 (4.25% vs 11.19%) 를 "C2 dead restart 효과"로 귀속하는 것은 반사실 가짜 인과. 이전 컨텍스트의 "C1 K-means++ + C2 dead restart 효과 명확" 진술은 본 revision에서 제거. 실제 차이의 원인 후보는 C1 (init) + C3 (β) + M1 (γ) stack — 이 3 요인 분리는 본 phase에서 불가능, addendum 필요.

5.3 가설 C: γ=0.98 (L1 Memory Alignment) 가 codebook drift 억제

  • per_cb_gamma = {L1: 0.98, L2: 0.95, L3: 0.85}
  • L1 이 가장 server-anchored — 즉 client 별 codebook 다양성을 가장 강하게 억제. 50 client 평균 ≈ 단일 mode 가구 부하 평균 → server codebook 이 거의 같은 1-2 codeword 로 수렴.
  • ADR-010 §11 R9 의 "γ=0.8 rollback" 은 정확히 이 시나리오 대응. 본 run 에서는 적용되지 않음 (rollback trigger 가 자동이 아니라 manual decision).

5.4 종합 (revision 1 — "교집합" 주장 약화)

가설 강도 사후 증거
A (SCINet pool 평균화) robust architectural, pooled feature 차원 한계 — 코드/이론 일치
B (restart_dead_codes() 미구현) robust 코드 grep 검증 (RQ 미정의, simple no-op) — 명확한 결함
C (γ=0.98 anchoring) 부호 반대 가능성 simple ablation에서 γ uniform 0.95 시 L1 util 4.25% (E3 11.19%보다 더 낮음) — 가설 C 단독 기여가 dead의 완화가 아닌 악화 방향이거나, 다른 요인 (C1/C3) 효과에 가려진 것

Revised 결론: - 가설 A와 B는 robust한 후보. 가설 C는 simple ablation의 부분적 반증 (γ 약화 시 L1 더 망가짐) 으로 단독 기여 부호가 반대일 가능성이 있음. - 따라서 이전 진술 "A∩B∩C 교집합"은 부정확 — A와 B의 robust한 기여는 인정하되, C의 단독 기여는 inconclusive. simple ablation이 C1/C3/M1 동시 변경이라 C 단독 효과 분리 불가. - 단일 원인 dominant 분리 불가 — 본 phase의 ablation 설계로는 A/B/C 중 어느 하나가 dominant인지 결정할 수 없음. - 가장 수정 비용 낮은 개입은 B (restart_dead_codes 추가, ~50 lines). C 는 hyperparameter, A 는 architecture (pool 위치 변경 = 설계 재작업). - 본 run 결과는 그대로 받되, addendum 에서 one-out-at-a-time ablation (B only / C only / A pool 변경) 8-round smoke 재실행이 단독 기여 분리에 필수.


6. v9-06 SCINet (Watch PASS) 대비 약화 정도 (final, 확정)

6.1 정량 비교

지표 v6 R1b (pFL+VQ near-collapse 4%) v9-06 SCINet (n=15, 5apt×3seed) v10 E3 SCINet+RQ (final, n=50) E3 vs v9-06 Δ
PAPE 37.36 42.35 49.67 +7.32pp 악화
HR@1 (미기록) 34.48 20.21 -14.27pp 악화
HR@2 (미기록) 46.38 31.66 -14.72pp 악화
MSE (미기록) 0.498 0.493 -0.005 (≈ 동등)

6.2 결론 (확정)

VQ 이식이 SCINet을 약화시켰다 — 확정 결론: - PAPE +7.32pp, HR@1 -14.27pp, HR@2 -14.72pp 후퇴. - MSE만 동등 (0.498 vs 0.493) — 이는 H10-3 axis 2 PASS 의 의미를 약화시킴 (RQ는 baseline 평균 오차는 보존했으나 peak 정확도는 손상). - v6 R1b PAPE 37.36 vs v10 E3 49.67 → v10 phase 전체가 v6 대비 regression (+12.31pp 악화).

6.3 비교 가능성 한계

n 비대칭 (revision 1 disclosure): - v9-06 SCINet: 5-apt × 3-seed = n=15 - v10 E3: 50-가구 전수 × seed=42 = n=50 - 직접 비교 시 n 비대칭. 5-apt subset 추출 (ADR-010 §11 R7) 이 정식 비교, 본 단순 비교는 점추정 수준. - v9-06 의 5-apt × seed=42 단일 (n=5) subset 추출 시 PAPE/HR@1 변동 가능 → reporter 단계에서 정확 1:1 비교 권고.

단일 seed disclosure: v10 전체가 seed=42 단일이라 std/CI/p-value 부재. 본 비교는 점추정의 상대 격차 신호 만 제공. 통계 비유의에 가까운 결론 강도.

6.4 예측 밴드 사후 검증

  • 이전 잠정 예측: "test PAPE 는 v9-06 (42.35) 보다 약간 높을 가능성 (43-46 추정)" → 실측 49.67 → 예측 밴드 outside (+3.67pp 더 악화). 잠정 예측은 mild overfitting 만 가정했으나 실제는 VQ 이식 자체의 더 큰 손상이 확인됨. 잠정 예측이 너무 낙관적이었음을 사후 인정.

7. 통신량 trade-off 분석

모델 bytes_per_round 통신 효율 (낮을수록 좋음)
E3 SCINet+RQ 12,288 3 × 32 × 32 × 4 (3 level × M=32 × d=32 × 4 bytes)
E1 NBEATSx+DecompCB (참고) (script 확인 필요, 잠정 33,792) 3 CB × M=32 × d=88 (∵ trend 3-d + seasonal 5-d + generic ?) — 추정만
E2 NHITS+FreqBand (잠정) 3 CB × M=32 × d=64
E4 Crossformer+PQ 4,096 4 sub × M=16 × d=64 × 4

위 추정은 confidence low. reporter 단계에서 4 E* 의 정확한 bytes_per_round 를 인용 후 표 갱신.

E3 의 cost-effectiveness (final): - v10 E 중 E4 다음으로 두 번째로 낮은 통신량 (12,288 vs E1/E2 의 24-34 KB). - E3 PAPE 49.67 vs B1 FedAvg DLinear PAPE 44.56 → E3가 B1보다 PAPE 5.11pp 더 나쁨 (worse), 그러면서 통신량은 12 KB (B1 전체 모델 파라미터 전송 추정 39 KB의 31%). 통신 효율은 좋으나 PAPE 품질이 baseline 미달. - E3 vs E4 (PAPE 49.67 vs 67.59) → E3가 PAPE 17.92pp 우위, 통신량 3× (12 KB vs 4 KB). bytes/HR@1 효율: E3 608 / E4 362 → E4가 통신 효율은 더 좋으나 절대 품질이 처참 (HR@1 11.30). - Final 결론: E3는 v10 E 중 cost-effectiveness가 상대적으로 양호하나, B1 FedAvg DLinear 대비 절대 품질에서 패배. v10 phase 전체가 v6 R1b PAPE 37.36 / v9-06 SCINet PAPE 42.35 대비 통신/품질 모두 regression. cost-effectiveness 결론 negative.

모델 bytes/round PAPE HR@1 bytes/HR@1
B0 Local DLinear 0 40.34 (미기록)
B1 FedAvg DLinear (미보고) 44.56 (미기록)
E3 SCINet+RQ 12,288 49.67 20.21 608
E4 Crossformer+PQ 4,096 67.59 11.30 362

8. wait 권고 사후 검증 (revision 1)

8.1 사후 결과

가치 사전 강도 사후 검증
(a) test PAPE/HR@1/MSE round 30 후 점추정 확정 → H10-3 의 두 번째 조건 (MSE ≤ 0.515) 검증 높음 회수 — test_pape 49.67 / hr1 20.21 / mse 0.493 확정. axis 2 PASS 확인.
(b) MLflow mlflow.log_artifact 로 best checkpoint + y_true/y_pred npy 저장 → reporter 합본 + 후속 ablation 의 출발점 높음 회수 — best_global.pt + npy 저장
(c) round 16-30 동안 L1 util 의 추세 확정 중간 회수 — 외삽 25-27% → 실측 26.54% (정확)
(d) val_loss best round 4 갱신 가능성 매우 낮음 확인 — round 4 plateau 유지, round 4-30 동안 best 갱신 0건

8.2 사후 평가

  • wait 권고는 옳았다 — 산출물 회수 vs GPU 3시간 trade-off 양호.
  • 사전 disclosure ("best 갱신 가능성 매우 낮음") 와 외삽 ("util 25-27%") 모두 사후 정확.
  • abort 선택했다면 (a) test 메트릭 영구 미확인 + (b) checkpoint 미저장 발생, abort보다 wait가 옳은 결정이었음을 사후 확정.

9. 가설 H10-3 외의 부산물 (final, revision 1)

9.1 v10 phase 안에서 E3 의 상대적 위치 (final, baseline 출처 정정)

PAPE 비교 (v10 phase, 50가구 전수): - E1: B2 46.38 → E1 55.01 (+8.63pp 악화) - E2: B3 44.66 → E2 84.97 (+40.31pp 악화) - E3: SCINet noVQ baseline 부재 (v10 phase에서 미학습), v9-06 SCINet 42.35 간접 비교 → +7.32pp 악화 - E4: B4 41.81 → E4 67.59 (+25.78pp 악화)

→ E3가 v10 E 중 PAPE 절대값 최저 (49.67) 이지만, 모든 E가 noVQ baseline 대비 악화. E3는 v10 phase의 유일한 partial success 후보**이나 H10-3 가설 통과 의미는 없음 (axis 1 FAIL).

HR@1 비교 — baseline 출처 정정 (revision 1):

이전 컨텍스트의 "HR@1 20.21이 FL no-VQ baseline (B3 17.14, B4 18.57) 대비 우위" 진술은 출처 misalignment였음:

Run 학습 paradigm HR@1 비고
B3_NHITS_noVQ_seed42 v10 FL (50가구) (미기록) v10 baseline은 HR@1 미기록
B4_Crossformer_noVQ_seed42 v10 FL (50가구) (미기록) 동일
Phase1_NHITS_Local_seed42 Phase1 Local (단일 가구) 17.14 이전 컨텍스트 인용 출처
Phase1_PatchTST_Local_seed42 Phase1 Local 22.49 E3 (20.21)보다 +2.28pp 높음
Phase1_TimesNet_Local_seed42 Phase1 Local 21.13 E3보다 +0.92pp 높음
Phase1_iTransformer_Local_seed42 Phase1 Local 20.76 E3보다 +0.55pp 높음
E3 SCINet+RQ v10 FL (50가구) 20.21

결론 정정: 1. v10 FL no-VQ baseline (B0–B4) 은 HR@1 미기록 → E3 HR@1 20.21의 의미는 v10 phase 내부에서 검증 불가. 2. Phase1 NF Local 은 학습 paradigm 차이 (FL vs Local, 50가구 vs 단일 가구) — 정당한 baseline이 아님. 3. Phase1 6 모델 중 PatchTST (22.49) / TimesNet (21.13) / iTransformer (20.76) 가 E3 (20.21)보다 높거나 비슷 — "E3가 baseline 우위" 결론은 NHITS만 비교했을 때 cherry-pick 결과. 4. v9_06_revision1_lessons (Apt cherry-picking 검증 순서) 적용: 단일 baseline 우위 보고 시 동일 paradigm 6 모델 모두 동시 보고 필수. 본 revision에서 cherry-pick 회피.

Final 결론: E3 HR@1 20.21의 절대 의미는 inconclusive — v10 phase 내 동일 paradigm baseline 부재, Phase1 NF Local 비교는 paradigm mismatch.

9.2 H10-5 (구조 정합성) Final 시사점

  • ADR-010 §가설 H10-5: "4 정합 조합 PAPE mean < 4 비정합 조합 mean".
  • E1/E2/E3/E4 의 "정합" 결과: mean = (55.01 + 84.97 + 49.67 + 67.59) / 4 = 64.31.
  • 비정합 조합 (NBEATSx+PQ, NHITS+RQ, SCINet+DecompCB, Crossformer+FreqCB) 결과 — 본 phase 미수행. reporter 단계에서 4 비정합 조합 학습 후 정식 판정.
  • H10-5 잠정 negative — 정합 조합 mean 64.31은 v9-06 SCINet 42.35 / B0 40.34 baseline 모두 초과. 비정합 조합이 더 처참하지 않은 한 H10-5 PASS 가능성 낮음.

9.3 v10 phase 전체 경고

  • E1/E2/E3/E4 모두 noVQ baseline 또는 v9-06 대비 악화 → VQ 이식 자체가 partial collapse 유발. v6 R1b (PAPE 37.36, near-collapse 4%) 와 다르게 v10 의 큰 학습 (50 가구 × 30 round) + Memory Alignment 가 commit + EMA 와 충돌 하여 모델이 학습은 진행되나 품질은 약화.
  • E3 는 RQ 의 hierarchical 구조 덕분에 상대적으로 발산 회피 (val_loss 0.30 plateau, 발산 안 함). 이게 v10 phase 의 유일한 partial success 후보이나 partial success ≠ 가설 통과.

Revision 1 강조 (selective framing 회피): E3의 v10 내 상대 우위 (PAPE 49.67 vs E1 55 / E2 85 / E4 67) 는 H10-3 가설 통과를 시사하지 않는다. v10 phase 전체가 partial collapse 상태이므로 E3의 49.67조차 v6 R1b PAPE 37.36 / v9-06 SCINet 42.35 대비 약화. relative ranking을 partial pass처럼 읽을 위험 회피.


10. 후속 조치 (revision 1 완료 후 권고)

10.1 본 revision 1에서 처리 완료

  • H10-3 final 판정: axis 1 FAIL (util 26.54%) + axis 2 PASS (mse 0.493) → 결합 FAIL (OR/AND 모두)
  • v9-06 SCINet 대비 정량화: PAPE +7.32pp / HR@1 -14.27pp / HR@2 -14.72pp 후퇴 확정
  • "C2 dead restart 효과" 가짜 인과 제거 (RQ/simple 모두 비작동)
  • HR@1 baseline 출처 정정 (Phase1 NF Local, paradigm mismatch)
  • L1 dead "A∩B∩C 교집합" 약화 (C 부호 반대 가능성)
  • β=0.375 효과 final ablation 비교 (PAPE Δ -1.09)

10.2 후속 phase / addendum 권고

  1. ResidualQuant.restart_dead_codes() 구현 — engineer dispatch 사항. 인터페이스: restart_dead_codes(batch_hidden_per_level: dict[str, Tensor]) -> dict[str, int] (다른 3개 VQ 클래스와 통일). 학습 루프 hook도 추가.

  2. One-out-at-a-time ablation (1-apt × 8-round, single seed):

  3. C1 only (K-means++ vs torch.randn) — init 효과 측정
  4. C3 only (β=[0.25, 0.25, 0.375] vs β=[0.25, 0.25, 0.25]) — β peak 가중 단독 효과
  5. M1 only (γ differential vs γ uniform 0.95) — anchoring 단독 효과
  6. B (restart) ablation: restart 추가 vs 미추가 — 가설 B의 단독 기여 측정 → 4 변종 + baseline = 5 runs × ~2시간 = 10시간 GPU.

  7. 5-apt subset 정식 비교 (reporter 단계 의무):

  8. v9-06 EVAL set (Apt3, Apt6, Apt22, Apt27, Apt67) 일치 확인
  9. v10 E3의 50가구 evaluation에서 동일 5-apt subset 추출
  10. 단일 seed=42 vs v9-06 5-apt × seed=42 직접 비교 (n 일치)

  11. per-household L1 index 분포 시각화 (critic SHOULD FIX 권고):

  12. top-3 codeword 점유율 (50가구 × 3 codeword = 150 cell heatmap)
  13. codebook degradation 가구별 분포 정량화
  14. 본 보고서 §3 신규 추가 권고 — 다음 revision 또는 reporter 단계에서.

  15. flat VQ (M=96 단일) 대조군 학습 — H10-3 의 진짜 의도 ("RQ가 flat VQ 대비 collapse 회피") 검증. v11 또는 v10-addendum.

10.3 본 phase 결과 해석 무결성

  • 본 run 결과는 그대로 받되, addendum의 발견을 본 보고서에 사후 삽입하지 않음 (실험 무결성). 후속 보고서에서 별도 인용.

11. Risks (final, revision 1)

# Risk 영향 가드 / 사후 검증
A1 잠정 plateau 판정이 round 16-30 에서 부정 wait 권고 진술 오류 사후 정확 — round 4 plateau 유지, best 갱신 0건 (§8.2)
A2 "H10-3" 의 util 50% 임계 해석 (단순 평균 vs weighted) 모호 판정 변동 ±1.4%p, 결론 (FAIL) 자체는 불변 §3.2 두 해석 모두 명시 (26.54% vs 27.92%) — 둘 다 50% 미달
A3 β=0.375 효과의 H_β vs H_cascade confound "β 효과 inconclusive" 결론은 robust, 단 ablation 없이는 강한 주장 불가 §4.3 + §4.4 final 비교, addendum one-out-at-a-time 권고 (§10.2)
A4 seed=42 단일 — 본 분석 전체가 점추정, std/CI/p-value 일체 미보고 external validity 낮음 ADR-010 §11 R3 명시. 3-seed 확장 트리거는 v10 phase 종료 후 결정
A5 stderr "60개 유효하지 않거나 중복된 코드" 메시지 = data_loader.py:49 데이터 로딩 정상 로그 (dead code restart 메시지 아님) 사용자 컨텍스트 의존 분석 무효화 §5.2 에서 별도 검증. RQ는 restart 메서드 자체 미구현 → "60+ restart 반복" 해석은 본 revision에서 폐지
A6 v10 baseline B0/B1/B2/B3/B4 와 v9-06 recap 의 n 비대칭 (50가구 vs 5-apt × 3-seed) 직접 비교 의미 손상 §6.3 disclosure, reporter 단계 5-apt subset 추출 권고 (§10.2)
A7 ADR-010 H10-3 의 "전체 CB util > 50%" 정의 모호 (총합? 평균? 가중?) 판정 정량 기준 해석 다툼 §3.2 두 해석 모두 보고, 결론 불변
A8 (revision 1 추가) C2 dead restart 효과 가짜 인과 위험 — 이전 컨텍스트에서 RQ/simple 모두 restart 비작동임에도 simple vs full의 차이를 "C2 효과"로 귀속하려 함 ablation 효과 귀속 오류 본 revision에서 제거 — §5.2/§5.4 명시, "C1+C3+M1 stack 효과"로 정정
A9 (revision 1 추가) HR@1 baseline 출처 misalignment — "B3 17.14, B4 18.57"은 v10 FL no-VQ baseline이 아니라 Phase1 NF Local 베이스라인. paradigm mismatch E3 우위 결론이 cherry-pick으로 격하 §9.1 정정, Phase1 6 모델 모두 동시 보고 (PatchTST/TimesNet/iTransformer가 E3와 비슷하거나 높음)
A10 (revision 1 추가) "L1 dead 3원인 교집합" 강한 인과 주장 — simple ablation에서 γ uniform 시 L1 util 4.25% (E3 11.19% 보다 낮음) → 가설 C 부호 반대 가능성 단일 원인 dominant 분리 불가 §5.4 약화 — "A/B robust, C inconclusive (부호 반대 가능성)"
A11 (revision 1 추가) selective framing — relative ranking 강조 위험 E3의 v10 내 partial success가 H10-3 통과처럼 읽힐 위험 §0/§9.3 명시 — "relative ranking ≠ 가설 통과", v6/v9-06 대비 regression 강조

판정 (final, revision 1)

가설 판정 근거
H10-3 (이번 보고서 담당) FAIL (확정) axis 1 util 26.54% << 50% (FAIL) + axis 2 mse 0.493 ≤ 0.515 (PASS) → OR/AND 모두 결합 FAIL
H10-3 axis 1 (util > 50%) FAIL (확정) round 30 평균 26.54%, 가중 평균 27.92%, 둘 다 50% 미달
H10-3 axis 2 (MSE ≤ 0.515) PASS (확정) test_mse 0.493 ≤ 0.515. 단 v6 R1b / v9-06 대비 regression 의미 약화
L3 β=0.375 효과 inconclusive L3 util 단조 증가 (final 36.19%) 관찰, 단 (a) H_β/H_cascade confound, (b) simple ablation의 C1/C3/M1 동시 변경 confound — PAPE Δ -1.09 (negligible) (§4.3-4.4)
best round 의미 round 4 (13.3% 시점) plateau, mild overfitting 확정 val_loss best 갱신 26 round 미발생 (round 4-30)
L1 dead 원인 A (pool 평균화) + B (restart 미구현) robust, C (γ=0.98) 부호 반대 가능성 §5.4 — simple ablation γ uniform 시 L1 util 4.25%로 더 악화, "교집합" 주장 약화
v9-06 SCINet 대비 regression 확정 PAPE +7.32pp / HR@1 -14.27pp / HR@2 -14.72pp / MSE ≈ 동등. VQ 이식이 SCINet을 약화시킴.
통신량 trade-off negative (final) E3 12 KB로 v10 E* 중 양호하나 PAPE 49.67 < B1 FedAvg DLinear 44.56 → 절대 품질 baseline 미달
HR@1 baseline 비교 inconclusive v10 FL no-VQ는 HR@1 미기록, Phase1 NF Local은 paradigm mismatch (PatchTST 22.49 / TimesNet 21.13 / iTransformer 20.76 ≥ E3 20.21)
C2 dead restart 효과 검증 불가능 E3/E3_simple 양쪽 모두 RQ에 restart 비작동. 이전 컨텍스트의 "C2 효과 명확" 진술은 가짜 인과로 격하
wait 권고 사후 PASS (옳은 결정) (a)+(b)+(c) 산출물 회수, (d) best 갱신 0건 정확 외삽
relative ranking framing E3가 v10 E 중 PAPE 최저이나 partial success ≠ 가설 통과* §9.3 — v6 R1b 37.36 / v9-06 42.35 대비 regression

산출물 인벤토리 (final)

  • 본 분석: report/version10/exp-expert/v10-04_E3_SCINet_RQ_analysis.md (final, revision 1)
  • Critic review: report/version10/exp-critic/v10-04_E3_SCINet_RQ_critique.md (CONDITIONAL)
  • MLflow run: b7eac626124342fe84f3c12ecc7667e9 (FINISHED, round 30 완료)
  • MLflow metrics: round_train_loss / round_val_loss / cb_util_{L1,L2,L3} / alignment_sim_mean_{L1,L2,L3} (각 30 step) + test_pape / test_hr_tol1 / test_hr_tol2 / test_mse / test_mae
  • MLflow artifacts: best_global.pt / y_true.npy / y_pred.npy / per_household_metrics.json
  • MLflow params: 본 보고서 §1.2 표

Revision 1 Changelog (2026-04-25)

이번 revision에서 처리한 critic 지적 사항:

REJECT 항목 (재서술 완료)

  • C2 dead restart 효과 진술 정정: §0/§5.2/§5.4/판정 표/§11(A8) — RQ/simple 양쪽 비작동 명시, "C1+C3+M1 stack 효과"로 정정
  • HR@1 baseline 출처 정정: §0/§9.1/판정 표/§11(A9) — Phase1 NF Local paradigm mismatch + 6 모델 동시 비교 (cherry-pick 회피)

Final 결과 갱신 (잠정 → final)

  • §0 Executive Summary: PAPE 49.67 / HR@1 20.21 / HR@2 31.66 / MSE 0.493 / util final
  • §1.3 비교 표: E3 final 수치 채움
  • §3 H10-3 검증: axis 1 FAIL + axis 2 PASS → 결합 FAIL
  • §6 v9-06 비교: regression 확정 (+7.32pp / -14.27pp / -14.72pp)
  • §7 통신량 final
  • §8 wait 권고 사후 검증

CONCERN 처리

  • §5.4: "A∩B∩C 교집합" 약화 → A/B robust, C 부호 반대 가능성

PASS 유지

  • Risk A1-A7 사전 disclosure (사후 정확)
  • β=0.375 inconclusive 자기인정 (§4.3-4.4 final ablation 표 추가)
  • wait 권고 사후 적절성 (§8.2)
  • restart_dead_codes() RQ 미구현 발견 (§5.2 영향 추정 보강)

hook 자동 트리거

본 revision 1은 critic CONDITIONAL 판정에 대한 expert 재호출이며 1 revision cycle 의 종료 시점 (2회차 expert). hook 에 의해 자동 중단 + 카운터 리셋 예정. 추가 revision 필요 시 /reset-cycle 실행. revision 1로 충분하면 reporter 단계 진입.