콘텐츠로 이동

Source: report/version6/exp-critic/v6_0419_exp6_figures_review.md

실험 비판 보고서: Exp6 결과 시각화 설계 문서 (v6_0419_exp6_figures_design.md)

  • 작성일: 2026-04-19
  • 대상 실험: report/version6/exp-expert/v6_0419_exp6_figures_design.md
  • 근거 원보고서: report/version6/lab-leader/v6_0415_exp6_final_report.md
  • 검토자: exp-critic
  • 종합 판정: REVISE REQUIRED

요약 (Executive Summary)

본 문서는 재학습이 없는 "시각화 설계"임에도 불구하고, 시각적 표현 방식을 통해 실험의 통계적 정직성과 공정성이 심각하게 훼손될 여지가 있다. 핵심 문제는 세 가지다. 첫째, F1 Pareto scatter에 13개 모델의 single-seed 값을 점 하나로 찍으면서 오직 P1에만 선택적으로 errorbar를 붙일지를 Open Question으로 남겨 — 독자에게 "R1b가 PAPE frontier"라는 시각적 인상을 noise 구분 없이 주입한다. 둘째, 학습 조건(FL/Local/NF 학습/FM zero-shot)이 근본적으로 다른 모델들을 한 Pareto plot에서 섞어 비교하면서, 축에 "학습 조건"이라는 confounder를 명시하지 않는다. 셋째, "리포트 표에서 직독/하드코딩" 데이터 수급 방식은 재현성 원칙(MLflow 기반 run_id 쿼리)과 충돌하며, 원본 MLflow 데이터로의 back-pointer(run_id/experiment_id)가 문서에 전혀 없다. 이 세 가지가 해결되지 않으면 본 figure 세트는 논문 Figure로서 reviewer의 methodological reject 트리거가 될 가능성이 크다. F7 waterfall의 구성 경로(V1→P1→R1b)도 MSE가 V1 0.579 → R1b 0.625로 악화되는 것을 waterfall에서 숨긴다면 cherry-picking 프레이밍으로 취급받을 수 있다.

한편 F2(가설 판정), F5(스케일 실패 정직 노출)는 방향성이 우수하며, 전반적 색상·DPI·dual format 규칙은 논문 submission 표준을 충족한다. 수정 대상은 설계 원칙·데이터 수급·통계 표현이지, figure 개수나 디자인 자체가 아니다.


치명적 문제 (Critical Issues) 🔴

C1. F1 Pareto scatter — single-seed를 point-estimate로 표현하면서 uncertainty를 은폐

  • 문제점: 13개 모델 중 3-seed 평균±std가 보고된 것은 P1 (MSE 0.543±0.003, PAPE 43.43±0.67) 하나뿐이다 (v6_0415_exp6_final_report.md line 32). 나머지 12개 모델(V1, R1, R1b, B0, B1, NHITS 등)은 모두 seed=42 단일 실행값이다. 그럼에도 F1에서는 모든 모델을 같은 크기의 point로 찍고, errorbar는 P1에 붙일지 여부를 Open Question 7.2로 남겼다. 이 상태로 렌더링되면 "R1b가 PAPE frontier (38.40%)"와 "P1이 42.67%"의 차이가 noise 구분 없이 결정적 순위처럼 제시된다.
  • 심각도: 🔴 Critical
  • 근거:
  • v6_0419_exp6_figures_design.md §7.2: "3-seed 실험(§3.1 'P1 3-seed 평균') 개별 seed 값을 F1에서 errorbar로 표시할지?" — 미결정
  • v6_0415_exp6_final_report.md §3.1: P1 std=±0.67 PAPE. 이는 R1b(38.40) vs P1(42.67) 격차 4.27의 약 15%로, 3-seed 반복 시 R1b의 신뢰구간이 P1과 겹칠 가능성 상당.
  • .claude/agent-memory/exp-critic/exp6_fl_contribution_claims_unsupported.md: "R1b '최선' 주장이 single seed" 기록 존재.
  • 개선 제안:
  • F1에서 single-seed 모델은 marker에 해치(hatching) 또는 작은 'n=1' 뱃지를 붙여 시각적으로 구분.
  • P1 점은 ±std errorbar 필수 표시(Option 아님).
  • R1b 점 주변에 "single seed — CI unknown" 주석 또는 shaded uncertainty envelope를 표시하여 frontier claim의 잠정성을 명시.
  • 재실험 가능하다면 R1b 3-seed를 먼저 돌리고 figure 작업에 착수. Phase 계획상 D+1 PM에 예정된 작업(v6_0415_exp6_final_report.md line 138)이므로 figure 제작 선행 시 purpose mismatch.

C2. 데이터 출처의 비재현성 — run_id 없는 하드코딩

  • 문제점: 문서 §4.3은 "보고서 표에서 직독 또는 data/exp6_results.csv로 정규화"를 권장하고, 대안으로 "dict 리터럴 하드코딩"까지 허용한다. 그러나 MLflow가 프로젝트의 실험 추적 표준이고(CLAUDE.md "MLflow Logging Rules"), mlruns/ 아래 20개 이상의 experiment가 존재한다. 그럼에도 본 설계 문서와 근거 보고서 모두에 R1b/P1/V1의 run_id가 한 건도 기록되어 있지 않다(grep 결과 run_id 0 hits). figure 생성 스크립트가 리포트 마크다운의 테이블 값을 타이핑해서 복제하면, (1) 보고서 표 수정 시 silent drift 발생, (2) 감사자/reviewer가 원본 metric 추적 불가, (3) 재학습 필요성이 발견되어도 연결고리 없음.
  • 심각도: 🔴 Critical
  • 근거:
  • v6_0419_exp6_figures_design.md §4.3, §6 "값은 모두 v6_0415_exp6_final_report.md 표에서 직독"
  • CLAUDE.md Core Design Principles: "Best checkpoint를 mlflow.log_artifact()로 저장한다 (재추론 가능하도록)"
  • 원보고서에 run_id 부재 — 재현 체인 단절
  • 개선 제안:
  • figure 스크립트는 MLflow tracking URI를 직접 쿼리하여 run metrics를 가져오도록 설계. mlflow.search_runs(experiment_names=[...], filter_string="...") 사용.
  • 각 실험(V1/P1/R1/R1b/B0/B1/...)의 run_id를 data/exp6_run_manifest.yaml에 기록하고, 시각화 스크립트가 이 manifest를 읽어 MLflow에서 metric을 당기는 구조.
  • 하드코딩은 FM zero-shot 3종(TimeMoE/Chronos/Moirai) 등 MLflow 외부에서 돌린 것에 한해 허용하되, 해당 표의 출처(스크립트 경로 + 날짜)를 각주로 명기.
  • 보고서 표 ↔ figure 데이터의 숫자 일치 단위 테스트tests/에 추가.

C3. 학습 조건이 다른 모델을 한 Pareto에서 섞어 비교 — 공정성 결함

  • 문제점: F1 scatter는 FL(V1/P1/R1/R1b/B1), Local 학습(B0, NHITS, PatchTST, TimesNet, iTransformer, TFT), FM zero-shot(TimeMoE/Chronos/Moirai)을 하나의 MSE-PAPE 좌표계에 배치한다. 이들은 학습 데이터 양, optimization steps, privacy constraint, inference 비용이 모두 다르다. 특히 FM zero-shot은 추가 학습이 0이므로 "MSE-PAPE 곡선 상의 점"이라는 의미 자체가 다르다. 이 상태에서 "R1b가 PAPE frontier"라고 Pareto 점선을 그으면, reviewer는 "Local-trained NHITS(39.73%, params 훨씬 큼)와 FL-trained R1b(38.40%)의 비교 조건이 공정한가"를 반드시 지적한다. family별 marker 구분만으로는 confounder 해결이 불충분하다.
  • 심각도: 🔴 Critical
  • 근거:
  • v6_0419_exp6_figures_design.md §3.1 F1 데이터 테이블: FL/Local/NF/FM 4계열 혼합
  • v6_0415_exp6_final_report.md §3.3: B0 "Local 학습", NHITS "NF 학습", TimeMoE "FM zero-shot" — 학습 조건 명시적으로 다름
  • .claude/agent-memory/exp-critic/exp6_fl_contribution_claims_unsupported.md: FL 베이스라인 1종, pFL 비교 전무
  • 개선 제안:
  • F1을 2-panel figure로 분할: Panel (a) FL 계열 내 비교(V1/P1/R1/R1b/B1), Panel (b) FL 최선 vs Local/NF/FM 대비(R1b vs B0/NHITS/FM 3종).
  • Pareto frontier 점선은 같은 학습 조건 내에서만 긋는다.
  • 각 marker에 params 크기(log scale bubble size)를 반영하여 "모델 크기 vs 조건"을 공정하게 노출. 특히 TimeMoE 50M과 DLinear 4.6K를 같은 축에 찍으면서 marker 크기가 동일하면 오도.
  • Caption에 "training regimes differ; frontier is constructed per-regime"을 명시.

주요 문제 (Major Issues) 🟡

M1. F7 Waterfall — V1→P1→R1b 경로가 PAPE만 보여주고 MSE 악화를 은폐

  • 문제점: §3 F7은 PAPE 개선(-7.10%p, -4.27%p, total -11.37%p)을 green 바로 축적한다. 그러나 V1(MSE 0.579) → P1(0.543) → R1b(0.625) 경로에서 MSE는 R1b 단계에서 B0 대비 +20%, P1 대비 +15% 악화한다(v6_0415_exp6_final_report.md §6 "MSE 트레이드오프 해결이 다음 과제"). PAPE만 waterfall로 그리면 reviewer·독자에게 "단방향 개선"이라는 허위 인상을 준다. 이는 §1.2 원칙에서 스스로 천명한 "스케일 실패 정직하게 노출"과 모순된다.
  • 심각도: 🟡 Major
  • 근거: v6_0419_exp6_figures_design.md §3 F7; v6_0415_exp6_final_report.md §7 "R1b 최선 PAPE 달성, MSE 트레이드오프 해결이 다음 과제"
  • 개선 제안:
  • F7을 dual-waterfall 또는 paired waterfall로 변경: 위쪽 PAPE 개선(green), 아래쪽 MSE 악화(red for R1b 단계). 또는 waterfall 대신 MSE-PAPE 2D trajectory(arrow plot)로 대체 — V1→P1은 양쪽 개선, P1→R1b는 PAPE↓/MSE↑ 트레이드오프가 시각적으로 자명해짐.
  • Caption에 "R1b reduces PAPE at the cost of MSE; trade-off magnitude is 20% over B0".

M2. F6 PAPE ranking bar — §3.4 표와 정보량 동일, table로 충분

  • 문제점: F6은 13개 모델을 PAPE로 정렬한 horizontal bar이며, 정보량은 v6_0415_exp6_final_report.md §3.4 표와 실질적으로 동일하다. 추가 정보는 family별 색상뿐인데, 이는 F1 scatter가 이미 제공한다. figure budget(논문 submission에서 대개 6~8개)을 소모하는 비용 대비 edge가 약하다. 또한 §3.4 표는 상위 7개만 나열하고 하위 6개는 §3.1/§3.3에서 추출해야 하는데, 본 figure 설계 §3 F6에는 "13개 전체"라고만 적혀 있어 하위 6개 PAPE 값이 어디서 오는지 불명확.
  • 심각도: 🟡 Major
  • 근거: v6_0419_exp6_figures_design.md §3 F6; v6_0415_exp6_final_report.md §3.4 ("순위 7위까지" 기재, 하위 미노출)
  • 개선 제안:
  • F6를 본문에서 삭제하고 supplementary로 격하, 또는 F1과 통합(F1 scatter의 x축 옆에 ranking strip).
  • 유지할 경우 params 수 annotation(§7.3 Open Question)을 포함하여 "크기 대비 성능"이라는 §4.1의 핵심 발견을 시각적으로 드러낼 때만 가치 있음.

M3. F5 50-clients 비교 — single seed로 "No scale benefit" trend claim

  • 문제점: F5 주석 "No scale benefit — PAPE worsens by 4.55%p with 10x clients"는 강한 일반화이다. 그러나 데이터는 seed=42 단 1회의 실행이다(v6_0415_exp6_final_report.md §5). 5-client(42.67%) vs 50-client EVAL 5가구(47.22%)의 4.55%p 차이는 P1의 seed 분산 std=±0.67의 약 7배이므로 신호는 있어 보이지만, 단 1-seed로 "구조적 한계"라고 결론짓기엔 통계적 근거가 부족하다. "FeDPM의 VQ codebook 한계가 클라이언트 수와 무관하게 구조적"이라는 주장(§5 결론)이 figure 주석으로 확정되면 reviewer의 defense target이 된다.
  • 심각도: 🟡 Major
  • 근거: v6_0415_exp6_final_report.md §5 "50 clients (seed=42)" 단일 실행
  • 개선 제안:
  • 주석을 "No scale benefit (n=1 seed per setting)"으로 수정하여 증거 강도 노출.
  • 50-client 결과에 ±std 미표시 대신 "single-seed" 태그 필수.
  • 또는 본 figure를 "preliminary evidence"로 격하하고 supplementary로 이동.

M4. 누락된 figure — codebook usage histogram, loss curve, client 분포

  • 문제점: v6_0415_exp6_final_report.md §4.1의 핵심 주장 "실제 사용 코드가 8~16개로 패턴 구분력 제한적"은 본 figure set에 검증 그림이 없다. §5에서 배제 사유로 "raw data 접근 경로 불명확"을 들었으나, 이는 논문 reviewer가 반드시 요구할 증거이다. "codebook util 3~6%"라는 숫자 자체가 논문 narrative의 핵심이고, 1개 histogram으로 수습 가능한 매우 저렴한 figure이다. loss curve(round별 MSE 감소 추이)와 client별 PAPE 분포(violin/box)도 FL 논문의 표준 figure로서 부재는 reviewer의 "insufficient FL evidence" 지적을 초래한다.
  • 심각도: 🟡 Major
  • 근거: v6_0419_exp6_figures_design.md §5 배제 표; .claude/agent-memory/exp-critic/exp6_fl_contribution_claims_unsupported.md "FL 베이스라인 1종, 이질성 지표 0건"
  • 개선 제안:
  • F8(신규): Codebook usage histogram (code index × usage frequency) — MLflow artifact 또는 mlruns/ 탐색으로 raw data 확보 시도.
  • F9(신규): Round별 learning curve (V1/P1/B1 3개) — mlruns에 step-wise metric 저장되어 있을 가능성 높음.
  • F10(신규): Client별 PAPE 분포 (5-client, 50-client 각각 box/violin).
  • 1~3을 engineer 위임 전에 lab-leader가 scope 포함 여부를 의사결정.

M5. Open Question 3건은 engineer가 판단할 문제가 아님

  • 문제점: §7의 3개 open question (errorbar 여부, params annotation 여부, codebook histogram 원본 데이터 접근)은 모두 methodological 결정이지 구현 세부가 아니다. engineer는 스펙대로 그릴 뿐 통계적 정직성이나 figure scope의 trade-off를 판단할 권한이 없다. 이를 engineer에게 위임하면 (1) 결정이 내려지지 않은 채 구현이 시작되거나, (2) engineer가 임의 선택하여 후속 재작업 발생.
  • 심각도: 🟡 Major
  • 근거: v6_0419_exp6_figures_design.md §7 Open Questions, §6 "구현 담당: engineer"
  • 개선 제안:
  • exp-expert가 (1) 3-seed errorbar 표시 여부, (2) params annotation 포함 여부, (3) codebook histogram scope 포함 여부 3건을 사전 확정. 특히 (3)은 lab-leader의 figure scope 재확인 필요.
  • engineer 위임 시 open question은 "렌더링 디테일"(폰트 크기, 화살표 곡률 등)로 한정.

경미한 문제 (Minor Issues) 🟢

m1. F3 beta sweep — log scale 권장이지만 beta=0.1, 0.5는 단일 decade 내 densely 분포

  • 문제점: §3 F3 "X축: beta ∈ {0.1, 0.5, 1.0, 2.0, 3.0, 4.0} (log scale 권장)" — log scale에서 0.1과 4.0은 1.6 decades, linear에서도 읽기 가능한 범위. log scale 고집은 독자 혼란 증가.
  • 심각도: 🟢 Minor
  • 개선 제안: linear scale로 변경하거나, log/linear 둘 다 렌더링하여 비교 후 선택.

m2. F4 alpha sweep — 3개 포인트만으로 dual y-axis

  • 문제점: alpha ∈ {2.0, 3.0, 5.0} 3 points는 dual y-axis curve로 그리기엔 부족. grouped bar가 적절.
  • 심각도: 🟢 Minor
  • 개선 제안: Option B (grouped bar) 확정, dual axis 제거.

m3. 색상 팔레트 color-blind safety

  • 문제점: FAMILY_COLORS의 빨강(#C0392B)과 주황(#CA6F1E)은 deuteranopia에서 구분 어려움.
  • 심각도: 🟢 Minor
  • 개선 제안: Okabe-Ito palette로 교체 또는 marker shape 차별화로 보완. §4.5 체크리스트에는 이미 "color-blind safe" 항목 있음 — 준수 여부 rendering 시 실제 점검.

m4. F5 "EVAL 5가구" 개념이 외부 독자에게 불명

  • 문제점: 50 clients (EVAL 5)전체 50 평균의 차이 — EVAL 5가구가 공통 테스트셋인지, 50가구 중 임의 추출인지 figure만으로 불명.
  • 심각도: 🟢 Minor
  • 개선 제안: caption에 "EVAL 5 = fixed evaluation households shared with 5-client run"을 명기.

인정되는 강점 (Acknowledged Strengths)

  1. Figure budget 관리: 7개 figure 중 본문 3(F1/F2/F5), supplementary 4 배치는 논문 submission 관례와 부합.
  2. DPI/format 표준 준수: 300dpi, png+pdf dual, column width 3.3in/7.0in 명시는 conference/journal 공통 요건.
  3. F2 가설 판정 bar: PASS/FAIL 쌍을 시각화하는 설계는 논문 본문의 hypothesis-driven narrative와 1:1 대응되어 reviewer 친화적.
  4. F5 "스케일 실패" 노출 방침: negative result를 숨기지 않고 본문 figure로 올리는 것은 과학적 정직성에 부합.
  5. 검증 체크리스트(§4.5): 축 라벨 단위, 13개 모델 누락 확인, 색상 safety 등 engineer handoff 품질 관리 요소 포함.
  6. 재학습 없음 + MLflow 로깅 불필요 명시: 시각화 작업의 scope 축소 및 CLAUDE.md 규칙 예외 처리 명확.

exp-expert에게 전달하는 필수 수정 사항

  • C1 해결: F1에서 single-seed 모델과 multi-seed 모델을 시각적으로 구분. P1 errorbar 필수 표시. R1b에 "single seed" 태그 또는 uncertainty envelope 추가. R1b 3-seed 재실행을 D+1 PM 이전에 완료하여 figure 작업의 전제로 삼을 것.
  • C2 해결: MLflow run_id manifest(data/exp6_run_manifest.yaml) 작성. figure 스크립트는 MLflow API로 metric을 직접 쿼리. FM zero-shot 등 MLflow 외부 결과만 하드코딩 허용하고 출처 각주 필수. 보고서 표 ↔ figure 숫자 일치 단위 테스트를 tests/에 추가.
  • C3 해결: F1을 2-panel로 분할 (FL 내부 비교 / 조건 간 비교). Pareto frontier는 learning regime별로만 연결. marker 크기에 params 반영 또는 caption에 confounder 명시.
  • M1 해결: F7을 dual-waterfall(PAPE 개선 + MSE 악화) 또는 MSE-PAPE 2D trajectory로 변경. 단방향 개선 프레이밍 금지.
  • M2 해결: F6 본문 제거 또는 supplementary 격하. 유지 시 params annotation 필수.
  • M3 해결: F5 주석에 "n=1 seed per setting" 명기. 가능하면 50-client 추가 seed 1~2개 확보.
  • M4 해결: codebook usage histogram, round별 learning curve, client별 PAPE 분포 3건의 scope 포함 여부를 lab-leader와 합의 후 결정. 최소한 codebook histogram은 논문 reject 방어선.
  • M5 해결: §7 Open Question 3건을 engineer 위임 전에 exp-expert가 전부 closed로 결정. engineer는 rendering 디테일만 판단.

재실험 권고 체크리스트

  • R1b 3-seed 반복(lr 동일, seed 42/43/44) — F1 errorbar의 전제
  • 50-client 최소 2-seed — F5 "구조적 한계" 주장 뒷받침
  • codebook usage raw data 확보 — mlruns/ 또는 재추론으로 histogram 생성
  • round별 learning curve 추출 — mlruns step-wise metric 덤프
  • MLflow run_id manifest 문서화 — 13개 모델 각각의 experiment_id, run_id
  • figure 데이터 unit test 추가 — 보고서 표 ↔ figure 숫자 drift 방지

판정: REVISE REQUIRED

C1(single-seed uncertainty 은폐), C2(비재현성), C3(학습 조건 혼재) 중 한 건이라도 해결되지 않은 채 논문 submission에 포함되면 methodological reject 트리거가 된다. 본 figure 설계는 outline으로는 합리적이나, 통계적 정직성과 재현성 관점에서 재작성이 필요하다. 수정 후 exp-critic 재리뷰 요구.