콘텐츠로 이동

Source: report/version9/exp-expert/v9-03_chronos_lora_results.md

v9-03 Chronos-Bolt LoRA Fine-tuning Results (seed=42) — v2

Revision v2 note: critic 보고서 §1 이슈 7건 (Critical 2 + Major 4 + Minor 1) + §3 수정 요구 9건을 반영한 개정판. 변경 대응표는 §11 Revision Log 참조. 재실험 없이 기존 summary.csv / log 기반 재해석·재기술만 수행.

§0 요약 (Executive Summary)

본 보고서는 v9 Stage 2 — Chronos-Bolt-Small (47.7M) 백본에 LoRA adapter (rank ∈ {4, 8}, target={q, v}) 를 부착해 EC50 5가구에 대해 per-household fine-tuning 한 결과를 정리한다. seed=42 단일, 가구별 독립 학습 10회 (rank 2종 × 5가구).

공식 판정 (설계서 v9-02 §1.3, 단일 레이블화)

rank 평균 PAPE (원값) 평균 HR@1 판정 비고
4 44.997% 38.950% Fail (boundary) Fail 임계 44.98% 을 0.017%p 초과 — 측정 정밀도와 동일 오더
8 44.916% 38.926% Watch Watch 하단 진입, HR@1 Pass 임계 통과

H9-2 primary claim (PAPE ≤ 42.98% 또는 zero-shot 대비 −2%p 이상 개선) 은 FAIL. secondary claim (HR@1 ≥ 36.68%) 은 두 rank 모두 PASS. MSE / MAPE / sMAPE / HR 축은 개선 (MSE −4.5%, MAPE −3.3%p, HR@1 +1.22%p) 이나 PAPE 는 zero-shot 대비 rank=8 에서 −0.06%p 로 1-seed 측정 노이즈 수준의 변화에 그쳤다.

rank=4 vs rank=8 비교는 전 지표에서 소수점 수준 차이만 관찰되었다. 단일 seed 에서는 두 rank 의 차이가 측정 노이즈 오더 이며, "capacity 확장 무효" 는 3-seed 확장 전에는 판정 보류. 학습 수렴 curve 는 가구별로 극단적 편차를 보였고 (Apt51 epoch=1 best, Apt30 학습 무효, Apt6 만 꾸준히 개선), 설계서 §4 의 "5가구 train sample 부족 리스크" 가 실측으로 재현되었으나, 원인 귀속(data 부족 / lr under-shoot / zero-shot 근접 중 어느 것이 dominant 인지) 은 로그 정보만으로 판정 불가.

Stage 3 진입 전 root cause 해명 권장 — 3-seed 확장(옵션 A) 또는 lr 민감도(옵션 B) 중 하나는 필요.


§1 실험 구성

1.1 데이터

  • EC50 5가구: Apt6 / Apt15 / Apt30 / Apt51 / Apt88
  • context_len = 96 (24h), predict_len = 4 (1h), stride = 1
  • train/val/test split = 5758 / ~816–817 / 1657 samples per apt
  • 단, Apt51 val=816 (정수 1 차이, split 구현상 off-by-one; 전체 결과에 영향 없음)
  • 가구별 mean/std (train 기준) — Apt6: 1.34/1.22, Apt15: 0.80/0.71, Apt30: 0.54/0.54, Apt51: 0.74/0.88, Apt88: 1.48/1.27
  • source: src/peak_analysis/data/ec50_loader.py train split 출력에서 계산 (별도 재계산 시 python -c "import numpy as np; ..." 로 확인 가능). v9-01 §1.1 에서도 동일 값 사용
  • 원천 경로 (재현):
  • summary csv: outputs/v9_chronos_lora/r{4,8}_seed42/summary.csv
  • 학습 로그: outputs/v9_chronos_lora/logs/r{4,8}_seed42.log
  • adapter (10개): outputs/v9_chronos_lora/{apt}/r{4,8}_seed42/adapter/
  • per-apt zero-shot 참조값: outputs/v9_recap/per_apt_metrics.csv (model=chronos-bolt-small)

1.2 LoRA 설정

항목
백본 Chronos-Bolt-Small (47.7M params)
target_modules ["q", "v"] (attention query/value projection)
rank 4 / 8 (두 값 모두 실행)
lora_alpha 16 (rank=4), 16 (rank=8)
lora_dropout 0.0
Optimizer AdamW, lr=1e-5 (AutoGluon Chronos-Bolt 공식 권장값, 설계서 §3 ref 3 근거)
max_epochs 50
early_stop patience 5 (val_mse 기준)
precision bfloat16 (5070 Ti)
seed 42 (RANDOM_SEED)

1.3 Trainable parameters

rank trainable total trainable %
4 147,456 47,865,472 0.3081%
8 294,912 48,012,928 0.6142%

1.4 로깅

  • MLflow run_id: rank=4: 83aed5765fde43d695987adc8da94631, rank=8: 0343b3dfed904f5f8ce383d8e294a2de (experiment: v9-chronos-lora)
  • per-epoch train_loss / val_mse → mlflow.log_metric(step=)
  • LoRA adapter weights (safetensors + config) → mlflow.log_artifact() (10개 adapter, 재추론 가능)
  • y_true / y_pred → .npy artifact (가구별 분리)
  • summary.csv / 학습 로그 경로는 §1.1 참조

§2 결과 표 — 가구별 세부 + mean (zero-shot 병기)

2.1 rank=4 (trainable 0.31%) — 가구별 + zero-shot 대비 Δ

Apt MSE MAE MAPE sMAPE PAPE (LoRA) PAPE (ZS) ΔPAPE HR@1 (LoRA) HR@1 (ZS) ΔHR@1
Apt6 0.804 0.601 51.85 42.25 43.836 50.176 −6.34 21.91 22.33 −0.42
Apt15 0.163 0.284 53.36 35.72 39.394 41.492 −2.10 25.77 24.32 +1.45
Apt30 0.091 0.209 45.81 39.18 50.709 45.060 +5.65 47.07 46.47 +0.60
Apt51 0.637 0.536 44.55 36.02 41.694 41.468 +0.23 69.10 69.04 +0.06
Apt88 0.958 0.662 62.42 41.40 49.349 46.708 +2.64 30.90 26.37 +4.53
mean 0.531 0.458 51.60 38.91 44.997 44.98* +0.017 38.950 37.71* +1.24

* zero-shot mean 은 v9-01 §2 기록값(44.98 / 37.71). per-apt 값 평균 = 44.981 / 37.71 (둘 값 일치).

2.2 rank=8 (trainable 0.61%) — 가구별 + zero-shot 대비 Δ

Apt MSE MAE MAPE sMAPE PAPE (LoRA) PAPE (ZS) ΔPAPE HR@1 (LoRA) HR@1 (ZS) ΔHR@1
Apt6 0.798 0.600 52.49 42.10 43.204 50.176 −6.97 22.15 22.33 −0.18
Apt15 0.163 0.283 53.59 35.69 39.579 41.492 −1.91 25.95 24.32 +1.63
Apt30 0.091 0.209 45.74 39.16 50.923 45.060 +5.86 47.13 46.47 +0.66
Apt51 0.639 0.536 44.38 36.03 41.936 41.468 +0.47 68.98 69.04 −0.06
Apt88 0.956 0.663 62.69 41.41 48.972 46.708 +2.26 30.42 26.37 +4.05
mean 0.529 0.458 51.78 38.88 44.916 44.98* −0.066 38.926 37.71* +1.22

수치는 outputs/v9_chronos_lora/r{4,8}_seed42/summary.csvoutputs/v9_recap/per_apt_metrics.csv (model=chronos-bolt-small) 직접 인용. PAPE 는 소수 셋째자리까지 표기 (판정 임계 44.98% 과 동일 오더).

per-apt 관찰 (수정 요구 5 반영): - PAPE 개선 가구: Apt6 (−6.34 ~ −6.97%p, 큰 폭) / Apt15 (−2.0 ~ −1.9%p) - PAPE 악화 가구: Apt30 (+5.65 ~ +5.86%p, 큰 폭 악화) / Apt88 (+2.26 ~ +2.64%p) / Apt51 (+0.23 ~ +0.47%p) - HR@1 개선 가구: Apt15, Apt30, Apt88 (+1.45 ~ +4.53%p) - HR@1 변동 미미: Apt6, Apt51 (±0.66 이내)

mean +1.22%p HR 개선의 주 기여는 Apt88 (+4.05%p) + Apt15 (+1.63%p) + Apt30 (+0.66%p) — Apt51 은 mean 에 거의 기여하지 않고 (ΔHR@1=−0.06), Apt6 는 약간 손해 (−0.18). Apt51 에 대한 원인 귀속 (zero-shot 근접 vs lr under-shoot vs data 부족) 은 §6.2 에서 논하듯 판단 보류.

2.3 v6 R1b / B1 baseline 비교 (v9-01 §2 기준)

모델 MSE MAPE PAPE HR@1 HR@2
Chronos zero-shot 0.555 55.11 44.98 37.71 48.56
Chronos LoRA rank=4 0.531 51.60 44.997 38.95 50.24
Chronos LoRA rank=8 0.529 51.78 44.916 38.93 50.04
B1 (DLinear FedAvg) 0.505 68.67 43.64 36.92 49.39
v6 R1b (FedPM+DLinear residual) 0.629 78.43 37.36 21.27 32.42

§3 H9-2 판정 (단일 레이블, 정밀도 수정)

3.1 설계서 공식 기준 (v9-02 §1.3) + 판정

구간 조건 rank=4 rank=8
Pass PAPE ≤ 42.98% AND HR@1 ≥ 36.68% ❌ (44.997) ❌ (44.916)
Watch PAPE ∈ (42.98%, 44.98%] AND HR@1 ≥ 36.68% ✅ (44.916, HR@1=38.93)
Fail PAPE > 44.98% OR HR@1 < 36.68% ✅ Fail (boundary, 44.997 > 44.98)

단일 레이블 판정: - rank=4 → Fail (boundary) — PAPE=44.997%, Fail 임계 44.98% 을 +0.017%p 초과 - rank=8 → Watch — PAPE=44.916% (Watch 구간 내), HR@1=38.93% (Pass 임계 통과) - 종합 → H9-2 primary claim FAIL, secondary claim (HR@1) PASS (설계서 체계 밖 레이블 "PARTIAL PASS" 는 v2 에서 삭제)

3.2 지표별 판정 (수치 정밀도 수정)

  • PAPE: rank=4 = 44.997% (원값; 이전 v1 은 "45.00" 으로 반올림) — zero-shot (44.98%) 대비 +0.017%p 악화. Fail 경계선 상단. rank=8 = 44.916%−0.066%p 개선, Watch 하단 진입. 두 값 모두 Pass 기준 (≤ 42.98%) 에 약 −2.0%p 이상 미달.
  • MSE: rank=4 = 0.531, rank=8 = 0.529 — zero-shot (0.555) 대비 −4.4% / −4.6% 개선. MSE 축은 명확히 개선.
  • MAPE: rank=4 = 51.60%, rank=8 = 51.78% — zero-shot (55.11%) 대비 −3.5 ~ −3.3%p 개선.
  • HR@1: rank=4 = 38.95%, rank=8 = 38.93% — zero-shot (37.71%) 대비 +1.24%p / +1.22%p 개선. Pass 기준 (≥ 36.68%) 통과.
  • HR@2: rank=4 = 50.24%, rank=8 = 50.04% — zero-shot (48.56%) 대비 +1.68%p / +1.48%p 개선.

3.3 종합 판정: primary FAIL / secondary PASS — noise-sensitive caveat

  • rank=8 공식 판정 Watch. rank=4 공식 판정 Fail (boundary).
  • Noise-sensitive caveat: rank=4 의 Fail/Watch 결정은 0.017%p 차이로 이루어지며, 이는 (i) 1-seed 측정 재현성 오차, (ii) per-household mean 평균 계산의 소수 반올림 오차와 동일 오더. 판정 자체가 반올림 정밀도에 노출됨. 보고서는 원값(44.997) 기준으로 Fail 을 인정하되, "structural Fail 은 아님 — 3-seed 재측정 시 Watch 로 이동 가능성" 을 명시.
  • H9-2 의 primary claim ("LoRA 가 zero-shot PAPE 를 >2%p 개선") 은 명확히 달성 실패. MSE / MAPE / HR 에서만 개선.
  • 정직한 기술: PAPE 에서 LoRA 는 zero-shot 과 실질적으로 동일. Stage 2 primary observation (v9-01 §3.5) 이었던 "MAPE–PAPE 동시 개선" 중 MAPE 쪽만 개선되고 PAPE 는 move-nothing.

§4 rank=4 vs rank=8 비교 (단정 약화)

4.1 aggregate 수치 차이

지표 rank=4 rank=8 Δ (r8−r4)
MSE 0.531 0.529 −0.001
MAE 0.458 0.458 −0.000
MAPE 51.60 51.78 +0.18
sMAPE 38.91 38.88 −0.03
PAPE 44.997 44.916 −0.08
HR@1 38.95 38.93 −0.02
HR@2 50.24 50.04 −0.20

4.2 해석 (단일 seed 범위로 한정)

  • 전 지표에서 소수점 이하 수준 차이. rank 확장 (2배) 으로 trainable params 가 147K → 295K 로 증가했으나 aggregate 차이는 §6.3 의 HR@1 per-household std (21.91 ~ 69.10) 대비 현저히 작음 — 단일 seed 에서 두 rank 의 차이는 측정 노이즈 오더.
  • "capacity 확장 무효" 단정은 보류. 이는 3-seed 확장 결과에서만 정당화 가능. 현재로서는 "seed=42 기준 rank=4 와 rank=8 의 aggregate mean 차이가 noise 범위 내" 라는 관찰에 그친다.
  • 자기모순 인정: §4.2 v1 은 "rank=4 가 이미 Chronos 의 최대 학습 가능치를 포착" 이라는 가설을 제시했으나, 이는 §7.2 의 관찰 — Apt6 에서 rank=8 (epoch=45, val_mse=0.524) 이 rank=4 (epoch=50, val_mse=0.531) 보다 낮은 val_mse 에 도달 — 과 모순된다. 단일 가구 관찰로 일반화 불가능하나, 적어도 "rank=4 가 최대치" 주장은 증거 부족. 가설로만 유지하지 않고 철회.
  • 다음 단계 후보: (a) target_modules 를 ["q", "k", "v", "o"] 로 확장 (설계서 §2.2 fallback), (b) lr sweep — 둘 다 본 보고서 범위 밖.

§5 H9-2b 보조 관찰 — 실패 모드 비교 (상호보완성 증명이 아님)

v6 R1b (PAPE=37.36, HR@1=21.27) 과 Chronos LoRA r8 (PAPE=44.92, HR@1=38.93) 는 aggregate 지표에서 뚜렷히 다른 프로파일을 보인다.

지표 v6 R1b Chronos LoRA r8 강점 보유 모델
MSE 0.629 0.529 LoRA (−15.9%)
MAE 0.458
MAPE 78.43 51.78 LoRA (−26.65%p)
sMAPE 46.94 38.88 LoRA (−8.06%p)
PAPE 37.36 44.92 R1b (−7.56%p)
HR@1 21.27 38.93 LoRA (+17.66%p)
HR@2 32.42 50.04 LoRA (+17.62%p)

핵심 관찰:

  • R1b 는 peak 값 정확도 (PAPE) 에서 독보적 (−7.56%p 차이) 이지만 peak 시점 정확도 (HR) 는 낮다.
  • Chronos LoRA 는 peak 시점 정확도 (HR@1 +17.66%p) + 전체 에러 (MSE/MAE/MAPE) 강함. peak 의 위치는 잘 잡지만 peak 높이는 정확하지 않음.

주의 — 상호보완성 증명이 아님:

두 모델은 파이프라인 자체가 다르다:

v6 R1b Chronos LoRA r8
학습 구조 FedPM (5가구 연합 학습) 가구별 local 학습
손실 함수 SmoothL1 --beta 2.0 + DLinear residual Chronos quantile loss
정규화 / scale z-score 정규화 (가구별 mean/std) Chronos-Bolt 내부 per-series scaling
아키텍처 FedPM codebook + DLinear residual head T5-based Chronos backbone + LoRA adapter

이 차이 중 어느 것이 "서로 다른 실패 모드" 의 원인인지 본 실험은 분리하지 않는다. 따라서:

  • "두 모델의 강/약점이 다르다" 는 관찰은 Stage 3 결합의 motivation 일 뿐 — 직교성(상호보완성) 의 실증 아님
  • 결합 시 실패 모드가 상쇄될지 누적될지는 실제 Stage 3 실험 없이 판단 불가
  • v1 §5 마지막 문장 "이 분리는 Stage 3 의 결합 전략 근거가 된다" 는 v2 에서 "관찰일 뿐이며 Stage 3 결합의 선험적 근거로는 불충분, Stage 3 실험으로만 검증 가능" 으로 재기술
  • "Stage 3 결합이 R1b 수준 PAPE 달성" 같은 외삽 주장은 본 보고서에서 일절 하지 않음

§6 가구별 편차 분석

6.1 PAPE 편차 (rank=8 기준)

Apt PAPE HR@1 HR@2 mean (train) std (train)
Apt15 39.58 25.95 40.68 0.80 0.71
Apt51 41.94 68.98 79.18 0.74 0.88
Apt6 43.20 22.15 35.18 1.34 1.22
Apt88 48.97 30.42 36.99 1.48 1.27
Apt30 50.92 47.13 58.18 0.54 0.54

mean / std source: EC50 train split 에서 직접 계산. v9-01 §1.1 기록과 동일.

6.2 해석 (원인 귀속 보류)

  • Apt51 (HR@1 = 68.98): zero-shot 시점에서 이미 Chronos 가 강한 (v9-01 §4) 가구. peak 패턴이 시간대 고정적 (일상 가전 on/off 시간) 으로 추정. LoRA 는 epoch=1 에서 이미 best checkpoint, 이후 val_mse 증가로 early stop.
  • v1 단정 "LoRA 기여 ≈ 0 — zero-shot 이 이미 최적" 은 v2 에서 철회. best_epoch=1 은 LoRA A,B 가 1 epoch 만 update 된 상태이며, epoch 0 (pure zero-shot) val_mse 를 학습 로그에 기록하지 않아 가설 (a) zero-shot 근접 / (b) lr=1e-5 under-shoot (한 step gradient 가 오히려 val 을 손상) / (c) 데이터 부족 (~180 batches/epoch 로 adam state 미안정화) 중 dominant 를 판정할 reference 가 없다. 3가설 병렬 유지, 판단 보류.
  • (참고: per-apt 기록상 zero-shot Apt51 PAPE=41.47 / HR@1=69.04 vs LoRA r8 Apt51 PAPE=41.94 / HR@1=68.98 로 거의 동일 — 결과값은 zero-shot 과 동등하나, 이 값이 가설 (a) 때문인지 (b)/(c) 의 "epoch 1 이 우연히 zero-shot 근처" 때문인지 분리 불가.)
  • Apt30 (HR@1 = 47.13): mean 소비량이 가장 낮음 (0.54). PAPE 가 가장 높음에도 HR 은 2위. val_mse 가 epoch=1 부터 0.0283–0.0287 범위로 사실상 flat. 학습 가능한 dynamic range 자체가 존재하지 않는 것으로 관찰.
  • Apt6 (HR@1 = 22.15, rank=8 기준): 소비량 중간, 변동성 중간. rank=4 epoch=50 에서 val_mse=0.5314, rank=8 epoch=45 에서 val_mse=0.5244 (§7.2 인용). 이 가구에서만 LoRA 가 "학습다운 학습" 을 진행. Apt6 의 MSE/PAPE 개선 (ΔPAPE=−6.97%p) 기여가 전체 평균의 주요 소스.
  • Apt88 (HR@1 = 30.42): 소비량 가장 높고 std 도 가장 높음. rank=8 epoch=10 에서 best 후 plateau. val MSE 개선폭 작음 (0.538 → 0.530). HR@1 기여 +4.05%p 로 mean HR 개선의 주 원천.
  • Apt15 (HR@1 = 25.95): 낮은 소비량 + 산발적 peak. zero-shot/LoRA 모두 PAPE 는 좋지만 HR 이 낮음.

6.3 편차의 통계적 의미

5가구 단일 seed 구조상 HR@1 의 표준편차 (21.91 ~ 69.10) 가 모델 간 mean 차이 (LoRA r8 vs zero-shot 의 +1.22%p) 보다 훨씬 크다. 가구 간 dispersion 가 체제 변경 효과를 완전히 덮어버릴 규모. mean 만으로 "LoRA 가 HR 을 개선한다" 라고 주장하려면 3-seed 이상 확장이 필수이다. 본 보고서의 HR 개선 claim 은 seed=42 단일이라는 제약 하에서만 유효함을 명시. 이 argument 는 §4 의 "rank=4 vs rank=8 noise 수준" 판단에도 동일하게 적용된다.


§7 학습 수렴 곡선 관찰

7.1 가구별 best epoch 요약 (outputs/v9_chronos_lora/logs/r{4,8}_seed42.log 근거)

Apt rank=4 best_epoch rank=4 end rank=8 best_epoch rank=8 end 패턴
Apt6 50 50 45 50 (early stop) 꾸준한 개선, 수렴 전 종료
Apt15 35 40 (early stop) 22 27 (early stop) 중간 plateau, 정상 조기중단
Apt30 16 21 (early stop) 12 17 (early stop) val_mse 거의 변동 없음
Apt51 1 6 (early stop) 1 6 (early stop) epoch=1 best (원인 §6.2 참조, 판단 보류)
Apt88 17 22 (early stop) 10 15 (early stop) 조기 plateau

7.2 해석

  • Apt51 epoch=1 best: val_mse epoch=1 = 0.4148 (r4) / 0.4160 (r8) → epoch=2 부터 단조 증가. TEST 수치 (PAPE 41.69 / 41.94, HR@1 69.10 / 68.98) 는 zero-shot 과 거의 동일 (per-apt zs PAPE 41.47, HR@1 69.04). 단, §6.2 에서 논했듯 epoch 0 val_mse 부재로 "zero-shot 이 이미 최적" vs "lr under-shoot" vs "data 부족" 중 어느 것인지 확증 불가. 이 가구는 LoRA 가 어느 방향이든 mean 개선 기여가 사실상 0 인 것만 확실.
  • Apt30 학습 무효: val_mse 가 모든 epoch 에서 0.0283 – 0.0287 범위. 5자리 단위 변화만 있어 사실상 flat. 학습이 가능한 dynamic range 자체가 존재하지 않음 (소비량 mean=0.54, std=0.54).
  • Apt6 정상 학습 (수치 병기 — critic 수정 요구 8 반영):
  • rank=4: epoch=50 에서 best, val_mse=0.5314 (r4_seed42.log:105-106)
  • rank=8: epoch=45 에서 best, val_mse=0.5244 (r8_seed42.log:90-91)
  • rank=8 이 rank=4 보다 낮은 val_mse 에 도달했다는 관찰은 §4.2 의 "rank=4 가 최대치" 가설과 모순 — 1 가구 관찰이므로 일반화 불가. 다만 §4 의 해당 단정을 유지할 근거가 없다는 것은 확실.
  • Apt88: rank=8 epoch=10 best 후 plateau. val MSE 개선폭 작음. HR@1 은 그러나 +4.05%p 개선 (§2.2) — val_mse 개선이 작아도 peak 시점 분포가 shift.
  • patience=5 조기중단: Apt15 / Apt30 / Apt88 은 val_mse 가 plateau 에 들어간 후 5 epoch 내 개선 실패로 중단. Apt51 은 악화되기 시작해서 중단. patience 가 과도하게 conservative 해서 개선 기회를 놓쳤다고 볼 만한 증거 없음.
  • Apt6 만 early stop 미발동 (rank=4 epoch=50 도달): patience 내 개선이 계속 있었다는 뜻. max_epochs 를 50 → 100 으로 늘렸다면 Apt6 에서 더 깊은 수렴 가능성. 단 한 가구 관찰.

7.3 수렴 패턴이 H9-2 에 주는 함의

5가구 중 LoRA 가 의미 있는 update 를 한 가구는 Apt6 가 확인된 유일한 사례 (§6.2 의 원인 보류를 감안하면 "Apt6 외 4가구는 학습 기여가 미미하거나 판정 보류"). 이 비대칭이 mean 평가의 개선폭을 희석시키는 주된 구조적 원인이다. Stage 3 prior 로 Stage 2 adapter 를 사용할 경우, 4가구에서는 prior 가 사실상 zero-shot 와 동등한 feature 를 제공하게 되므로 Stage 3 의 residual head 가 "Chronos zero-shot + residual" 구조와 구별되지 않을 위험이 존재 (§8 옵션 C 리스크 참조).


§8 다음 단계 제안 (사용자 결정 필요)

본 절은 제안 이며, 자동 실행 대상이 아니다. 사용자 승인 후 별도 dispatch.

옵션 A — seed={123, 456} 확장

  • 목적: 통계적 노이즈 검증. 5가구 단일 seed 는 §6.3 논의와 같이 mean 신뢰도가 낮다.
  • 대상: rank=8 단일 (rank=4 와 차이가 소수점 수준이므로 rank=4 는 스킵)
  • 비용: ~1h (rank=8 × 5가구 × 2 seed)
  • 기대 산출: 3-seed mean ± std — H9-2 판정을 Watch → Pass/Fail 로 확정할 근거. rank=4 boundary Fail 이 noise 오차였는지 구조적 결과였는지 판정.
  • 리스크: Apt51 epoch=1 best 가 seed 독립 구조적 현상이라면 3-seed 에도 mean PAPE 가 44.5 ~ 45.5 구간에 머물 가능성.
  • 검증 대상: 측정 노이즈 vs 구조적 실패 (root cause 중 "data 부족" 가설은 간접 검증).

옵션 B — lr sweep

  • 목적: underfit 가설 검증. AutoGluon 권장 lr=1e-5 가 5가구 소량 데이터에 과소 (학습 신호 희석) 한지 직접 검증.
  • 비용: ~1~2h (rank=8, 5가구, 3 lr)
  • 설계서 상태: 설계서 §2.2 및 §3 ref 3 의 권장값 이탈. 사용자가 명시 지시하지 않았으므로 자동 착수 불가. 제안만.
  • 리스크: lr 상향 시 Apt51 overfit 이 더 심해질 위험 → 가구별 lr 차등 필요 가능성.
  • 검증 대상: Stage 2 root cause 중 "lr under-shoot" 가설 직접 검증. 옵션 A 와 검증 대상이 다름.

옵션 C — 현재 결과로 확정 후 Stage 3 진입

  • 목적: H9-2 secondary PASS 수용, Chronos LoRA 의 HR 우위를 Stage 3 (Chronos-prior + FedPM+DLinear residual) 의 입력 feature 로 활용
  • 근거: §5 관찰 — R1b (PAPE 강함) 와 LoRA (HR 강함) 의 aggregate 프로파일이 다름. 주의: §5 의 단서 — 상호보완성은 motivation 일 뿐 증명이 아니며, Stage 3 실험으로만 검증 가능
  • 비용: Stage 3 설계서 작성 필요 (exp-designer dispatch)
  • 리스크 (v2 확장, critic 수정 요구 7 반영):
  • Underfit adapter 를 prior 로 사용하는 리스크: §6.2 / §7.3 관찰상 5가구 중 Apt6 만 정상 학습, 나머지 4가구는 학습 기여 판단 보류/미미. 이 상태의 adapter 를 Stage 3 prior 로 쓰면 4가구에서는 Stage 3 성능이 (Chronos zero-shot + DLinear residual) 과 실질적으로 동일해질 위험. Stage 3 에서 "LoRA prior 기여" 와 "zero-shot prior 기여" 가 구별 안 됨.
  • Stage 2 root cause 미해결 상태 Stage 3 진입의 원인 속성화 불가: Stage 2 실패가 (a) zero-shot 근접 / (b) lr under-shoot / (c) data 부족 중 어느 것인지 미판정 상태로 Stage 3 진입 시, Stage 3 실패 시 원인을 (lr 부족 / rank 부족 / 구조 부적합 / residual head 결함) 어느 것에도 귀속 불가 — debugging 경로 차단.
  • 옵션 A 와 옵션 B 는 검증 대상이 다름: A 는 noise 검증(통계), B 는 underfit 해소(root cause). 현재 PAPE borderline 상태 (rank=4 boundary Fail, rank=8 Watch 하단) 에서는 둘 다 Stage 3 진입 전 고려 대상. A 로 Stage 3 진입을 정당화하는 것은 B 의 검증 대상(underfit)을 우회하는 것과 같다.
  • 서사 리스크: PAPE 미개선 상태에서 Stage 3 로 넘어가면 "LoRA 는 zero-shot 과 같다" 가 v9 narrative 의 default 가 되어 track-v9 기여도가 약화.

권장

옵션 A 또는 옵션 B 중 하나 이상 → 결과에 따라 C 결정.

  • 옵션 A 는 비용 대비 신뢰도 획득이 가장 크며, 3-seed 결과가 rank=8 mean PAPE 를 42.98% 이하로 끌어내리면 H9-2 Pass 로 전환 가능. 반대로 44 ~ 45% 에 머물면 Watch 확정 후 옵션 C 로 이동.
  • 옵션 B 는 설계서 범위 초과이므로 사용자의 명시 승인 없이 착수하지 않음. 다만 옵션 A 로는 underfit 가설(b) 이 검증되지 않는다는 점을 사용자 결정 시 명시적으로 인지 필요.
  • 옵션 A+B 병렬도 리소스 여유 시 고려 가치 있음 (critic §4 추가 실험 제안 참조).

§9 참고 — 원천 자료 및 재현 경로

  • summary: outputs/v9_chronos_lora/r4_seed42/summary.csv, outputs/v9_chronos_lora/r8_seed42/summary.csv
  • per-apt LoRA adapter (재추론 가능): outputs/v9_chronos_lora/{apt}/r{4,8}_seed42/adapter/ (10개, adapter_config.json + adapter_model.safetensors)
  • per-apt y_true / y_pred: outputs/v9_chronos_lora/{apt}/r{4,8}_seed42/y_{true,pred}.npy
  • 학습 로그: outputs/v9_chronos_lora/logs/r4_seed42.log, outputs/v9_chronos_lora/logs/r8_seed42.log
  • per-apt zero-shot 참조 (critic 수정 요구 5): outputs/v9_recap/per_apt_metrics.csv (model=chronos-bolt-small, group=FM)
  • MLflow run_id: rank=4 83aed5765fde43d695987adc8da94631 / rank=8 0343b3dfed904f5f8ce383d8e294a2de (experiment v9-chronos-lora)
  • 실행 스크립트: experiments/forecasting/v9_0423_chronos_lora.py (orchestrator 직접 실행)
  • 설계서: report/version9/exp-designer/v9-02_chronos_lora_design.md
  • Stage 1 recap (baseline 수치 근거): report/version9/reporter/v9-01_stage1_hr_sensitivity_recap.md
  • Critic 보고서 (본 v2 의 수정 근거): report/version9/exp-critic/v9-03_chronos_lora_critic.md

§10 정리 (단일 레이블)

항목 결과
H9-2 PAPE primary claim (LoRA < zero-shot −2%p) FAIL (rank=8 −0.066%p, rank=4 +0.017%p)
H9-2 HR secondary claim (HR@1 ≥ 36.68%) PASS (rank=8 38.93%, rank=4 38.95%)
H9-2 종합 공식 판정 rank=8 Watch, rank=4 Fail (boundary) — noise-sensitive
MSE / MAPE / sMAPE 개선 (MSE −4.6%, MAPE −3.3%p, sMAPE −1.3%p)
PAPE 미개선 (1-seed 노이즈 수준)
rank=4 vs rank=8 단일 seed 에서 차이 noise 오더. capacity 확장 유효성 판정 보류 (3-seed 필요)
가구별 수렴 Apt6 만 정상 학습 확인, Apt51 epoch=1 best (원인 보류), Apt30 학습 무효, Apt15/Apt88 조기 plateau
원인 귀속 data 부족 / lr under-shoot / zero-shot 근접 3가설 병렬, dominant 보류
다음 단계 옵션 A (3-seed, noise 검증) 또는 옵션 B (lr sweep, underfit 검증) 중 하나 이상 권장. Stage 3 진입(옵션 C) 은 root cause 해명 후 결정

Stage 2 seed=42 단일 실행 종료. 3-seed 확장 / lr sweep / Stage 3 진입 여부 사용자 결정 대기.


§11 Revision Log — critic 수정 요구 대응표

critic 보고서 report/version9/exp-critic/v9-03_chronos_lora_critic.md §3 수정 요구 체크리스트 9건에 대한 반영 위치.

# 분류 요구 요약 반영 섹션 / 문장
1 Critical 판정 레이블 통합 (rank=4 Fail boundary / rank=8 Watch 단일화, "PARTIAL PASS" 삭제) §0 판정표 재작성, §3.1 판정 행 단일화, §3.3 제목 "primary FAIL / secondary PASS" 로 변경, §10 "H9-2 종합 공식 판정" 행 단일 레이블. "PARTIAL PASS" 전 보고서에서 삭제 확인
2 Critical PAPE 소수 셋째자리 + noise-sensitive caveat §0 표 "44.997 / 44.916", §2.1 / §2.2 PAPE 열 소수 셋째자리 원값 표기 + ZS 대비 Δ 열, §3.2 첫 문단 "44.997%", §3.3 "Noise-sensitive caveat" 불릿 추가, §10 "noise-sensitive" 명시
3 Major "capacity 확장 무효" 단정 약화 + §7.2 rank=8 > rank=4 모순 인정 §0 Executive Summary "capacity 확장 무효 → 판정 보류" 로 재기술, §4.2 전면 재작성 (단일 seed 범위로 한정, Apt6 rank=8 val_mse 모순 인정, "rank=4 최대치" 가설 철회), §10 "rank=4 vs rank=8" 행 "noise 오더, 판정 보류"
4 Major Apt51 "LoRA 기여 ≈ 0" 철회 + epoch 0 reference 부재 명시 §6.2 Apt51 bullet 재작성 ("v1 단정 철회, 3가설 병렬 유지, epoch 0 val_mse 부재로 reference 없음"), §7.2 Apt51 bullet 재작성 (동일 caveat 병기), §10 "원인 귀속" 행 신설
5 Major §2 표에 per-apt zero-shot column 추가 §2.1 / §2.2 표 열 확장 — "PAPE (ZS)", "ΔPAPE", "HR@1 (ZS)", "ΔHR@1" 4개 열 추가, 출처 outputs/v9_recap/per_apt_metrics.csv 명시, per-apt 관찰 bullet 추가
6 Major §5 "상보성" 재프레이밍 §5 제목 "H9-2b 보조 관찰 — 실패 모드 비교 (상호보완성 증명이 아님)" 으로 변경, 파이프라인 차이 표 추가, "Stage 3 결합 근거 → motivation" 재기술, "외삽 주장 일절 안 함" 명시
7 Major §8 옵션 C 리스크 3건 추가 §8 옵션 C 리스크 항 4건으로 확장 — (1) underfit adapter → zero-shot + residual 동등 리스크, (2) root cause 미해명 시 원인 속성화 불가, (3) 옵션 A vs B 검증 대상 차이, (4) 서사 리스크. 옵션 A / 옵션 B "검증 대상" 라인 명시. 권장 문단도 "A 또는 B 중 하나 이상" 으로 재기술
8 Minor §7.2 rank=4 Apt6 best val_mse 병기 + §1.1 mean/std source §7.2 Apt6 bullet — "rank=4 epoch=50 val_mse=0.5314 (r4_seed42.log:105-106), rank=8 epoch=45 val_mse=0.5244 (r8_seed42.log:90-91)" 로그 라인 번호 인용. §1.1 에 mean/std source 및 재현 명령 + "원천 경로" 블록 추가
9 권고 §0 마지막 문장 원인 단일 가설 prettify 회피 §0 마지막 단락 "원인 귀속 ... 3가설 병렬 유지, dominant 미판정" 으로 명시. §10 "원인 귀속" 행 신설, 동일 내용 명시. v1 의 "5가구 train sample 부족 리스크가 실측으로 재현" 단정은 "재현되었으나 dominant 판정 불가" 로 약화

변경하지 않은 항목 (critic §2 강점으로 인정된 부분, v2 에서도 보존):

  • §3.2 primary claim 실패 정직 기술 ("PAPE 에서 LoRA 는 zero-shot 과 실질적으로 동일")
  • §6.3 1-seed 한계 기술 ("3-seed 이상 확장이 필수")
  • §9 재현성 명기 (run_id, adapter path, summary.csv path, log path)
  • §8 옵션 B(lr sweep) 억제 판단 ("설계서 범위 초과, 자동 착수 불가")

검증 가능성: 본 v2 는 신규 실험 없이 outputs/v9_chronos_lora/ 기존 artifact 와 outputs/v9_recap/per_apt_metrics.csv 만으로 모든 수정을 완료. critic 이 차기 cycle 에서 재검증 시 동일 path 직접 확인 가능.