Tab 1 · Metadata EDA · generated 2026-11-12

렌더된 10만 장은 어떤 데이터인가

모든 수치는 tools/make_eda.py 가 metadata.csv 를 직접 집계한 결과입니다. 손으로 옮겨 적은 값은 없습니다.

100,000
행 (이미지 1장 = 1행)
55
컬럼
36,286
환자
4,618
여러 split 에 걸친 환자

1. 구조와 무결성

01 / 08
split 구성 — 합계 100,000
split이미지비중
train72,47572.5%
val4,6264.6%
test5,4425.4%
no_split17,45717.5%

이미지 경로 중복 0건, 경로의 split 접두사와 split 컬럼 불일치 0건, 전 파일 PNG. 렌더 산출물이 metadata 와 1:1 로 맞습니다.

split 별 이미지 수 막대그래프
학습 72.5%, 나머지는 검증·평가·미할당입니다. no_split 은 학습에서 빼고 외부 검증용으로 남깁니다.

2. 표본 특성

02 / 08

나이 중앙값 63세 (IQR 51–73), 50세 미만 22.3%. 성별은 남 53,581 · 여 46,419.

환자당 ECG 중앙값 1건, 평균 2.76건, 최대 195건. 전체 환자의 45.9% 가 2건 이상의 ECG 를 가집니다 — 이 사실이 split 설계에서 문제가 됩니다(6절).

나이 분포와 성별 비율
나이·성별 분포. 18–90세로 절단돼 있습니다(원본 공개 데이터 기준).
촬영 연도와 진료 세팅 분포
촬영 연도와 진료 세팅. 응급·입원 비중이 높아 중증도가 외래보다 높은 표본입니다.

3. 라벨

03 / 08
심초음파 12개 라벨 유병률
라벨 유병률. 최소 0.8%(PR ≥ moderate)에서 최대 52.2%(SHD composite)까지 60배 차이입니다.
라벨별 양성 수
라벨n%
LVEF ≤ 45%23,89223.89%
LVWT ≥ 13 mm24,22024.22%
AS ≥ moderate4,0544.05%
AR ≥ moderate1,2641.26%
MR ≥ moderate8,4518.45%
TR ≥ moderate10,65110.65%
PR ≥ moderate8210.82%
RV dysfunction ≥ mod13,24313.24%
Pericardial effusion3,0233.02%
PASP ≥ 45 mmHg18,99318.99%
TR max ≥ 3.2 m/s10,21210.21%
SHD composite52,18852.19%
연령대별 라벨 유병률 히트맵
연령대별 유병률. 대부분 라벨이 나이에 단조 증가하므로, 나이를 모델에 그대로 넣으면 성능이 과대평가될 수 있습니다.

4. 라벨 동시발생

04 / 08
라벨 간 Pearson phi 상관 히트맵
라벨 간 φ 상관. 같은 초음파 검사에서 파생된 라벨이라 구조적으로 상관합니다.
가장 강한 라벨 쌍 (|φ| 상위 5)
ABφ
PASP ≥ 45 mmHgTR max ≥ 3.2 m/s0.65
LVWT ≥ 13 mmSHD composite0.54
LVEF ≤ 45%SHD composite0.54
PASP ≥ 45 mmHgSHD composite0.46
TR ≥ moderatePASP ≥ 45 mmHg0.44

PASP ≥ 45 와 TR max ≥ 3.2 (φ 0.65) 는 같은 측정에서 계산되는 값이라 사실상 한 라벨입니다. 다중 라벨을 독립으로 다루면 이 구조가 손실로 이어지므로, 공동 학습 또는 라벨 간 의존을 반영하는 head 가 필요합니다.

5. 수치형 변수

05 / 08
주요 수치형 변수 분포 6개
심전도 측정값(박동수·PR·QRS·QTc)과 심초음파 값(LVEF·PASP)의 분포. 0.5–99.5 percentile 로 절단해 그렸습니다.
수치형 요약 (중앙값, IQR, 결측)
변수중앙값IQR결측
Ventricular rate81 bpm69–950.0%
PR interval154 ms138–17410.4%
QRS duration90 ms80–1020.0%
QTc449 ms427–4740.0%
LVEF57.5 %45–62.58.9%
PASP38 mmHg31–4943.4%
TR max velocity2.7 m/s2.3–3.155.0%
IVSd1.1 cm1–1.29.1%
LVPWd1 cm0.9–1.29.1%
LVEF 분포와 연령대별 감소 EF 유병률
LVEF 는 45% 를 경계로 라벨이 갈립니다. 45–50% 구간에 표본이 몰려 있어 경계 근처 판정이 흔들리기 쉽습니다.

6. 결측

06 / 08
결측 상위 15개 컬럼
컬럼결측률
tr_max_velocity_value55.0%
pasp_value43.4%
pericardial_effusion_value11.8%
pr_interval10.4%
ivs_measurement9.1%
lvpw_measurement9.1%
rv_systolic_function_value9.1%
tricuspid_regurgitation_value9.0%
aortic_stenosis_value9.0%
aortic_regurgitation_value9.0%
mitral_regurgitation_value9.0%
lvef_value8.9%
pulmonary_regurgitation_value8.9%
pr4.2%
qrs_axis1.0%

PASP(43%)·TR max(55%) 는 삼첨판 역류 신호가 잡힌 검사에서만 측정됩니다. 이 값들을 입력 feature 로 쓰면 측정 자체가 된 환자라는 선택편향이 들어갑니다 — 이미지 모델의 정답으로만 쓰고 입력에는 쓰지 않습니다.

결측률 상위 컬럼 막대그래프
결측은 무작위가 아니라 검사 시행 여부와 연결돼 있습니다.

7. 판독문 텍스트 = 누수 표면

07 / 08

결과지에 인쇄된 판독문이 라벨과 직접 상관합니다

렌더된 결과지에는 실제 판독문 106종이 그대로 인쇄됩니다 (“ABNORMAL ECG” 61%, “LEFT AXIS DEVIATION” 등). 모델이 파형 대신 글자를 읽으면 성능이 부풀려지고, 실제 사진에서는 무너집니다.

그래서 헤더·판독문을 끈 --no-header --no-interpretation 변형을 별도로 렌더해 ablation 기준선으로 씁니다.

가장 자주 인쇄되는 판독문구
문구n%
SINUS RHYTHM79,86179.9%
ABNORMAL ECG61,15261.2%
NORMAL ECG38,84838.8%
PROLONGED QT INTERVAL36,86136.9%
SINUS TACHYCARDIA18,50918.5%
LEFT AXIS DEVIATION15,20215.2%
INTRAVENTRICULAR CONDUCTION DELAY13,00513.0%
FIRST DEGREE AV BLOCK12,71312.7%
RIGHT AXIS DEVIATION4,3444.3%
LEFT VENTRICULAR HYPERTROPHY BY VOLTAGE CRITERIA3,0803.1%
SINUS BRADYCARDIA1,6301.6%
판독문구 빈도 상위 막대그래프
판독문은 106종 문자열의 조합입니다. 이미지에 텍스트가 있으면 CNN 은 그것부터 읽습니다.

8. 학습 설계에 직결되는 발견

08 / 08

환자 단위 split 이 깨져 있습니다

36,286명 중 4,618명(12.73%)이 두 개 이상의 split 에 등장합니다. 같은 환자의 ECG 가 train 과 val/test 에 동시에 들어 있다는 뜻이고, 이미지 모델은 환자 고유의 파형 형태를 외워 성능을 부풀릴 수 있습니다.

대응: ① 학습 전에 patient_key 기준으로 split 을 다시 만들고(그룹 split), ② 보고 수치는 환자 단위 group split 결과로만 제시, ③ 기존 split 결과는 “참고”로만 남깁니다.

그 외

  • 라벨 불균형 — PR ≥ moderate 0.8% vs SHD 52.2%. PR/AR/effusion 은 양성 수가 1,000건 안팎이라 단순 BCE 로는 학습이 어긋납니다(가중·focal·threshold 조정).
  • 나이 단축 — 나이만으로도 유병률이 단조 증가합니다. 나이를 이미지에서 읽게 두면 “나이 맞히기”로 성능이 새므로, 나이를 명시적 보조 입력으로 주고 이미지 기여도를 따로 재야 합니다.
  • 측정값 결측의 선택편향 — PASP·TR max 는 검사 시행 여부와 상관. 입력 feature 로 금지.
  • 중증도 표본 — 응급 31,453 · 입원 48,162 로 중증 편향이 있습니다. 일반 외래로 일반화하려면 별도 검증이 필요합니다.

재현

이 리포트는 저장소의 스크립트로 다시 만들 수 있습니다.

python3 tools/make_eda.py \
  --meta metadata.csv \
  --out assets/figures \
  --summary data/summary.json
python3 tools/build_site.py

원본 metadata.csv(환자 식별자 포함)는 저장소에 올리지 않습니다. 집계 결과인 data/summary.json 만 공개합니다.