환자 위험 순위를 구분하는 능력
00 / RESEARCH STANCE
좋은 건강 예측 모델은
맞히는 모델을 넘어, 믿고 행동할 수 있는 모델이어야 합니다.
합성 종단 건강 데이터로 90일 재입원을 예측했습니다. 모든 분할은 환자 단위로 수행하고, 테스트 데이터는 모델 선택이나 전처리에 사용하지 않았습니다.
연구의 출발점은 Delphi-2M이 제시한 미래 건강 상태 예측이었지만, 포트폴리오의 초점은 거대 모델 복제가 아니라 평가 원리를 작게 끝까지 구현하는 데 두었습니다.
01 / LEARNING JOURNEY
질문이 다음 실험을 만들었습니다.
결과를 보고 끝내지 않고, 결과가 왜 그렇게 나왔는지 확인하기 위해 평가 단위를 점차 확장했습니다.
-
01
안정성
표본 크기와 결측치
500·2,000·10,000명에서 반복 실험하며 평균과 표준편차를 분리해 읽었습니다.
-
02
Calibration
확률의 신뢰도
AUROC만 보지 않고 Brier Score, ECE, calibration slope와 intercept를 계산했습니다.
-
03
재현성
단순 모델과 비선형 모델
10개 seed에서 Logistic과 HistGradientBoosting을 동일한 환자 분할로 비교했습니다.
-
04
UQ
성능 차이의 불확실성
같은 환자를 함께 재표본추출하는 paired patient bootstrap으로 95% 신뢰구간을 구했습니다.
-
05
제품 판단
점수에서 개입으로
임계값 대신 병원의 관리 가능 건수를 기준으로 recall·precision·한계효율을 분석했습니다.
-
06
해석 가능성
모델의 근거
Permutation importance와 개별 log-odds 기여도를 구분하고, 예측 근거를 인과로 오해하지 않았습니다.
-
07
Temporal validation
미래를 흉내 내는 검증
90일 간격을 둔 시간 분할을 구현하고, 합성 날짜 검증의 한계까지 기록했습니다.
02 / EVIDENCE
숫자보다 숫자를 읽는 방식
단일 최고 점수를 선택하지 않았습니다. 판별력, 확률 정확도, 반복 안정성과 제품 효용을 서로 다른 질문으로 평가했습니다.
재입원율 6.97%의 불균형을 반영
예측확률과 실제 결과의 제곱오차
이상적인 값 1에 대한 확률 보정 진단
복잡한 모델이 항상 이기지 않았습니다.
Logistic은 AUROC 기준 10회 중 9회 우세했지만, 복잡성보다 일반화와 calibration을 우선해 결론을 내렸습니다.
“더 높다”와 “확실히 높다”는 다릅니다.
+0.0499 mean difference
95% CI [−0.0004, 0.0983]
평균적으로 Logistic이 우세했지만 신뢰구간에 0이 포함됐습니다. 그래서 “명확한 우위”라고 과장하지 않았습니다.
03 / FROM MODEL TO ACTION
병원이 관리할 수 있는 수는 정해져 있습니다.
기본 임계값 0.5에서는 990건 모두를 저위험으로 판단했습니다. 정확도 93%였지만 재입원 69건을 단 한 건도 찾지 못했습니다.
50건에서 100건으로 확대하면 정밀도 저하 없이 재입원 10건을 더 발견합니다. 이 구간이 가장 효율적인 확대였습니다.
04 / RESEARCH JUDGMENT
제가 학습한 것은 모델보다 판단의 순서입니다.
Accuracy보다 실패 비용
불균형 데이터에서 93% 정확도가 실제로는 재입원 전부를 놓치는 결과일 수 있음을 혼동행렬로 확인했습니다.
확률은 보정되어야 함
위험 순위가 맞는 것과 20%라는 확률을 믿을 수 있는 것은 다른 문제이므로 ECE·Brier·slope를 함께 평가했습니다.
해석은 인과가 아님
변수 중요도와 개별 기여도는 모델이 의존한 정보이지, 개입하면 결과가 바뀐다는 증거가 아님을 구분했습니다.
한계를 결과에 포함
합성 날짜 기반 temporal validation과 합성 관찰 코호트의 인과효과를 실제 임상 효과로 확장하지 않았습니다.
05 / DEBUGGING AS LEARNING
오류를 지우지 않고, 배운 근거로 남겼습니다.
노트북에는 최종 결과뿐 아니라 잘못된 가정과 수정 과정이 축적되어 있습니다.
ImportError
원인 Jupyter 커널이 수정 전 모듈을 캐시
학습 커널 상태와 파일 상태를 분리해 진단
KeyError: model
원인 모델명이 컬럼이 아닌 인덱스
학습 DataFrame 스키마를 먼저 확인하고 reset_index 적용
stale CI
원인 AUROC 분석 변수명을 ATE 분석에서 재사용
학습 분석 단계별 변수명과 결과 provenance를 명확히 관리
0.5 threshold
원인 기본 임계값을 제품 기준으로 오해
학습 관리 역량과 오탐·미탐 비용으로 운영점을 선택
06 / CAUSAL EXTENSION
“누가 위험한가?”에서
“무엇이 결과를 바꾸는가?”로
예측 실험 이후 별도의 합성 관찰 코호트에서 target trial, 교란변수, 성향점수, 안정화 IPTW, SMD, 환자 단위 bootstrap을 학습했습니다.
아래 결과는 인과추론 파이프라인 검증용 합성 데이터입니다. 실제 집중관리 프로그램의 임상효과로 해석하지 않습니다.
IPTW-adjusted ATE
- 95% CI
- −4.92 ~ −2.59%p
- NNT
- 약 27건
- Resampling
- 환자 단위 bootstrap
07 / LIMITS & NEXT
다음 연구를 가능하게 하는 한계
- 실제 EMR이 아닌 합성 코호트
- 실제 달력 변화가 없는 temporal validation
- 단일 기관·외부 검증 부재
- 미측정 교란과 개입 순응도 미반영
- 실제 데이터의 cohort와 time-zero 정의
- 기관·기간 외부검증과 calibration drift 모니터링
- 비용과 효과를 함께 보는 decision curve
- 불확실성을 포함한 개인별 위험 커뮤니케이션
WHAT I CAN BRING TO THE TEAM