90-DAY READMISSION PREDICTION STUDY
90일 뒤의 건강을
예측한다는 것
판별력에서 확률 보정, 불확실성, 운영 의사결정과 인과추론까지. 미래 건강 예측을 작은 모델로 끝까지 검증한 학습 연구입니다.
90-DAY READMISSION PREDICTION STUDY
판별력에서 확률 보정, 불확실성, 운영 의사결정과 인과추론까지. 미래 건강 예측을 작은 모델로 끝까지 검증한 학습 연구입니다.
ABSTRACT / 연구 초록
합성 종단 건강 데이터로 90일 재입원을 예측했습니다. 무작위 holdout은 환자 단위로 분리했고, 테스트 데이터는 모델 선택이나 전처리에 사용하지 않았습니다. 시간 검증은 기존 환자의 미래 입원까지 예측하는 별도 질문으로 설계했습니다.
연구의 출발점은 Delphi-2M이 제시한 미래 건강 상태 예측이었지만, 포트폴리오의 초점은 거대 모델 복제가 아니라 평가 원리를 작게 끝까지 구현하는 데 두었습니다.
RESULTS / 핵심 결과
현재 합성 데이터와 실험 조건에서는 로지스틱 회귀가 더 안정적이었고, 평균 성능 차이는 존재했지만 불확실성까지 고려하면 우위를 단정할 수 없었습니다.
Logistic이 10회 중 9회 높았습니다. 생성식이 로지스틱 구조와 가까운 합성 실험이라는 조건 안에서 해석했습니다.
평균 차이는 양수지만 신뢰구간에 0이 포함되어 “명확한 우위”라고 결론 내리지 않았습니다.
기본 임계값 0.5의 recall 0%와 달리, 관리 역량을 기준으로 운영점을 정하면 실제 발견이 가능했습니다.
인과분석 절차는 완주했지만, 합성 데이터의 수치를 실제 임상 효과로 해석하지 않았습니다.
이 연구의 성과는 최고 점수 하나가 아니라, 누수 없는 검증 → 확률 보정 → 불확실성 → 운영 의사결정 → 인과의 경계를 하나의 판단 체계로 연결한 것입니다.
CONTENTS / 연구 구성
각 장은 앞 단계의 결과가 만든 다음 질문을 따라갑니다.
01 / DATA DESIGN & QUALITY
한 행이 무엇을 뜻하는지, 각 변수가 언제 알 수 있는 정보인지, 어떤 검증을 통과했는지를 분석 전에 기록했습니다.
환자 ID와 입원 ID를 분리해 반복 입원을 표현하고, 퇴원 시점을 예측 기준 시점으로 삼았습니다.
입력에는 퇴원 시점까지 알 수 있는 정보만 사용하고 이후 정보는 제외했습니다.
같은 환자의 기록이 학습과 테스트에 동시에 포함되지 않도록 환자 ID 단위로 분할했습니다.
파이프라인 학습용 데이터이며 실제 환자·임상 성능을 나타내지 않는다는 범위를 유지했습니다.
| 변수 | 의미 | 단위 | 측정 시점 |
|---|---|---|---|
| age | 나이 | years | 기준 입원 시점 |
| prior_admissions | 이전 입원 횟수 | count | 현재 퇴원 이전 |
| length_of_stay_days | 입원 기간 | days | 현재 입원 |
| comorbidity_count | 동반 질환 수 | count | 현재 퇴원까지의 이력 |
| heart_rate_last | 최근 심박수 | beats/min | 퇴원 전 마지막 측정 |
| systolic_bp_last | 최근 수축기 혈압 | mmHg | 퇴원 전 마지막 측정 |
| glucose_last | 최근 혈당 | mg/dL | 퇴원 전 마지막 측정 |
| creatinine_last | 최근 크레아티닌 | mg/dL | 퇴원 전 마지막 측정 |
| lab_missing_fraction | 검사 결측 비율 | 0–1 | 현재 입원 |
변수 사전과 모델 입력 9개가 일치하고, 설명과 단위가 비어 있지 않은지 검사했습니다.
무작위 holdout의 환자 중복이 0명이고 결과 변수가 두 클래스를 포함하는지 검사했습니다.
시간 순서와 90일 간격을 확인했습니다. 시간 분할에는 기존 환자 215명이 포함된 범위를 기록했습니다.
실제 EMR의 중복·단위 오류·코드 체계·결측 변화는 합성 데이터만으로 검증할 수 없습니다.
02 / RESEARCH STORYLINE
먼저 예측을 믿고 사용할 수 있는지 검증했습니다. 이후 미래 시점의 일반화 가능성을 확인하고, 개입 효과라는 별도의 인과 질문으로 확장했습니다.
누가 퇴원 후 90일 안에 다시 입원할 가능성이 높은가?
환자 단위로 데이터를 나누고 미래 정보가 학습에 섞이는 누수를 차단했습니다.
AUROC와 AUPRC11로 위험 환자의 순위를 구분하는 능력을 평가했습니다.
10개 seed와 paired bootstrap으로 모델 차이의 평균과 95% 신뢰구간을 계산했습니다.
관리 가능 건수로 운영점을 정하고 변수 중요도와 환자별 예측 근거를 분리해 읽었습니다.
과거 입원으로 학습하고 이후 시점에서 평가해 미래 일반화 가능성을 확인했습니다.
집중관리가 재입원을 줄이는지 성향점수, IPTW와 공변량 균형으로 별도 분석했습니다.
위험을 구분하는 모델에서 출발해 믿을 수 있는 확률과 실행 가능한 운영 기준을 확인한 뒤, 개입 효과라는 새로운 질문으로 넘어갔습니다.
03 / EVIDENCE
단일 최고 점수를 선택하지 않았습니다. 판별력, 확률 정확도, 반복 안정성과 제품 효용을 서로 다른 질문으로 평가했습니다.
환자 위험 순위를 구분하는 능력
재입원율 6.97%의 불균형을 반영
예측확률과 실제 결과의 제곱오차
이상적인 값 1에 대한 확률 보정 진단
판단: 위험도가 낮은 구간에 관측이 집중됐으며, calibration slope15 0.840을 함께 보고 확률의 과신 가능성을 점검했습니다.
판단: 평균 점수의 단조 상승보다, 500명에서 10,000명으로 갈수록 Brier Skill Score16의 반복 변동이 줄어든 점을 데이터 증가의 주된 효과로 보았습니다.
Logistic은 AUROC 기준 10회 중 9회 우세했습니다. 다만 결과 생성식이 로지스틱 구조와 가까워 다른 데이터에서도 우세하다고 확장하지 않았습니다.
+0.0499 mean difference
95% CI [−0.0004, 0.0983]
판단: 평균적으로 Logistic이 우세했지만 신뢰구간에 0이 포함됐으므로 모델 우위를 확정하지 않고 확률 품질과 운영 조건을 함께 비교했습니다.
Permutation importance17는 변수를 섞었을 때 AUPRC가 얼마나 감소하는지 보여주며, 인과효과가 아니라 예측 의존성을 나타냅니다.
나이·이전 입원 횟수의 중요도가 높았고, 일부 활력징후는 0에 가까운 변화량과 넓은 오차범위를 보였습니다.
비선형 모델은 Logistic과 다른 순위의 변수를 활용했지만, 이러한 의존성이 더 나은 일반화 성능으로 이어지지는 않았습니다.
04 / FROM MODEL TO ACTION
기본 임계값 0.5에서는 990건 모두를 저위험으로 판단했습니다. 정확도 93%였지만 재입원 69건을 단 한 건도 찾지 못했습니다.
50건에서 100건으로 확대하면 정밀도 저하 없이 재입원 10건을 더 발견합니다. 이 구간이 가장 효율적인 확대였습니다.
100건 이후에는 추가 관리량 대비 추가 발견 수가 감소했습니다. 임계값은 모델 속성이 아니라 비용과 인력까지 포함한 정책 변수입니다.
05 / RESEARCH JUDGMENT
불균형 데이터에서 93% 정확도가 실제로는 재입원 전부를 놓치는 결과일 수 있음을 혼동행렬로 확인했습니다.
위험 순위가 맞는 것과 20%라는 확률을 믿을 수 있는 것은 다른 문제이므로 ECE·Brier·slope를 함께 평가했습니다.
변수 중요도와 개별 기여도는 모델이 의존한 정보이지, 개입하면 결과가 바뀐다는 증거가 아님을 구분했습니다.
합성 날짜 기반 temporal validation과 합성 관찰 코호트의 인과효과를 실제 임상 효과로 확장하지 않았습니다.
계수는 전체 데이터에서의 평균적 방향을, 개별 log-odds19 기여도는 특정 입원 건의 예측을 밀어 올리거나 내린 근거를 설명합니다.
표준화 계수의 부호와 크기로 다른 단위의 변수를 같은 기준에서 비교했습니다.
이전 입원 횟수와 나이가 위험도를 크게 올렸지만, 이는 해당 변수에 개입하면 결과가 바뀐다는 뜻은 아닙니다.
06 / TEMPORAL VALIDATION20
무작위 분할만으로는 시간에 따른 데이터 변화를 확인할 수 없습니다. 입원 날짜를 기준으로 과거를 학습하고 이후 시점을 평가했습니다.
합성 날짜의 후반부에 입원 건수가 줄어드는 구조를 확인한 뒤, 90일 간격을 둔 학습·평가 구간을 정의했습니다.
Temporal AUROC 0.678, AUPRC 0.181로 무작위 분할보다 높았지만, 실제 달력 변화가 없는 합성 데이터의 한계를 함께 기록했습니다.
이번 질문: 기존 환자의 과거 입원으로 학습해 그 환자의 미래 입원까지 예측할 수 있는가?
학습·평가 양쪽에 포함된 기존 환자는 215명이었습니다. 이는 이 질문에는 허용했지만, 완전히 새로운 환자에 대한 일반화 성능을 검증한 결과는 아닙니다.
07 / CAUSAL EXTENSION
예측 실험 이후 별도의 합성 관찰 코호트에서 target trial, 교란변수, 성향점수21, 안정화 IPTW, SMD22, 환자 단위 bootstrap을 학습했습니다.
아래 결과는 인과추론 파이프라인 검증용 합성 데이터입니다. 실제 집중관리 프로그램의 임상효과로 해석하지 않습니다.
IPTW-adjusted ATE
07A / CAUSAL DIAGNOSTICS
성향점수의 공통 지지 영역, 가중치의 극단값, IPTW 적용 전후 공변량 균형을 순서대로 진단했습니다.
분포가 완전히 분리되지 않아 positivity24가 심각하게 위반되지는 않았지만, 양 끝 구간의 관측치에는 주의가 필요했습니다.
대부분의 가중치는 1 근처였고 일부 큰 값이 존재했습니다. 극단 가중치가 효과 추정을 지배하는지 점검하는 단계입니다.
가중 전에는 동반 질환 수·나이·이전 입원 횟수의 불균형이 컸지만, 가중 후 관측된 공변량 균형은 개선됐습니다. 미측정 교란까지 해결됐다는 의미는 아닙니다.
08 / CONTRIBUTION & REPRODUCIBILITY
결과 숫자만 제시하지 않고 학습 과정, 구현 근거, 도구 활용 범위를 함께 남겼습니다.
244개 셀의 분석 노트북을 직접 실행하며 모델 비교, 확률 보정, 환자 단위 bootstrap, 운영 기준과 인과추론을 단계별로 학습하고 해석했습니다.
데이터·모델·평가·파이프라인을 모듈로 분리하고 uv 잠금 환경, 평가 산출물, 11개 자동 테스트와 12개 분석 그림을 저장했습니다.
개념 설명, 오류 추적과 웹 구현에 AI 지원을 활용했습니다. 분석 수치는 실행 결과로 확인하고, 결론의 의미와 한계를 이해한 뒤 제 언어로 정리했습니다.
저장소는 비공개일 수 있으며, 검토가 필요한 경우 접근 권한을 제공할 수 있습니다.
NOTES / 용어 각주
본문에서 처음 등장한 전문 용어를 이 연구에서 사용한 의미에 맞춰 설명했습니다.
데이터 분할이나 모델의 무작위성을 재현하기 위해 고정하는 숫자입니다. 여러 seed의 결과를 비교하면 특정 분할에만 좋은 모델인지 확인할 수 있습니다.
↩모든 임계값에서 양성 환자를 음성 환자보다 높은 위험으로 정렬하는 능력입니다. 0.5는 무작위 수준이고 1에 가까울수록 좋습니다.
↩변수의 가중합을 로지스틱 함수로 변환해 사건 발생 확률을 예측하는 선형 분류 모델입니다.
↩HistGradientBoosting의 약자입니다. 데이터를 구간화한 여러 결정트리를 순차적으로 결합해 비선형 관계를 학습합니다.
↩같은 환자를 두 모델에서 함께 재표본추출해 성능 차이의 분포를 구하는 방법입니다. 모델 간 대응 관계를 유지합니다.
↩표본 변동을 고려한 추정값의 불확실성 구간입니다. 모델 차이의 신뢰구간에 0이 포함되면 우위가 명확하다고 보기 어렵습니다.
↩실제로 재입원한 환자 중 모델이 고위험으로 찾아낸 비율입니다. 민감도라고도 합니다.
↩모델이 고위험으로 선택한 환자 중 실제로 재입원한 비율입니다. 양성 예측도라고도 합니다.
↩성향점수의 역수를 가중치로 사용해 관측된 교란변수의 분포가 비슷한 비교 집단을 만드는 방법입니다.
↩전체 대상자가 개입을 받았을 때와 받지 않았을 때의 평균 결과 차이입니다. 인과 가정이 충족되어야 효과로 해석할 수 있습니다.
↩Precision과 Recall의 관계를 임계값 전반에서 요약합니다. 이 연구의 코드는 선형 보간 면적이 아닌 average precision(AP)으로 계산했으며, 양성 사례가 적을 때 특히 유용합니다.
↩예측 확률과 실제 발생률이 일치하는 정도입니다. 예를 들어 20%라고 예측된 집단에서 실제 약 20%가 발생하는지를 봅니다.
↩예측 확률과 실제 결과 사이의 제곱오차 평균입니다. 0에 가까울수록 확률 예측이 정확합니다.
↩확률 구간별 예측 확률과 실제 발생률의 차이를 가중 평균한 값입니다. 낮을수록 보정이 좋습니다.
↩예측 위험의 퍼짐이 적절한지 보는 기울기입니다. 1이 이상적이며 1보다 작으면 예측이 지나치게 극단적일 가능성이 있습니다.
↩전체 발생률만 예측하는 기준 모델보다 Brier Score가 얼마나 개선됐는지 나타냅니다. 0보다 크면 기준 모델보다 낫습니다.
↩특정 변수의 값을 섞었을 때 성능이 얼마나 감소하는지 측정합니다. 모델의 예측 의존성을 뜻하며 인과효과는 아닙니다.
↩Precision을 전체 재입원율로 나눈 값입니다. 무작위 선택보다 고위험군을 몇 배 더 효율적으로 찾았는지 보여줍니다.
↩확률 p를 log[p/(1−p)]로 변환한 값입니다. 로지스틱 회귀에서는 변수별 기여도가 이 척도에서 더해집니다.
↩과거 시점의 데이터로 학습하고 이후 시점의 데이터로 평가해 실제 미래 적용 상황을 흉내 내는 검증입니다.
↩관측된 공변량이 주어졌을 때 한 사람이 집중관리를 받을 확률입니다. 관찰연구에서 비교 집단을 조정하는 데 사용합니다.
↩두 집단의 공변량 차이를 표준화한 값입니다. 절댓값 0.1 미만을 양호한 균형의 실무적 기준으로 자주 사용합니다.
↩사건 한 건을 추가로 예방하기 위해 필요한 평균 개입 대상 수입니다. 절대위험감소의 역수로 계산합니다.
↩같은 공변량 특성을 가진 사람에게 개입군과 비교군에 속할 가능성이 모두 존재해야 한다는 인과추론 가정입니다.
↩WHAT I LEARNED