콘텐츠로 이동
Data Prep
상세

헬스케어 산업 데이터 분석

개요

헬스케어 분석은 환자 결과 개선, 비용 효율화, 운영 최적화를 목표로 한다. 개인정보 보호(HIPAA, 개인정보보호법)와 의료 윤리가 핵심 제약조건이다.

데이터 유형

┌─────────────────────────────────────────────────────────────┐
│                Healthcare Data Types                        │
│                                                             │
│  Clinical Data:                                             │
│  ├─ EMR/EHR (전자의무기록)                                 │
│  ├─ Lab Results (검사 결과)                                │
│  ├─ Imaging (영상 데이터)                                  │
│  └─ Prescriptions (처방 기록)                              │
│                                                             │
│  Administrative Data:                                       │
│  ├─ Claims (보험 청구)                                     │
│  ├─ Scheduling (예약/일정)                                 │
│  └─ Billing (수납)                                         │
│                                                             │
│  Patient-Generated:                                         │
│  ├─ Wearables (웨어러블 기기)                              │
│  ├─ Patient Surveys (설문)                                 │
│  └─ PROs (Patient-Reported Outcomes)                       │
│                                                             │
│  External:                                                  │
│  ├─ Social Determinants (사회적 요인)                      │
│  └─ Environmental (환경 데이터)                            │
└─────────────────────────────────────────────────────────────┘

주요 분석 영역

1. 환자 결과 예측

재입원 예측 (Readmission)

┌─────────────────────────────────────────────────────────────┐
│            30-day Readmission Prediction                    │
│                                                             │
│  Target: 퇴원 후 30일 내 재입원 여부                        │
│                                                             │
│  Features:                                                  │
│  ├─ Demographics: 나이, 성별, 보험 유형                     │
│  ├─ Clinical: 진단 코드, 입원 기간, Charlson Index         │
│  ├─ Utilization: 이전 입원 횟수, 응급실 방문               │
│  └─ Social: 거주 형태, 가족 지원                           │
│                                                             │
│  Model Performance (LACE+ 대비):                           │
│  ├─ AUC: 0.72 → 0.78                                       │
│  └─ 고위험군 PPV: 25% → 35%                                │
└─────────────────────────────────────────────────────────────┘
예측 모델 장점 단점
LACE Score 간단, 표준화 정확도 낮음
Logistic Regression 해석 가능 비선형 관계 한계
XGBoost 높은 정확도 블랙박스
Deep Learning 복잡한 패턴 데이터 많이 필요

사망 위험 예측

# APACHE-like Severity Score 예측
features = [
    'age', 'heart_rate', 'blood_pressure', 'temperature',
    'respiratory_rate', 'oxygen_saturation', 'gcs_score',
    'lab_creatinine', 'lab_bilirubin', 'lab_wbc'
]

# 24시간 내 ICU 사망 위험
mortality_risk = model.predict_proba(patient_data[features])[:, 1]

2. 운영 최적화

병상 점유율 예측

┌─────────────────────────────────────────────────────────────┐
│              Bed Occupancy Forecasting                      │
│                                                             │
│  Inputs:                                                    │
│  ├─ 현재 재원 환자 수                                      │
│  ├─ 예정된 입원 (수술, 전원)                               │
│  ├─ 예상 퇴원 (주치의 계획)                                │
│  ├─ 응급실 입원 예측                                       │
│  └─ 계절성, 요일 패턴                                      │
│                                                             │
│  Outputs:                                                   │
│  ├─ 향후 24/48/72시간 병상 점유율                         │
│  ├─ 병동별 가용 병상 수                                    │
│  └─ 병상 부족 경보                                         │
│                                                             │
│  Time Series:                                               │
│  ├─ ARIMA (단기)                                           │
│  ├─ Prophet (계절성)                                       │
│  └─ LSTM (복잡 패턴)                                       │
└─────────────────────────────────────────────────────────────┘

수술실 일정 최적화

# 수술 시간 예측
def predict_surgery_duration(surgery_info):
    features = {
        'procedure_code': surgery_info['cpt_code'],
        'surgeon_id': surgery_info['surgeon'],
        'patient_age': surgery_info['age'],
        'patient_bmi': surgery_info['bmi'],
        'asa_class': surgery_info['asa_classification'],
        'prior_surgeries': surgery_info['surgery_history_count']
    }

    predicted_minutes = model.predict(features)

    # 버퍼 추가 (실제 > 예측의 20% 사례 커버)
    with_buffer = predicted_minutes * 1.2

    return with_buffer
최적화 목표 지표 목표값
활용률 첫 수술 시작 ~ 마지막 종료 / 가용 시간 > 80%
턴오버 수술 간 정리/준비 시간 < 30분
초과 근무 정규 시간 초과 수술 비율 < 5%

3. 비용 분석

고비용 환자 예측

┌─────────────────────────────────────────────────────────────┐
│            High-Cost Patient Prediction                     │
│                                                             │
│  정의: 상위 5% 의료비 사용 환자                             │
│                                                             │
│  특징:                                                      │
│  ├─ 다중 만성질환 (Comorbidity)                            │
│  ├─ 잦은 응급실 방문                                       │
│  ├─ 복잡한 약물 요법                                       │
│  └─ 사회적 취약성                                          │
│                                                             │
│  활용:                                                      │
│  ├─ Care Management 프로그램 대상 선정                     │
│  ├─ 예방적 개입 우선순위                                   │
│  └─ 보험 리스크 관리                                       │
└─────────────────────────────────────────────────────────────┘

Total Cost of Care

# PMPM (Per Member Per Month) 분석
def calculate_pmpm(claims_df, member_months):
    total_allowed = claims_df['allowed_amount'].sum()
    pmpm = total_allowed / member_months

    # 카테고리별
    pmpm_by_category = claims_df.groupby('service_category')['allowed_amount'].sum() / member_months

    return {
        'total_pmpm': pmpm,
        'inpatient_pmpm': pmpm_by_category.get('inpatient', 0),
        'outpatient_pmpm': pmpm_by_category.get('outpatient', 0),
        'pharmacy_pmpm': pmpm_by_category.get('pharmacy', 0),
        'professional_pmpm': pmpm_by_category.get('professional', 0)
    }

4. 품질 지표

핵심 품질 메트릭

지표 정의 벤치마크
Mortality Rate 사망률 (위험 보정) AHRQ 기준
HAI Rate 병원 획득 감염률 CDC NHSN
Readmission 30일 재입원율 CMS 기준
Patient Satisfaction HCAHPS 점수 전국 상위 10%
Length of Stay 평균 재원 일수 질환별 기준

위험 보정 (Risk Adjustment)

# O/E Ratio (Observed/Expected)
def calculate_oe_ratio(observed_outcomes, patient_data, model):
    # 예상 결과 (환자 위험도 기반)
    expected = model.predict_proba(patient_data)[:, 1].sum()

    # 실제 결과
    observed = observed_outcomes.sum()

    # O/E < 1: 예상보다 좋음
    # O/E > 1: 예상보다 나쁨
    return observed / expected

# 예: 사망 O/E = 0.85 → 예상 대비 15% 낮은 사망률

분석 도구

진단 코드 체계

코드 체계 용도 예시
ICD-10-CM 진단 E11.9 (당뇨병)
ICD-10-PCS 시술 0HB0XZZ (유방 절제)
CPT 수가 청구 99213 (외래 진료)
SNOMED-CT 임상 개념 73211009 (당뇨)
LOINC 검사 결과 2345-7 (혈당)

Comorbidity Index

# Charlson Comorbidity Index
charlson_weights = {
    'myocardial_infarction': 1,
    'congestive_heart_failure': 1,
    'peripheral_vascular': 1,
    'cerebrovascular': 1,
    'dementia': 1,
    'copd': 1,
    'rheumatic': 1,
    'peptic_ulcer': 1,
    'liver_mild': 1,
    'diabetes': 1,
    'diabetes_complications': 2,
    'paralysis': 2,
    'renal': 2,
    'cancer': 2,
    'liver_severe': 3,
    'metastatic_cancer': 6,
    'aids': 6
}

def calculate_charlson(diagnoses):
    score = sum(charlson_weights.get(dx, 0) for dx in diagnoses)
    return score

개인정보 보호

비식별화 기법

┌─────────────────────────────────────────────────────────────┐
│            De-identification Methods                        │
│                                                             │
│  HIPAA Safe Harbor:                                         │
│  ├─ 18가지 식별자 제거                                     │
│  ├─ 이름, 주소, 날짜, 전화번호 등                          │
│  └─ 89세 이상 → "90+"로 표시                               │
│                                                             │
│  Expert Determination:                                      │
│  ├─ 통계 전문가가 재식별 위험 평가                         │
│  └─ k-anonymity, l-diversity 적용                          │
│                                                             │
│  기술적 방법:                                               │
│  ├─ 가명화 (Pseudonymization)                              │
│  ├─ 일반화 (Generalization)                                │
│  ├─ 데이터 마스킹                                          │
│  └─ Differential Privacy                                   │
└─────────────────────────────────────────────────────────────┘

분석 환경

방식 설명 적합 상황
De-identified Dataset 완전 비식별 데이터 추출 일반 분석
Limited Dataset 일부 식별자 유지 (연구 목적) IRB 승인 연구
Secure Enclave 데이터 반출 불가 환경에서 분석 민감 분석
Federated Learning 데이터 이동 없이 모델 학습 다기관 연구

사례 연구

당뇨병 관리 프로그램

목표: 당뇨 환자의 HbA1c 개선 및 합병증 예방

분석:
1. 고위험 환자 식별 (HbA1c > 9%, 미복약)
2. 개입 효과 예측 (Uplift Modeling)
3. 자원 배분 최적화

결과:
- 타겟 환자 2,000명 선정
- 6개월 후 HbA1c 평균 0.8% 감소
- 응급실 방문 25% 감소
- ROI: 1:3.2

체크리스트

□ 데이터 준비
  □ IRB/개인정보 승인
  □ 데이터 품질 검증 (진단 코드 정확성)
  □ 비식별화 적용

□ 분석 설계
  □ 명확한 비즈니스 질문 정의
  □ 적절한 outcome 정의
  □ 위험 보정 모델 선택

□ 모델 개발
  □ 임상 전문가 검토 (feature 타당성)
  □ 시간적 누수 방지 (data leakage)
  □ 외부 검증 (다른 기관/기간)

□ 배포
  □ 임상 워크플로우 통합
  □ 설명 가능성 (SHAP, LIME)
  □ 모니터링 및 재학습 계획

참고 자료

  • Rajkomar et al., "Machine Learning in Medicine", NEJM 2019
  • Healthcare Cost and Utilization Project (HCUP)
  • CMS Quality Measures Documentation