의료데이터 공부하기 4강_ 위험 계층화
https://youtu.be/_shuV1tJbTU?si=BR6NArVryThEgikM
'위험 계층화' 는 환자 집단을 여러 범주로 나누는 방법이다.
ex) 고위험군, 저위험군, 중간위험군
'위험 계층화'는 '진단'과 다르다
진단 -> 오진(Misdiagnosis)이 발생하면 환자가 필요하지 않은 치료를 받거나, 적절한 치료를 제때 받지 못할 수 있다.
위험계증화 -> 특정 범주(고위험, 저위험 등)에 환자를 분류하는 것이 목표이며, 완벽한 정확도가 요구되는 것은 아니다.
이러한 차이점 때문에,
위험 계층화에서는 양성 예측도(Positive Predictive Value, PPV) 같은 지표를 중시한다.
즉, "우리가 고위험군이라고 예측한 환자들 중 실제로 고위험군에 해당하는 비율이 얼마나 되는가?"가 중요한 평가 요소가 된다.
위험 계층화 사례
- 신생아의 심각한 질병 위험 예측
- 조산아(premature infant)의 생존율이 과거에 비해 크게 향상되었음.
- 위험 계층화를 통해 신생아의 건강 상태를 평가하고 적절한 치료를 제공할 수 있음.
- 예: Apgar Score (신생아의 건강 상태를 평가하는 점수)
- 응급실 환자의 심장질환 위험 예측
- 응급실(ER)에서 심장 관련 질환으로 방문한 환자를 즉시 입원시켜야 할지, 아니면 퇴원 후 관리할 수 있을지 결정하는 문제.
- 이를 위해 머신러닝을 활용하여 위험을 예측하고, 불필요한 입원을 줄여 의료 비용을 절감할 수 있음.
- 예: 1984년 연구에서 **로지스틱 회귀(Logistic Regression)**를 이용한 위험 예측 모델 사용
- 병원 재입원 위험 예측
- 미국 의료 시스템에서는 30일 이내 재입원율이 높을 경우 병원이 정부로부터 패널티를 받음.
- 따라서, 위험 계층화를 통해 어떤 환자가 재입원할 가능성이 높은지 예측하고, 퇴원 후 적절한 조치를 취할 수 있도록 함.
- 예: 간호사 또는 사회복지사가 퇴원 환자에게 후속 조치를 제공
전통적인 접근 방식 vs 머신러닝 기반 접근 방식
전통적인 위험 계층화
- 수작업으로 계산하는 점수 기반 시스템(Scoring System) 사용
- 예: Apgar Score, FINDRISC (핀란드 당뇨병 위험 점수)
- 단점: 계산이 번거롭고, 사용 빈도가 낮음
머신러닝 기반 위험 계층화
- 더 많은 데이터와 변수를 활용 가능
- 의료 워크플로우에 자동으로 통합 가능
- 예측 정확도가 더 높을 가능성 있음
- 빠르게 새로운 모델을 개발하고 배포 가능
===> But new dangers introduced with ML approach
!! 제2형 당뇨병의 조기 예측(Early Detection of Type 2 Diabetes) !!
미국에서는 25% 이상의 당뇨병 환자가 진단되지 않은 상태이며, 이는 조기 개입의 기회를 놓치게 만든다.
기존 접근법
- 기존의 접근 방식은 FINDRISC 같은 점수 기반 시스템을 이용했다.
- 그러나 이러한 시스템은 자발적으로 설문을 작성해야 하므로 사용 빈도가 낮고, 자동화가 어렵다는 문제가 있다.
머신러닝 기반 접근법
- 머신러닝을 활용하면, 이미 존재하는 의료 데이터(예: 건강 보험 청구 데이터)를 기반으로 자동으로 위험 계층화를 수행할 수 있다.
- 즉, 환자가 별도로 설문을 작성할 필요 없이 건강 보험사의 데이터만으로도 고위험군을 식별할 수 있다.
=> 우리가 가지고 있는 데이터들에, 머신러닝을 통하여 우리가 가지고 있지 않는 대체 변수를 찾아 당뇨병 위험 예측을 하도록 할 수 있음 !!
환자의 건강 데이터를 구성하는 다양한 요소와 그 데이터가 어떻게 수집되는지 설명하는 사진

1) 적격성 기록 (Eligibility Records, 빨간색 화살표)
- 환자가 건강 보험에 가입한 시기를 나타냅니다.
- 특정 달에 데이터가 없는 경우, 이는 환자가 아무 활동도 하지 않았기 때문이 아니라 보험 가입 상태가 아니었기 때문일 수 있습니다.
- 주요 정보:
- 회원 ID
- 나이/성별
- 가입자 ID
- 회사 코드
2) 의료 청구 기록 (Medical Claims, 초록색 화살표)
- 환자의 진단 및 치료 내역을 나타냅니다.
- 주요 정보:
- ICD9 진단 코드
- CPT 코드 (치료 또는 절차 코드)
- 전문 분야 (예: 심장학, 일반 진료 등)
- 서비스 제공 위치
- 서비스 날짜
3) 약물 기록 (Medications, 주황색 화살표)
- 환자에게 처방된 약물에 대한 정보입니다.
- 주요 정보:
- NDC 코드 (National Drug Code, 약물 고유 코드)
- 약물 제공 일수
- 처방 약물의 양
- 서비스 제공자 ID
- 처방 날짜
4) 검사실 테스트 (Lab Tests, 파란색 화살표)
- 환자가 받은 실험실 테스트에 대한 정보입니다.
- 과거에는 보험 회사가 어떤 테스트가 수행되었는지만 알았지만, 점점 더 많은 보험 회사가 검사 결과 데이터에도 접근할 수 있게 되었습니다.
- 주요 정보:
- LOINC 코드 (검사 이름, 예: 소변/혈액 테스트)
- 검사 결과 (실제 값)
- 검사실 ID
- 정상 범위 (최대/최소값) 및 검사 날짜

주요 포인트:
- 135,000명의 환자에게서 얻은 실험실 데이터를 분석한 결과, 진단 코드의 총 횟수는 환자 수를 크게 초과했습니다.
- 예: 고혈압(hypertension) 관련 진단 코드는 400,000번 이상 발생했으며, 이는 동일 환자가 여러 시점에 반복적으로 진단받았음을 의미합니다.
- 주요 질환
- 고혈압 (Hypertension)
- 고지혈증 (Hyperlipidemia)
- 제2형 당뇨병 (Type 2 Diabetes Mellitus)
- 기타 흥미로운 코드
- 증상으로 보이는 코드: 예를 들어, 피로(Fatigue)가 진단 코드에 포함됨.
- 절차 기록: 예를 들어, 독감 예방 접종(Vaccination for Influenza)과 같은 내용도 포함됨.
이 데이터는 질환 자체뿐 아니라, 증상과 절차 데이터가 포함된 다양하고 상세한 진단 코드의 활용 가능성을 보여준다.
이는 환자들의 치료 패턴 및 건강 상태를 시간 경과에 따라 추적하는 데 중요한 인사이트를 제공한다.
위험 계층화 문제를 어떻게 도출하고 어떻게 해결하고, 어떻게 머신러닝 문제로 공식화할 수 있을까?
* 2009년 데이터를 기반으로 환자가 2011~2013 기간에 제 2형 당뇨병에 걸릴지를 예측하기!

1. 레이블 누출(Label Leakage) 문제
(1) 레이블 누출이란?
- 머신러닝 모델이 훈련할 때 미래의 정보(즉, 예측하려는 결과값 또는 힌트)가 이미 데이터에 포함되어 있는 상황을 말한다.
- 예:
- "환자가 미래에 당뇨병으로 진단받았는가?"를 예측하려고 하는데, 과거 데이터에 혈당 수치가 매우 높거나, 의사가 이미 당뇨병 가능성을 기록해둔 상태라면 모델이 쉽게 학습할 수 있다.
- 하지만 이런 정보는 미래를 예측하는 데 사용할 수 없는 데이터이다. 왜냐하면, 모델을 사용할 당시에는 이런 정보를 실제로 알 수 없기 때문이다.
(2) 레이블 누출 문제의 위험
- 모델이 "이미 명확한 힌트를 가진 데이터"를 바탕으로 학습하면, 실제 예측 상황에서 새로운 데이터를 만났을 때 제대로 작동하지 않을 가능성이 크다.
- 예를 들어, 모델이 "혈당 수치가 높으면 무조건 당뇨병이다"라고 학습했다면, 혈당 수치가 낮은데도 당뇨병 초기 증상을 보이는 환자를 놓칠 수 있다.
2. 간격(Gap)을 두는 이유와 신뢰성이 높아지는 이유
(1) 왜 간격을 더 많이 두면 신뢰성이 높아질까?
- 이미 의사가 진단한 환자를 제외할 수 있다.
- 간격 기간 동안(예: 2009~2011년) 진단된 환자는 "이미 관리 중인 환자"이다.
- 모델은 이들을 제외하고, 의사가 예상하지 못한 새로운 환자를 타겟으로 삼을 수 있다.
- 모델이 더 현실적인 상황에서 학습할 수 있다.
- 모델이 "과거의 정보만 가지고 미래를 예측하는 법"을 학습하게 된다.
→ 이는 모델이 실제로 적용되는 상황과 일치하기 때문에 더 신뢰성이 높아질 수 있다.
- 모델이 "과거의 정보만 가지고 미래를 예측하는 법"을 학습하게 된다.
(2) 왜 "간격이 긴 경우 신뢰성이 높다"고 보는 것일까?
- 간격이 길수록, 데이터에 포함된 힌트를 제거할 가능성이 높아진다.
- 예를 들어:
- 간격이 없으면(0년 gap), 2009년의 높은 혈당 수치 데이터를 보고 모델이 "이 환자는 2009~2011년에 당뇨병에 걸릴 것"이라고 쉽게 예측한다.
- 간격이 길면(2년 gap), 2009년 데이터를 보고 2011~2013년의 당뇨병 진단 여부를 예측해야 합니다. 이렇게 하면 더 복잡한 패턴을 찾아야 하고, 모델의 예측 능력이 실제 상황에 더 가까워진다.
(3) "조기 진단"을 포기하는 게 아닌가?
- 간격을 두면 조기 진단이 필요할 가능성이 큰, 하지만 의사가 아직 발견하지 못한 환자를 찾는 데 집중할 수 있다.
- 조기 진단의 진짜 목표는 아직 진단되지 않았지만 위험에 처한 환자들을 찾아내는 것이다. 간격을 두는 것은 이 목표를 이루기 위해 데이터를 정제하는 과정이다.
결론!!
모델 학습에서 레이블 누출문제를 막기 위해 feature 생성기간과 예측기간 사이의 Gap 을 두는 것은 중요하다.
위험 계층화 과정에서 예측할 대상을 정하기 위해 과거 데이터를 사용할 때, 실제로 발생할 수 있는 문제 중 하나이다.
검열(Censoring)이란?
- '검열(Censoring)'은 데이터가 불완전하거나 일부 구간에서 누락된 상태를 말한다.
- 의료 데이터에서는 환자에 대한 모든 데이터를 항상 확보할 수 없기 때문에, 데이터가 불완전하거나 제한된 경우가 종종 발생한다.
- 여기서 검열은 두 가지 유형으로 나뉩니다: 왼쪽 검열(Left Censoring)과 오른쪽 검열(Right Censoring)

머신러닝 모델 및 평가
이 연구에서는 L1 정규화 로지스틱 회귀(L1-Regularized Logistic Regression)를 사용했다.
L1 정규화의 장점
- 고차원 데이터를 다룰 수 있음
- 건강 보험 데이터는 수천 개 이상의 특징(feature)을 포함할 수 있기 때문에, 모델이 자동으로 중요한 변수를 선택하도록 만듦
- 해석 가능성(Interpretability)이 높음
- 기존의 블랙박스(Black Box) 모델과 달리, 특정 변수(예: 특정한 검사 결과, 특정 약물 복용 여부 등)가 예측에 미치는 영향을 분석할 수 있음
-
L1 정규화 (L1 Regularization)
- 가중치 벡터(weight vector)의 L1 노름(norm)에 패널티를 부여하면 결과적으로 희소(sparse)한 해를 얻게 된다.
- 여기서 희소(sparse)란 많은 가중치 값이 0이 되는 것을 의미한다.
- L1 정규화 문제는 다음과 같이 정의된다:

여기서 ∥w(1)∥ = ∑(d) ∣ w(d) ∣ 이다. (1)은 작은 1을 의미한다
이는 L2 정규화의 대안으로 사용됩니다.

쉽게 정리)
- L1 정규화:
- 가중치 값이 많아도 필요 없는 가중치는 0으로 만듦.
- 결과적으로 희소한(sparse) 모델이 만들어짐. (0이 많이 포함된 모델)
- L2 정규화:
- 모든 가중치를 작게 줄이는 방식.
- 가중치 값이 0에 가까워질 수 있지만, 완전히 0이 되지는 않음.

L1 정규화의 희소성 이점 (Sparsity Benefit of L1 Regularization)
가정:
- 손실 함수(loss function)의 수준 집합(level set)을 최적화하는 문제를 고려한다. 이 수준 집합은 2차 함수(quadratic function)이다.
* 손실 함수는 모델의 예측값과 실제값 사이의 차이를 측정하는 함수이다.
우리가 최적화를 통해 최소화하고자 하는 것이 바로 이 손실함수이며, 값이 작아질 수록 모델의 예측 성능이 더 좋아진다는 것이다.
* 수준 집합은 수학에서 함수가 특정 값을 가지는 점들의 집합을 말하며, 손실함수 값이 특정 수준으로 동일한 점들의 집합을 의미한다.
- 정규화 항을 추가하는 대신, 제약 조건을 설정한다고 가정한다.
예:
손실 함수를 최소화하되, 가중치 벡터의 L1 노름이 3 이하가 되도록 제약을 둔다.
L1 제약 조건 (L1 Constraint):
- 가중치 w1 ,w2가 있을 때, 가중치 절대값의 합이 1인 경우 해는 다이아몬드(diamond) 모양의 공간 내에 있어야 한다.
L2 제약 조건 (L2 Constraint):
- 반면, L2 노름을 사용할 경우 해는 구(sphere) 내에 있어야 합니다. 예를 들어, 가중치 벡터의 L2 노름이 1로 고정되면, 이는 반지름이 1인 구를 형성한다.
최적화 해 비교
- L2 정규화:
- 구(sphere) 상에서 손실 함수의 중심과 가장 가까운 점이 최적화 해가 된다.
- 이 해는 w1 과 w2가 모두 0이 아닌 값을 가질 가능성이 높다.
- L1 정규화:
- 다이아몬드(diamond) 상에서 손실 함수의 중심과 가장 가까운 점이 최적화 해가 된다.
- 이 해는 w1또는 w2 중 하나가 0이 되는 경우가 많다.
따라서, L1 정규화는 희소한 해를 제공하며, 이는 다음과 같은 두 가지 상황에서 유리하다.
- 과적합 방지(Prevent Overfitting)
- 적은 수의 특징(features)만으로도 좋은 모델이 존재하는 경우, 과적합을 방지할 수 있음
- 해석 가능성(Interpretability)
- L1 정규화를 사용하면 모델이 선택한 주요 특징들을 명확히 식별할 수 있음
- 예를 들어, 핀란드에서 사용되는 FINDRISC와 같은 간단한 위험 점수 체계는 단 5~20개의 질문만으로도 충분히 환자의 위험을 예측할 수 있었다.
실용적 이점 (Practical Benefits)
- L1 정규화를 사용하여 수백 개의 특징(features)만으로 모델을 훈련하면, 동일한 모델을 다른 데이터셋에 더 쉽게 적용할 수 있다.
- 예를 들어, 건강 보험 회사의 데이터를 활용해 모델을 학습한 경우, 다른 기관에서는 동일한 특징만 사용해 모델을 적용 가능하다.
- 이는 모델 배포(deployment)를 단순화시키고 효율성을 높인다.
쉽게 정리)
- L1 제약 조건:
- 가중치의 절대값 합(w1+w2)이 일정 값(예: 1)을 넘지 않도록 제한.
- 제한된 공간이 다이아몬드 모양으로 형성됨.
- L2 제약 조건:
- 가중치의 제곱합(w1^2 + w2^2)이 일정 값(예: 1)을 넘지 않도록 제한.
- 제한된 공간이 원 모양으로 형성됨.
- 최적화 해 비교:
- L1 제약 조건에서는 해가 다이아몬드 꼭짓점에 위치할 가능성이 높음.
- 결과: 많은 가중치가 0으로 설정되어 희소한 모델 생성.
- L2 제약 조건에서는 해가 원 내부의 적당한 위치에 있음.
- 결과: 가중치들이 작아지지만, 대부분 0이 되지 않음.
- L1 제약 조건에서는 해가 다이아몬드 꼭짓점에 위치할 가능성이 높음.
[ L1 정규화의 실제 사용 ]-------------------------------------------------
- 리스크 예측 모델:
- 병원에서 환자의 데이터를 분석할 때, 모든 변수가 중요한 것은 아니다.
- L1 정규화를 사용하면, 정말 중요한 변수(예: 혈압, 혈당 등)만 남기고 나머지는 제거한다.
- 해석 가능성:
- L1 정규화로 희소한 모델을 만들면, 결과적으로 모델이 어떤 변수를 기반으로 예측했는지 이해하기 쉽다.
- 예: 핀란드의 FINDRISC 모델은 단 10개의 질문만으로 당뇨병 위험을 예측한다.
[ 의료 데이터에서 L1 정규화는 왜 중요한가? ]---------------------------------
- 리스크 계층화(Risk Stratification) 문제에서 데이터를 분석할 때, 수많은 변수(features)가 포함된다.
- 예: 건강 보험 데이터에서 혈당, 나이, 병력, 약물 사용 기록 등.
- 하지만, 이 중 일부 변수만 중요한 경우가 많다.
- L1 정규화는 이런 중요한 변수만 남기고, 불필요한 변수는 제거하므로 모델을 단순화하고 성능을 개선한다.

'💻 본업(컴공생) 이야기 > 의료 데이터 공부 이야기' 카테고리의 다른 글
[의료 데이터 🩺] 2-3. Clinical Care/Data (0) | 2025.02.03 |
---|---|
[의료 데이터 🩺] 1. What makes Healthcare Unique? (6) | 2025.01.23 |