콘텐츠로 이동

Source: report/version6/exp-expert/v6_0419_exp6_figures_design.md

Exp6 FeDPM 결과 시각화 — 도면 설계 문서 (v2)

  • 작성자: exp-expert
  • 버전: v2 (2026-04-19, exp-critic REVISE 반영)
  • 이전 버전: v1 (2026-04-19) — git log -- report/version6/exp-expert/v6_0419_exp6_figures_design.md 참조
  • 근거 보고서: report/version6/lab-leader/v6_0415_exp6_final_report.md
  • Critic 리뷰: report/version6/exp-critic/v6_0418_fl_baseline_adversarial_review.md (REVISE REQUIRED)
  • 구현 담당: engineer (별도 위임, 본 문서 스펙 확정)
  • 출력 경로: outputs/figures/v6_0419_exp6/
  • 툴 스택: matplotlib 3.x + seaborn (프로젝트 관례), pandas, mlflow
  • 공통 규칙:
  • DPI 300, 벡터(pdf) + 래스터(png) 동시 저장
  • 폰트: sans-serif, 논문 사이즈(본문 column width=3.3in, full-width=7.0in)
  • 색상: seaborn deep palette, FL 계열은 통일된 색상 체인 사용
  • 데이터는 data/exp6_results.csv에서 로드 (MLflow 우선, 유실 건은 보고서 직독 + 출처 주석)
  • 축 라벨·제목·범례·단위 필수
  • 재학습 없음, MLflow 신규 run 로깅 불필요(기존 run_id는 추적/참조용)

0. Changelog (v1 → v2)

Critic 비평 7건(C1~C3, M1~M5)에 대한 반영 내역. 모두 수용했으며, 일부는 근거 있는 수정안으로 변형 채택.

  • [C1 통계적 정직성] F1 Pareto에서 multi-seed/single-seed marker 스타일 분리(채움 vs 빈), errorbar는 multi-seed(P1)에만 표기. R1b 어노테이션을 "PAPE Best (38.40%, n=1)"로 톤다운하고 "single-seed, 3-seed 재현 필요"를 caption에 명시. R1b 3-seed 재실행은 §8 후속 작업으로 분리. (§3 F1, §8)
  • [C2 재현성] §6에 MLflow run_id 추적 테이블 신설(13개 모델 + sweep variants). FedLearning-Phase2-fedavg/local 등 baseline은 가구별 run을 평균 집계한 항목을 명시. PAPE는 별도 평가 스크립트로 산출되어 mlruns에 미저장 → CSV 데이터 정합성을 위한 빌드 스크립트(build_exp6_results_csv.py) 분리 명시. (§4.3, §6)
  • [C3 비교 공정성] F1을 2x2 family-subplot grid로 재설계 채택. 4개 subplot이 동일 축(MSE/PAPE 동일 범위) 공유, family별 background tinting. Pareto frontier 점선은 제거하여 frontier claim 회피. 통합 비교용 single-panel scatter는 F1b로 supplementary에 별도 저장. (§3 F1, F1b)
  • [M1 F7 waterfall] F7을 2D trajectory plot으로 재설계: PAPE축×MSE축 위에 V1→P1→R1b 화살표 경로. PAPE 개선과 MSE 악화를 한 화면에 동시 노출. waterfall 단일 plot은 misleading하므로 폐기. (§3 F7)
  • [M2 F6] PAPE ranking bar는 §3.4 표와 정보 중복. Supplementary 격하(논문 본문에서 빠짐). 다만 발표 슬라이드 용도가 있으므로 제거 대신 supplementary 유지. (§2 표, §3 F6)
  • [M3 F5] "No scale benefit" 주석을 "n=1 per setting, single-seed observation; needs replication"으로 명시 보강. (§3 F5)
  • [M4 누락 그림] F8(codebook usage histogram), F9(learning curve sample), F10(client-level PAPE distribution) 신규 추가. raw data 접근 가능성은 §6 MLflow 테이블에서 "확인 가능/유실" 명시(open question 폐기). (§3 F8/F9/F10, §6)
  • [M5 Open Question 제거] §7 폐기. 모든 결정사항을 본문 §3/§4 확정 스펙으로 흡수. (§7 삭제)

근거 있는 부분 수용 / 변형 사항 (비평을 그대로 받지 않은 부분):

  • C3에 대해 critic은 "(a) family subplot 또는 (b) frontier 제거"의 택일을 요구했으나, 본 v2는 (a)+(b) 동시 적용을 채택. 이유: family subplot만 적용해도 frontier 점선이 각 subplot 내에서 4개 점만 잇는 trivial line이 되어 정보 가치가 없음. 그래서 frontier 점선도 함께 제거. supplementary F1b(통합 scatter)에서도 frontier를 제거하여 일관성 유지.
  • M2에 대해 critic은 "supplementary 격하 또는 제거" 택일을 요구. 본 v2는 격하만 선택(제거하지 않음). 이유: 발표 슬라이드 1장으로 모든 모델을 서열화해 보여주는 용도가 별도로 있어 deliverable 가치 보존.
  • M4에 F9(learning curve)는 mlruns의 val_mse step 데이터에서 직접 추출 가능함을 §6에서 확인. F8(codebook usage)는 raw histogram이 mlruns에 미저장 가능성 높음 → engineer가 mlruns 점검 후 산출 가능 시에만 생성, 불가하면 supplementary에서 빠짐(이 fallback은 §3 F8에 명시).
  • C1의 R1b 3-seed 재실행 권고는 본 시각화 작업과 분리해 후속 task로 발행(§8). 이유: (1) v1 본문 figure 8개는 R1b가 single-seed임을 명시한 채로도 valid하게 그릴 수 있음, (2) 3-seed 재실행은 약 2~3시간 소요되어 시각화와 병렬 진행이 효율적.

1. 설계 원칙

1.1 청중 및 맥락

  • 1차 대상: 논문 Figure(컨퍼런스/저널 submission)
  • 2차 대상: 발표 슬라이드(세미나, 심사용), reviewer 대응 supplementary
  • 핵심 스토리: "동일 도메인 FL에서 VQ codebook은 한계가 있지만, Peak Loss + DLinear Residual 조합으로 PAPE 최선을 달성한다. 단, MSE 트레이드오프가 발생한다."

1.2 그림 선정 원칙

  • 가설 판정표(§2)와 1:1 대응되는 figure 확보 → 본문 reference 용이
  • MSE-PAPE 트레이드오프를 시각적으로 강조하되 frontier claim은 회피(family confounder 때문)
  • 베이스라인(NF/FM/Local/FL 4계열)은 family별 분리 표시가 기본
  • 스케일 실패(50 clients) 부정 결과도 정직하게 노출 + 통계적 한계 명시
  • single-seed vs multi-seed 차이를 marker style로 구분

2. 그림 목록 (v2 재구성)

ID 제목 종류 크기 우선순위 데이터 소스 본문/Supp
F1 MSE–PAPE by Family (2x2 subplot) scatter, family-faceted 7.0in × 5.5in ★★★ §3.1, §3.3 본문
F1b MSE–PAPE Combined (supplementary) scatter, single panel 7.0in × 4.5in §3.1, §3.3 Supp
F2 가설 판정 Bar (H6-1~H6-3b) 2x2 grouped bar 7.0in × 4.0in ★★★ §2 본문
F3 Beta Sweep Curve (alpha=2 고정) line (dual y-axis) 3.3in × 3.0in ★★ §3.2 본문
F4 Alpha Sweep Bar (beta=2 고정) bar (dual metric) 3.3in × 3.0in ★★ §3.2 본문
F5 50-clients vs 5-clients 비교 grouped bar (3 metrics) 7.0in × 3.5in ★★ §5 본문
F6 PAPE Ranking Horizontal Bar horizontal bar (color by family) 7.0in × 4.5in §3.4 Supp (격하)
F7 V1→P1→R1b Trajectory (MSE×PAPE) 2D arrow plot 4.5in × 4.0in ★★ §2, §3.1 본문
F8 Codebook Usage Histogram bar histogram 3.3in × 3.0in mlruns artifacts (조건부) Supp
F9 Learning Curve (val_mse vs round) line (multi-model overlay) 3.3in × 3.0in mlruns metrics Supp
F10 Client-level PAPE Distribution (50 clients) strip + box 3.3in × 3.0in mlruns 50-client artifacts (조건부) Supp

총 11개 figure. 본문 6개(F1, F2, F3, F4, F5, F7), Supplementary 5개(F1b, F6, F8, F9, F10). F8/F10은 mlruns에 raw 데이터 존재 시에만 생성(조건부, §6 참조).


3. 상세 스펙

F1. MSE–PAPE by Family (2x2 subplot grid) [재설계, C3 반영]

목적: 13개 모델의 MSE-PAPE 트레이드오프를 family별로 분리해서 보여줌. 학습 조건 confounder(FL/Local/NF 학습/FM zero-shot)를 시각적으로 분리해 부당한 frontier 비교를 회피.

타입: 2x2 subplot scatter (sharex, sharey) - 패널 (a) Local & FL: B0, B1, V1, P1(a2,b2), P1(a3,b2), R1, R1b - 패널 (b) NF (지도학습): NHITS, PatchTST, TimesNet, iTransformer, TFT - 패널 (c) FM (zero-shot): TimeMoE-50M, Chronos-Bolt, Moirai-Small - 패널 (d) All families overlay (참고용, alpha=0.4 흐리게)

축 (모든 패널 공유) - X축: MSE — 범위 0.48 ~ 0.75 (sharex) - Y축: PAPE (%) — 범위 36 ~ 55 (sharey) - Pareto frontier 점선 제거 (C3 채택, frontier claim 방지)

Marker 스타일 (C1 반영) - Multi-seed (n≥3): 채움 marker + errorbar (P1 a2b2: ±0.003 MSE, ±0.67 PAPE) - Single-seed (n=1): 빈(hollow) marker, errorbar 없음 - 13개 중 multi-seed 확정: P1(a2,b2)만. 나머지 12개 모두 single-seed. - Caption에 "Filled markers: n=3 mean±std. Hollow markers: n=1, single-seed observations. Statistical significance not established for hollow markers." 명시.

어노테이션 (톤다운, C1 반영) - R1b: "R1b: lowest PAPE (38.40%, n=1)" — "Best" 단어 회피, n=1 표기 필수 - B1: "B1: lowest MSE (0.505, n=1)" - 참고선 없음 (frontier 제거)

Background tinting - (a) Local/FL: 옅은 회색 - (b) NF: 옅은 보라 - (c) FM: 옅은 주황 - (d) overlay: 흰색

데이터 포인트: 본문 §3.1, §3.3 표 직접 사용 (값은 §6 CSV에서 로드)

저장: F1_pareto_by_family.{png,pdf}


F1b. MSE–PAPE Combined (Supplementary)

목적: 모든 모델을 단일 패널에 overlay하여 전체 분포를 한눈에 (보조용).

타입: single-panel scatter - 축/marker 스타일은 F1과 동일 규칙 (single-seed=hollow, multi-seed=filled+errorbar) - Frontier 점선 제거 (C3 일관성) - Family별 색상 구분만 유지

저장: F1b_pareto_combined_supp.{png,pdf}


F2. 가설 판정 Bar Chart [v1 유지]

목적: H6-1(FAIL), H6-2(PASS), H6-3a(FAIL), H6-3b(PASS) 4개 가설 판정의 비교 쌍 시각화.

타입: 2×2 grid of grouped bar charts - 패널 (a): H6-1 — B1(0.505) vs V1(0.579) — metric=MSE, 낮을수록 좋음 - 패널 (b): H6-2 — V1(49.77) vs P1(42.67) — metric=PAPE - 패널 (c): H6-3a — P1(42.67) vs R1(45.70) — metric=PAPE - 패널 (d): H6-3b — P1(42.67) vs R1b(38.40) — metric=PAPE

스타일 - PASS는 초록 테두리, FAIL은 빨강 테두리 - 막대 상단에 Δ 값 표시 + PASS/FAIL 뱃지 - (a)(b)(c)는 비교 baseline이 multi-seed이거나 단순 비교이므로 errorbar는 P1 막대에만 ±0.67(PAPE) 또는 ±0.003(MSE) 표기 (C1 일관성) - 단, 패널 (d)의 R1b는 single-seed임을 caption에 명시

저장: F2_hypothesis_verdict.{png,pdf}


F3. Beta Sweep Curve (alpha=2.0 고정) [v1 유지]

목적: beta=2.0이 sweet spot임을 dual-axis 라인으로 보여줌.

타입: line plot, dual y-axis - X축: beta ∈ {0.1, 0.5, 1.0, 2.0, 3.0, 4.0} (log scale) - Y축 좌: PAPE (%) — 빨강 선 + marker - Y축 우: MSE — 파랑 선 + marker - beta=2.0 위치에 수직 점선 + "sweet spot" 주석 - 모든 점은 single-seed → caption에 "n=1 per beta value" 명시

데이터 (§3.2)

beta MSE PAPE
0.1 0.579 52.83
0.5 0.562 46.68
1.0 0.543 45.48
2.0 0.543 42.67
3.0 0.542 45.31
4.0 0.540 43.34

저장: F3_beta_sweep.{png,pdf}


F4. Alpha Sweep Bar (beta=2.0 고정) [v1 유지]

목적: alpha 변화에 따른 MSE와 PAPE의 반응 비교.

타입: dual y-axis grouped bar - X축: alpha ∈ {2.0, 3.0, 5.0} - 좌 Y축: MSE bar, 우 Y축: PAPE bar - 패널 caption에 single-seed 명시

데이터 (§3.2)

alpha MSE PAPE
2.0 0.543 42.67
3.0 0.533 43.08
5.0 0.553 48.60

저장: F4_alpha_sweep.{png,pdf}


F5. 50-clients vs 5-clients 비교 [M3 반영]

목적: 스케일 효과 없음(오히려 악화)을 정직하게 제시.

타입: 3-panel side-by-side bar (MSE / PAPE / CB Util) - X축: {5 clients, 50 clients (EVAL 5), 50 clients (전체 50 평균)} - 각 metric별 패널

데이터 (§5)

설정 MSE PAPE HR CB Util
5 clients (seed=42) 0.543 42.67 27.8 3.8
50 clients (EVAL 5) 0.541 47.22 25.2 3.1
50 clients (전체 50) 0.575 47.78 23.2 3.6

주석 (M3 반영, 톤 보강) - 본문 주석: "PAPE worsens by 4.55%p with 10x clients" - Caption 명시: "n=1 per setting (single-seed observation). Replication needed to establish statistical significance, but consistent direction across all 3 metrics suggests structural rather than stochastic effect." - "전체 50 평균"은 50가구 PAPE의 단순 평균이며, 표준편차도 같이 표기 (가능 시 mlruns에서 추출)

저장: F5_scale_comparison.{png,pdf}


F6. PAPE Ranking Horizontal Bar [M2 반영, Supp 격하]

목적: 13개 모델의 PAPE 순위 한눈 비교 (발표 슬라이드/Supp 용도).

타입: horizontal bar, sorted ascending by PAPE - X축: PAPE (%) - Y축: 모델명 (family 포함: e.g., "R1b (FL-FeDPM)") - 색: family별 통일 (F1과 동일 팔레트) - 막대 끝에 PAPE 값 + params 크기 (annotation 확정 — v1 open question 폐기, M5 반영) - R1b 행 별표() 표시 + caption에 " single-seed" 명시

Params annotation 값 (M5 확정 스펙) - R1b: ~36K (DLinear residual 추가) — engineer가 src에서 정확값 산출 - P1/V1/R1: ~32K (FeDPM 본체) - B0 DLinear: 4.6K - B1 FedAvg: 4.6K - NHITS: ~1M, PatchTST: ~1M, TimesNet: ~1M, iTransformer: ~1M, TFT: ~2M (NeuralForecast 기본 설정) - TimeMoE-50M: 50M, Chronos-Bolt: 9M, Moirai-Small: 14M - 정확값은 engineer가 model state_dict에서 산출, 불가 시 ~ 표시

저장: F6_pape_ranking_supp.{png,pdf}

격하 사유: §3.4 표와 정보량 중복(M2). 본문에서는 표만 사용, supplementary와 발표용으로만 figure 유지.


F7. V1→P1→R1b Trajectory Plot [재설계, M1 반영]

목적: V1에서 R1b로 가면서 PAPE는 개선되지만 MSE는 악화되는 트레이드오프를 2D 경로로 명시. waterfall이 MSE 악화를 은닉하는 문제(M1) 해결.

타입: 2D trajectory plot (PAPE × MSE 평면) - X축: MSE (0.50 ~ 0.65) - Y축: PAPE (%) (37 ~ 51) - 3개 점: V1(0.579, 49.77) → P1(0.543, 42.67) → R1b(0.625, 38.40) - 점 간 연결: 화살표 (V1→P1, P1→R1b) - 각 화살표 옆 라벨: "ΔPAPE = -7.10%p, ΔMSE = -0.036" (V1→P1, 양쪽 모두 개선) - "ΔPAPE = -4.27%p, ΔMSE = +0.082" (P1→R1b, 트레이드오프) - 좌하단 방향(개선) 화살표 가이드 추가 - 이상점 표시: P1→R1b는 MSE 악화 영역으로 진입 → 빨강 trace, V1→P1은 둘 다 개선 → 초록 trace

Caption: "Trajectory of FeDPM improvements. V1→P1 improves both metrics (Pareto-dominant). P1→R1b trades MSE for PAPE (−4.27%p PAPE at +15% MSE cost). All points are single-seed except P1 (n=3, errorbar shown)."

저장: F7_trajectory.{png,pdf}


F8. Codebook Usage Histogram [신규, M4 반영, 조건부]

목적: §4.1 주장 ("codebook util 3~6%, 사용 코드 8~16개") 시각적 근거.

타입: bar histogram - X축: codebook entry index (0~255) - Y축: 사용 빈도 (%) - V1, P1(a2,b2), R1b 3개 모델 overlay (alpha=0.6) - 사용된 코드 수 명시 (annotation: "V1: 12 used / 256, P1: 8 used / 256, R1b: 11 used / 256")

데이터 출처: mlruns artifacts에서 codebook usage histogram 추출 - mlruns/142733964360019277/{V1_run}/artifacts/codebook_usage.npy 또는 유사 경로 - engineer 점검 액션 (M5 반영, open question 폐기): 본 figure 작성 전 mlruns에서 codebook usage artifact 존재 여부 확인. 존재 시 F8 생성, 부재 시 supplementary에서 F8 삭제하고 그 사실을 §6 표에 기록. (재학습 없이 codebook usage를 재추출하려면 best checkpoint 로드 + 검증셋 forward 1회 필요 — engineer 판단)

저장: F8_codebook_usage_supp.{png,pdf} (조건부)


F9. Learning Curve Sample [신규, M4 반영]

목적: V1 vs P1 vs R1b의 round별 val_mse 학습 곡선 비교.

타입: line plot - X축: round (0~30 또는 0~100) - Y축: val_mse - 3개 모델 overlay (V1, P1 a2b2, R1b) - 색상은 F1 family palette와 동일

데이터 출처: mlruns metrics - mlruns/142733964360019277/442a27880da1406c8bc4bb362a8f39e4/metrics/val_mse (V1) - mlruns/255994434787012778/1d5cb855ba6c4a85821bfdd5972f7c9c/metrics/val_mse (P1 best run) - mlruns/628304840000878755/{R1b_best}/metrics/val_mse (R1b) - 3개 run의 val_mse는 모두 step별 기록 확인됨 (§6 참조)

저장: F9_learning_curves_supp.{png,pdf}


F10. Client-level PAPE Distribution (50 clients) [신규, M4 반영, 조건부]

목적: 50-client 실험에서 가구별 PAPE 편차를 시각화. "전체 50 평균 47.78%" 단일 수치 뒤의 분산을 노출.

타입: strip plot + box overlay - X축: 설정 ({EVAL 5, 전체 50}) - Y축: PAPE (%) per client - 50개 점(전체 50) + 5개 점(EVAL 5) strip - box overlay로 median, IQR 표시

데이터 출처: mlruns에서 50-client run의 client별 evaluation metric 추출 - mlruns/255994434787012778/2376dd720744433db5b1b2fa09b00252/ (N=50 run, val_mse=0.278) - 또는 70ceccb32ccb4d5cac8013c6f95c09f2 - per-client PAPE는 해당 run의 artifacts/ 디렉토리에서 검색 - engineer 점검 액션: per-client PAPE artifact 존재 여부 확인. 부재 시 F10 삭제 + §6 표에 기록.

저장: F10_client_pape_dist_supp.{png,pdf} (조건부)


4. 구현 가이드 (engineer 위임용)

4.1 디렉토리 및 파일 구조

outputs/figures/v6_0419_exp6/
├── F1_pareto_by_family.{png,pdf}
├── F1b_pareto_combined_supp.{png,pdf}
├── F2_hypothesis_verdict.{png,pdf}
├── F3_beta_sweep.{png,pdf}
├── F4_alpha_sweep.{png,pdf}
├── F5_scale_comparison.{png,pdf}
├── F6_pape_ranking_supp.{png,pdf}
├── F7_trajectory.{png,pdf}
├── F8_codebook_usage_supp.{png,pdf}     # 조건부
├── F9_learning_curves_supp.{png,pdf}
├── F10_client_pape_dist_supp.{png,pdf}  # 조건부
└── data/
    ├── exp6_results.csv                  # 13 모델 + sweep variants 정규화 테이블
    ├── exp6_run_id_map.csv               # MLflow run_id ↔ 모델명 매핑
    └── README.md                         # 데이터 출처 (보고서/mlruns) 명시

4.2 스크립트 위치 및 네이밍

  • 빌드 스크립트: experiments/federated/v6_0419_build_exp6_results_csv.py
  • mlflow.search_runs()로 식별 가능한 run 메트릭 추출
  • 보고서 §3.1/§3.2/§3.3 직독 값과 cross-check (불일치 시 보고서 우선)
  • PAPE는 mlruns에 미저장 → 보고서 직독 (§6에 명시)
  • 산출물: data/exp6_results.csv, data/exp6_run_id_map.csv
  • 시각화 스크립트: experiments/federated/v6_0419_exp6_figures.py
  • 함수는 figure별로 분리: make_fig1_pareto_by_family(), make_fig1b_pareto_combined(), ... make_fig10_client_pape()
  • if __name__ == "__main__": 에서 11개 함수 순차 호출
  • F8/F10은 조건부 try/except + 부재 시 skip + 로그 메시지
  • 재학습 없음, MLflow 로깅 불필요

4.3 데이터 입력 방식

  • 1차: mlflow.search_runs(experiment_ids=[...])로 가능한 모든 metric/params 추출 → exp6_results.csv 생성
  • 2차: PAPE 등 mlruns 미저장 metric은 report/version6/lab-leader/v6_0415_exp6_final_report.md 표에서 직독, CSV에 source 컬럼으로 출처 표기 (mlflow_run_id 또는 report_§3.1 등)
  • 시각화 스크립트는 CSV만 읽음(보고서 하드코딩 금지)

4.4 공통 스타일

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style="whitegrid", palette="deep", context="paper")
plt.rcParams.update({
    "figure.dpi": 300,
    "savefig.dpi": 300,
    "font.family": "sans-serif",
    "axes.labelsize": 11,
    "axes.titlesize": 12,
    "legend.fontsize": 9,
    "xtick.labelsize": 9,
    "ytick.labelsize": 9,
})

FAMILY_COLORS = {
    "FL-FeDPM": "#C0392B",
    "FL-FedAvg": "#2874A6",
    "Local":    "#229954",
    "NF":       "#7D3C98",
    "FM":       "#CA6F1E",
}

# Marker 정책 (C1)
def marker_for(n_seeds):
    return "o" if n_seeds >= 3 else "o"  # shape 동일, fill 차이로 구분

def fill_for(n_seeds):
    return "full" if n_seeds >= 3 else "none"  # multi-seed=채움, single-seed=빈

4.5 검증 체크리스트 (engineer 완료 후 확인)

  • 모든 figure가 300dpi, png+pdf 2종 저장
  • F1에서 4개 family subplot이 sharex/sharey로 같은 축 공유
  • F1/F1b에서 single-seed marker는 hollow, multi-seed는 filled+errorbar
  • F1/F1b에서 Pareto frontier 점선이 그려지지 않음 (C3 확인)
  • F2에서 PASS/FAIL 색상 및 Δ 값이 보고서 §2와 일치
  • F5에서 single-seed 한계가 caption에 명시
  • F6에서 R1b 별표(*) + caption에 single-seed 명시
  • F7이 trajectory plot으로 그려짐(waterfall 아님), 트레이드오프가 시각적으로 노출
  • F8/F10 mlruns artifact 부재 시 skip + 로그에 기록
  • 색상이 color-blind safe (Okabe-Ito 또는 seaborn deep)
  • 모든 축 라벨에 단위 포함 (% 등)
  • data/exp6_results.csv + exp6_run_id_map.csv 동시 산출

5. 제외한 그림(왜 안 뽑는가)

후보 제외 사유
Pareto frontier overlay (단일 패널) C3 반영 — family confounder로 frontier 비교 부당. F1/F1b 모두 frontier 점선 제거
HR(Hit Rate) 별도 패널 PAPE와 강상관, figure budget 절약. F5 metric 1개로 포함
Per-round codebook usage 변화 round별 codebook usage가 mlruns에 step-logging되어 있을 가능성 낮음 (engineer 확인 후 추가 가능)
FL communication cost (round × bytes) 본 실험에서 측정 안 함, 별도 실험 필요
Computational cost (training time) round_time_sec 메트릭은 있으나 본 figure 스토리와 무관

6. MLflow Run ID 추적 테이블 [신규, C2 반영]

원칙: 13개 모델 + 주요 sweep variants의 MLflow run_id를 추적. PAPE는 mlruns에 미저장(별도 평가 스크립트 산출)이므로 val_mse만 mlruns에서 cross-check 가능. PAPE는 보고서 §3 직독.

모델 MLflow Experiment Run ID (best) val_mse (mlruns) PAPE 출처 비고
V1 Vanilla FeDPM FeDPM-Original-Phase1 (142733964360019277) 442a27880da1406c8bc4bb362a8f39e4 beta=0.1 run 보고서 §3.1 단일 run
P1 (a2,b2) FeDPM-Original-Phase2 (255994434787012778) 1d5cb855ba6c4a85821bfdd5972f7c9c (val_mse=0.3233, best) 0.3233 보고서 §3.1 동일 설정 multi-run 8개 (3-seed 평균은 별도 집계)
P1 (a2,b2) seed reps 위 experiment 06192a9..., 158f869..., 2346b8c..., 367cdf8..., 760645e..., 7594a5e..., 8c629dd..., ace5a25... 0.323~0.343 seed 다양성 확인
P1 (a3,b2) d3973281b9404053903209a22ddb2556 0.331 보고서 §3.1 MSE 최선 FeDPM
P1 (a5,b2) 5abde705906f4013be39c20200ced281 0.342 보고서 §3.2 alpha sweep
P1 (a2,b0.1) 1de0602ebaf04f70b72e098e0457fd77, 4c3de1c23979411bae59b19372258438, 811d69ae4c074e1ab1505906a594a092, 8e9d93ff33494e819e821b21c0898b60, fcdca5f54acc4f5c85da8a2b986510c7 0.334~0.353 보고서 §3.2 beta sweep (5 seed)
P1 (a2,b0.5) 52a5a8bc78984471bae6aff895dd411a 0.340 보고서 §3.2 beta sweep
P1 (a2,b1.0) 32f84436af4d4a43aeaafb6dbf919e54 0.341 보고서 §3.2 beta sweep
P1 (a2,b3.0) ace5a25f583f409cb50f63ca6acce86c 0.338 보고서 §3.2 beta sweep
P1 (a2,b4.0) 658ff6753e4d4b9c8e1f922ad8055e6c 0.333 보고서 §3.2 beta sweep
P1 (a2,b100) MSE-equiv 304dde536a2348a39f3382026b533699, 7594a5e2fdd3411ea4674029c26939f3, 8c629ddb1b38421eaf35e4a856c8d260 0.335~0.348 보고서 §3.1 MSE 등가 검증
R1 MLP Residual FeDPM-Original-Phase3 (738959243774648182) 7b0dbe7925da46ebb8397200fcdf07c9 (확인 필요) 보고서 §3.1 단일 run
R1b DLinear Residual FeDPM-Original-Phase3b (628304840000878755) 3c32dc8591894d9eae3170f33a33368e, 5e0409718fd347d085190264e43d4284, b1e1b2177748456b9ffd78966025323c (3개 lr sweep) (확인 필요) 보고서 §3.1 best 1개 식별 필요 (engineer 액션)
N=50 (EVAL 5) FeDPM-Original-Phase2 2376dd720744433db5b1b2fa09b00252, 70ceccb32ccb4d5cac8013c6f95c09f2 0.278, 0.294 보고서 §5 50-client 실험
B0 Local DLinear FedLearning-Phase2-local (432554167732390063) 002d8d386fac4416b0bca6198ddc1e89, 35f50f22b77f403083d3ae8bc240e710 (확인 필요) 보고서 §3.3 runName=local_N20_R10 (가구별 평균?)
B1 FedAvg FedLearning-Phase2-fedavg (828876380275857324) 17aa519d8a64433a9129ae7f7b663c7d, 23fd36f2a0dc48048cf0c3717c2e51b6, 24850942d7a546dbabf8609266cc8ad2, cb9796b1869a489cb72122cb248ad96c (확인 필요) 보고서 §3.3 4개 run 중 best 식별 필요
NHITS, PatchTST, TimesNet, iTransformer, TFT NF-Baseline (750970300919682198) 가구별로 분리된 run 다수 (Apt6/15/30/51/88) + 408bd2cd650e46df89c475b76f2b23e6 (aggregate_mean) 가구별 metric 보고서 §3.3 aggregate_mean run이 5가구 평균 → 이 run을 대표값으로 사용 권장
TimeMoE-50M, Chronos-Bolt, Moirai-Small TSFM-Baseline (968288576469157019) b6c3c21735e44c5ca78309d6f2910a6a (complete), d59c11d902f541b8a8a8e37c8f14c071 (확인 필요, run 내부 모델별 metric 분리 여부 점검) 보고서 §3.3 zero-shot, 단일 run에 모든 FM 결과 포함 가능성

유실/불명 항목: 위 표의 "(확인 필요)" 항목은 engineer가 build 스크립트에서 mlruns 직접 접근으로 확인. 만약 매핑 불가능 시 exp6_run_id_map.csvrun_id=UNKNOWN, source=report_§N 으로 기록하고 시각화 데이터는 보고서 직독 사용.

Codebook usage / per-client PAPE artifact (F8/F10용): 위 run들의 artifacts/ 폴더에서 검색해야 하며, 미저장이면 해당 figure는 skip.


7. 담당 및 후속 단계

  • 구현 담당: engineer (본 v2 스펙 확정대로 작성 후 exp-expert 검수)
  • 검수: exp-expert가 생성된 figure와 보고서 §번호 일치 여부 + critic 비평 반영 확인
  • 최종 사용처:
  • thesis-writer: 본문에 F1/F2/F3/F4/F5/F7 배치, supplementary에 F1b/F6/F8/F9/F10
  • 발표 슬라이드: F6 (전체 모델 한 장 비교용)
  • 재학습 필요 없음: 값은 모두 보고서 또는 mlruns 직독

8. 후속 작업 (별도 task)

본 시각화 작업과 분리되어 병렬 진행 가능. 시각화 작업의 선행 조건이 아님(시각화는 single-seed 명시로 valid).

작업 우선순위 담당 산출물 예상 시간
R1b 3-seed 재실행 (C1 권고) ★★ exp-expert + engineer R1b PAPE/MSE mean±std, F1·F2·F7 caption 업데이트 2~3시간 (학습 시간)
50-clients 3-seed 재실행 (M3 권고) exp-expert F5 errorbar 추가 가능 5~6시간 (50가구 학습)
Codebook usage artifact 재추출 (F8 prereq) engineer best checkpoint forward로 codebook histogram 산출 30분
Per-client PAPE artifact 추출 (F10 prereq) engineer 50-client run에서 client별 PAPE 산출 1시간

이번 시각화 전 선행 여부: 불필요. 시각화는 single-seed임을 명시한 채 valid하게 진행. 후속 task 완료 시 figure caption만 업데이트(데이터 갱신은 CSV 파일 1줄 수정으로 반영).


문서 끝. engineer는 본 v2 스펙에 따라 다음 두 스크립트를 작성: 1. experiments/federated/v6_0419_build_exp6_results_csv.py (데이터 빌드) 2. experiments/federated/v6_0419_exp6_figures.py (시각화)