v9 Phase Summary¶
0. Executive Summary¶
v9는 v6 Exp6의 관찰 — Chronos-Bolt zero-shot의 HR 우위(37.7%) ↔ FeDPM R1b의 PAPE 우위(38.4%) — 를 연구 동기로 삼아 (1) HR 허용 범위를 완화하면 FM 우위가 유지되는가 (Stage 1), (2) Chronos-Bolt를 LoRA로 fine-tune하면 PAPE까지 개선되는가 (Stage 2)를 검증한 phase다.
| 가설 | 내용 | 판정 |
|---|---|---|
| H9-1 | HR tol 완화 시 FM의 HR 우위가 유지/증폭 | FAIL (B1이 tol=2에서 Chronos 추월) |
| H9-2 (MSE/HR) | LoRA fine-tune 후 MSE/HR 개선 | PASS (MSE −4.7%, HR@1 +1.25%p, 3-seed std 0.04) |
| H9-2 (PAPE) | LoRA fine-tune 후 PAPE 개선 | Watch / boundary Fail (3-seed 44.953 ± 0.054) |
| H9-1 부산물 | Peak-Weighted Loss β 의존성 입증 | PASS (β=2 vs β=100에서 PAPE +5.66%p 악화) |
Stage 1은 완료(reporter). Stage 2는 critic 수정본(v2) + 3-seed 확장(옵션 A) 모두 완료. phase CLOSED. Stage 3 진입 여부는 별도 track 결정.
1. Stage 1 — v6 Baseline Recap + HR@tol=2 재평가¶
실행¶
- 스크립트:
experiments/federated/v9_0423_baseline_recap.py(orchestrator 직접 작성) - 13 baseline + 1 대조군(P1_MSE_eq, β=100) = 총 14 variants × EC50 5가구
- 병렬 실행: Proc A (FM→NF→B0→B1) + Proc B (FedPM 4 phase, β=2 override)
- MLflow experiment:
v9-hr-resens
핵심 발견 (v9-01 보고서 §3에서 인용)¶
1) H9-1 FAIL — tol 완화 시 FM의 HR 우위는 유지되지 않고 오히려 약화. - tol=1: Chronos-Bolt 37.71% (1위) ≻ B1 36.92% - tol=2: B1 49.39% (1위) ≻ Chronos-Bolt 48.56% (역전) - Δtol 비교: FM 9.96~10.85%p < DLinear 계열 12.02~12.47%p - 해석: Chronos는 peak 시점을 "정확히" 잡지만, 약간 빗나간 예측의 tol 완화 회수율은 DLinear가 더 크다.
2) Peak-Weighted Loss의 β 의존성 입증 (P1 vs P1_MSE_eq): - P1 (α=2, β=2): PAPE 42.85%, MSE 0.542 - P1_MSE_eq (α=2, β=100): PAPE 48.51% (+5.66%p 악화), MSE 0.554 - β=100에서 SmoothL1이 MSE처럼 동작 → peak weighting α=2가 무력화 - v6 contribution #2(Peak-Weighted SmoothL1의 고유 효과)가 β=2 구간에서만 유효함을 실증.
3) v6 report 수치 재현 성공 — 주요 variant 모두 ±0.5%p 이내 일치: - Chronos-Bolt: MSE 0.555, PAPE 44.98%, HR@1 37.71% (v6와 정확 일치) - B0 (Local DLinear): PAPE 42.51% (v6: 42.55%) - B1 (FedAvg+DLinear): PAPE 43.64% (v6: 43.55%) - R1b: PAPE 37.36% (v6: 38.40%) — β=2.0 override 필수, default β=0.1로는 40.99% 실패
2. Stage 2 — Chronos-Bolt LoRA Fine-tuning¶
설계 (v9-02)¶
- target_modules =
["q", "v"], rank ∈ {4, 8}, lr=1e-5 (AutoGluon 권장), bf16, early_stop=5 - 5가구 독립 LoRA adapter (FL/VQ 결합은 Stage 3 scope)
- seed=42 단독 smoke → 성공 시 3-seed 확장 (사용자 결정 필요)
- trainable params: rank=4 147,456 (0.31%), rank=8 294,912 (0.61%)
실행¶
- 스크립트:
experiments/forecasting/v9_0423_chronos_lora.py(engineer 구현, 6/6 unit tests PASS) - 병렬:
bp6xxkeuo(rank=4) +bq4kacylb(rank=8) 동시 실행 (GPU 2GB/16GB 사용, 여유 충분) - MLflow experiment:
v9-chronos-lora
결과 (5가구 mean, seed=42)¶
| Model | MSE | MAE | MAPE | sMAPE | PAPE | HR@1 | HR@2 |
|---|---|---|---|---|---|---|---|
| Chronos zero-shot | 0.555 | 0.472 | 55.11 | 40.23 | 44.98 | 37.71 | 48.56 |
| Chronos LoRA r=4 | 0.531 | 0.458 | 51.60 | 38.91 | 44.997 | 38.95 | 50.24 |
| Chronos LoRA r=8 | 0.529 | 0.458 | 51.78 | 38.88 | 44.916 | 38.93 | 50.04 |
3-seed 확장 결과 (rank=8, seed ∈ {42, 123, 456}) — 옵션 A 완료¶
| seed | MSE | MAPE | sMAPE | PAPE | HR@1 | HR@2 |
|---|---|---|---|---|---|---|
| 42 | 0.5294 | 51.78 | 38.88 | 44.923 | 38.93 | 50.04 |
| 123 | 0.5300 | 51.64 | 38.88 | 45.029 | 38.94 | 50.04 |
| 456 | 0.5297 | 51.75 | 38.91 | 44.908 | 39.02 | 50.37 |
| mean ± std | 0.5297 ± 0.0002 | 51.72 ± 0.06 | 38.89 ± 0.02 | 44.953 ± 0.054 | 38.962 ± 0.043 | 50.151 ± 0.154 |
관찰: - PAPE std 0.054%p — Fail 임계 44.98%과 3-seed mean 44.953의 차이 0.027%p 밖에 안 됨. 즉 판정이 seed noise 범위 내에 놓여 있음 (95% CI ≈ [44.85, 45.06], Fail 임계 포함) - MSE std 0.0002 — 사실상 결정론적 (Chronos 백본 동결 + LoRA만 학습으로 data-order 변동이 최소) - HR@1 std 0.043 — zero-shot 37.71% 대비 개선폭(+1.25%p)이 std의 29배 → robust 개선 확인 - HR@2 std 0.154 — zero-shot 48.56% 대비 +1.59%p 개선 (std 10배) - 가구별 std: Apt51 PAPE ± 0.06, Apt6 ± 0.17, 전 가구 < 0.3% → per-apt 안정성도 확보
H9-2 판정 최종: - PAPE 축: boundary/Watch (3-seed mean 44.953, Fail 임계 44.98과 noise 오더 차이) — seed=42 단일 결과의 boundary 판정이 통계적으로 확정됨 - MSE/HR 축: PASS (3-seed로 신뢰구간 확보, 개선폭이 std 대비 10~29배) - 결론: Chronos-Bolt의 peak 정확도(PAPE)에 대한 LoRA의 개선력은 통계적으로 의미 있는 수준 아님. 전체 에러(MSE/HR)는 개선. v6 R1b(PAPE 37.36%) 대체 불가.
- MSE: zero-shot 대비 −4.7% 개선
- HR@1: +1.22%p 개선, HR@2: +1.48%p 개선
- PAPE: rank=4
+0.017%p, rank=8−0.064%p— noise 오더, 판정이 반올림에 노출됨 - rank=4 vs rank=8 mean 차이 0.08%p — 가구간 편차(21.9~69.1)에 비해 분리 불가
가구별 편차 (critic 지적 반영)¶
| Apt | ZS PAPE | LoRA-r8 PAPE | ΔPAPE | ZS HR@1 | LoRA-r8 HR@1 |
|---|---|---|---|---|---|
| Apt6 | 50.18 | 43.20 | −6.97 | 22.33 | 22.15 |
| Apt15 | 41.49 | 39.58 | −1.91 | 24.32 | 25.95 |
| Apt30 | 45.06 | 50.92 | +5.86 | 46.47 | 47.13 |
| Apt51 | 41.47 | 41.94 | +0.47 | 69.04 | 68.98 |
| Apt88 | 46.71 | 48.97 | +2.26 | 26.37 | 30.42 |
- Apt6은 LoRA 효과 가장 큼 (ΔPAPE −6.97%p), Apt30은 오히려 악화 (+5.86%p) — 모델이 가구별로 상반된 방향
- 5가구 mean만으로 H9-2 판정하는 것이 위험하다는 critic §4 지적 유효
수렴 관찰 (critic 반영)¶
- Apt51 rank=8: epoch 1이 best (val_mse=0.416, 이후 상승). Epoch 0 zero-shot val_mse 미로깅으로 "이미 최적" 주장의 reference 없음 — 원인 판정 보류.
- Apt88 rank=8: epoch 10 best (val_mse=0.530), 이후 정체
- Apt6 rank=8: epoch 45에 val_mse=0.5244 (rank=4 epoch 50 val_mse=0.5314보다 낮음) → rank 영향 완전 부정 불가
H9-2 판정 (설계서 §1.3 공식 3구간 기준)¶
- rank=4: PAPE 44.997% vs Fail 임계 44.98% → boundary Fail (반올림 정밀도 이슈)
- rank=8: PAPE 44.916% → Watch (zero-shot 대비 소폭 개선, Pass 임계 42.98% 미달)
- 종합: MSE/HR 축에서는 PASS, PAPE 축에서는 boundary/Watch. 부분 성공.
적대적 검토 (v9-03 critic, v2 반영 완료)¶
- Critical 2건 (판정 레이블 통일, PAPE 정밀도) + Major 4건 (rank 무효 주장 약화, Apt51 단정 철회, per-apt 비교, 상보성 재프레이밍) + Minor 3건 모두 v2에서 반영
- 보존 강점: primary claim(PAPE borderline) 정직 기술, 1-seed 한계 자기 인정, 재현성 명기
3. 산출물 인덱스¶
| 유형 | 경로 | 비고 |
|---|---|---|
| 스크립트 | experiments/federated/v9_0423_baseline_recap.py |
Stage 1 마스터 |
| 스크립트 | experiments/forecasting/v9_0423_chronos_lora.py |
Stage 2 학습 |
| 결과 CSV | outputs/v9_recap/summary.csv, per_apt_metrics.csv |
Stage 1 통합 |
| 결과 CSV | outputs/v9_chronos_lora/r{4,8}_seed42/summary.csv |
Stage 2 per-rank |
| 예측 npy | outputs/v9_recap/**/predictions/*.npy, outputs/v9_chronos_lora/{apt}/r{rank}_seed42/y_{true,pred}.npy |
재평가 가능 |
| LoRA adapter | outputs/v9_chronos_lora/{apt}/r{rank}_seed42/adapter/*.safetensors |
Stage 3 prior 후보 |
| 학습 로그 | outputs/v9_recap/proc_{a,b_fedpm,b_fedpm_b2,c_fedpm_mse_equiv}.log, outputs/v9_chronos_lora/logs/r{4,8}_seed42.log |
per-epoch loss |
| MLflow | experiment v9-hr-resens, v9-chronos-lora |
모든 메트릭 + artifact |
| Stage 1 보고서 | report/version9/reporter/v9-01_stage1_hr_sensitivity_recap.md |
247 줄 |
| Stage 2 설계서 | report/version9/exp-designer/v9-02_chronos_lora_design.md |
|
| Stage 2 결과 (v2) | report/version9/exp-expert/v9-03_chronos_lora_results.md |
critic 수정 반영 |
| Stage 2 critic | report/version9/exp-critic/v9-03_chronos_lora_critic.md |
CONDITIONAL PASS (9건 수정) |
4. 메타 — 수행 방법론 기록¶
- 병렬 실행 전략: GPU RTX 5070 Ti 단일. VRAM 2~3GB 사용 관찰 후 Stage 1의 Proc A/B, Stage 2의 rank=4/rank=8 병렬 배치로 시간 절반 단축.
- Orchestrator 직접 개입: Stage 1 재추론 마스터와 Stage 2 병렬 재배치는 exp-expert/engineer 위임 없이 orchestrator가 직접 스크립트 작성·실행. exp-expert는 결과 분석·보고서 작성 전용.
- Engineer 패치: v6 baseline 3개 스크립트(tsfm/nf/fedpm_*)에 y_true/y_pred .npy artifact 저장 추가. Stage 1 재추론 가능성 확보.
- Cycle 중단 기록:
- Stage 1 실행 1차 dispatch에서 exp-expert가 "지시서 전제 오류(mlruns 130 npy 오인)" 블로커 보고 → orchestrator가 직접 재추론 수행으로 우회
- Stage 2 실행 dispatch에서 exp-expert가 ScheduleWakeup 기반 대기로 진입 후 python 프로세스 종료 → orchestrator가 직접 병렬 학습 실행
- expert-critic 사이클 카운터 2회 리셋 (Stage 1, Stage 2 각 1회)
- NF reshape 버그 발견·수정:
v6_0415_nf_baseline.py가 y_true/y_pred를 flat 1D로 저장하여 compute_hr이 단일 윈도우로 오인, HR=0 출력. aggregate 단계에서(-1, PRED_LEN)reshape로 해결. - FedPM β 기본값 이슈: default β=0.1로는 v6 R1b 재현 실패 (PAPE 40.99%).
--beta 2.0override 필수 (v9-01 §5에 경고 명시, recap 스크립트에 FEDPM_BETA=2.0 상수로 고정).
5. 다음 단계 (사용자 결정 필요)¶
옵션 A: 3-seed 확장 — ✅ 완료 (2026-04-23 저녁)¶
- 실행: rank=8, seed ∈ {42, 123, 456}
- 결과: §2.3 참조. PAPE 44.953 ± 0.054 → boundary Watch 판정이 통계적으로 확정됨
- Apt51 epoch=1 best 현상: 3-seed 모두에서 반복 → seed 의존이 아니라 구조적 패턴 (zero-shot이 이미 Apt51에 최적에 가까움 또는 lr=1e-5 under-shoot)
- 결론: seed=42 단일 결과의 borderline 판정이 robust하며, 추가 lr sweep 없이는 PAPE 개선 여지가 희박
옵션 B: lr sweep¶
- 범위: rank=8, seed=42, lr ∈ {5e-6, 3e-5} 2-point
- 비용: ~1시간
- 목적: Apt51 epoch=1 best의 원인이 lr=1e-5 under-shoot인지 검증. PAPE 개선 여지 탐색
- 설계서 범위 초과 — critic §2 강점으로 인정된 "옵션 B 억제 판단"과 충돌. 필요 시 근거 명시 후 진행
옵션 C: Stage 3 진입 (Chronos-prior + VQ residual)¶
- 설계서 §3 경로 (B): Chronos zero-shot 또는 LoRA adapter를 frozen prior로 사용, residual을 v6 FeDPM 구조로 FL 학습
- critic 경고 (v9-03 critic §5 리스크): 현재 LoRA adapter가 underfit 상태라 prior로 쓰면 zero-shot + residual과 동등해질 위험
- 우선 옵션 A 혹은 B로 Stage 2 결과를 안정화한 뒤 진입 권장
옵션 D: 현재 결과로 phase closure + ADR¶
- v9 phase를 현재 상태로 종결, ADR-010 작성해 "Stage 2 borderline closure, Stage 3 별도 phase로 분리"
- 의미: Chronos-Bolt LoRA의 peak 정확도 개선 한계를 명확한 결론으로 기록 + 다음 연구 방향은 별도 track
판정¶
v9 phase CLOSED (옵션 A 3-seed 확장 완료). Stage 1 (H9-1 FAIL, β 의존성 PASS, v6 재현 PASS)와 Stage 2 (H9-2: MSE/HR PASS, PAPE boundary Watch 확정) 모두 통계적 결론이 확보됨.
최종 가설 판정¶
| 가설 | 판정 | 근거 |
|---|---|---|
| H9-1 (HR tol 완화 FM 우위) | FAIL | B1 HR@2=49.39% > Chronos 48.56%, Δtol FM<DLinear |
| H9-2 (MSE/HR 개선) | PASS | MSE −4.7%, HR@1 +1.25%p (3-seed std 0.04), HR@2 +1.59%p (std 0.15) |
| H9-2 (PAPE 개선) | Watch / boundary Fail | 3-seed PAPE 44.953 ± 0.054, Fail 임계 44.98과 0.027%p 차이 |
| 부산물 (Peak Loss β 의존성) | PASS | P1 42.85 vs P1_MSE_eq 48.51, +5.66%p |
Stage 2 귀결¶
Chronos-Bolt LoRA fine-tune은: - 전체 에러(MSE/MAE/MAPE/sMAPE) 개선에 유효 - 피크 시점 정확도(HR) 개선에 유효 - 피크 크기 정확도(PAPE) 개선에는 무효 — 3-seed로 통계적 확정
v6 R1b (PAPE 37.36%) 대체 불가. 두 모델은 각기 다른 축에서 강점을 가진다. Stage 3 (Chronos-prior + VQ residual) 결합 가능성은 여전히 존재하나 본 phase closure 이후 별도 track에서 결정.
후속 옵션 (phase 외부)¶
- Stage 3 (Chronos LoRA adapter + FeDPM residual) — 별도 phase/track으로 분리 결정
- lr sweep — Apt51 epoch=1 best 현상의 원인 규명. 설계서 범위 초과라 본 phase에서는 제외됨
phase closure 완료. 후속 단계 진입 여부는 사용자 판단.