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.pytrain 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 →
.npyartifact (가구별 분리) - 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.csv 및 outputs/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=80343b3dfed904f5f8ce383d8e294a2de(experimentv9-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 직접 확인 가능.