본문 바로가기

Study Information Technology

의료 예측 분석 모델 구축하기 랜덤 포레스트와 그래디언트 부스팅을 활용한 환자 결과 예측

728x90
반응형

의료 예측 분석 모델 구축하기: 랜덤 포레스트와 그래디언트 부스팅을 활용한 환자 결과 예측

Overview

의료 분야에서 환자의 결과를 예측하는 것은 환자 치료의 질을 높이고, 자원을 효율적으로 배분하는 데 중요한 역할을 합니다. 이를 위해 다양한 데이터 분석 기법이 사용되며, 그중에서도 랜덤 포레스트(Random Forest)와 그래디언트 부스팅(Gradient Boosting)과 같은 앙상블 학습 기법이 인기를 끌고 있습니다. 이 글에서는 이러한 기법들을 사용하여 환자의 건강 데이터와 치료 계획을 기반으로 환자의 결과를 예측하는 모델을 구축하는 과정을 자세히 설명하겠습니다.

1. 데이터 수집

의료 예측 모델을 구축하기 위해서는 우선 충분하고 적절한 데이터를 수집해야 합니다. 주로 사용되는 데이터는 다음과 같습니다:

  • 환자의 건강 기록: 나이, 성별, 기저 질환, 과거 치료 내역 등.
  • 치료 계획: 환자가 받는 치료의 종류와 빈도.
  • 결과 변수: 환자의 회복 여부, 합병증 발생 여부 등.

예를 들어, 미국의 전자 건강 기록(EHR) 시스템에서 수집된 데이터를 사용할 수 있습니다. 데이터는 CSV 형식으로 저장될 수 있으며, 각 행이 하나의 환자 케이스를 나타내고, 각 열이 특정 변수(예: 나이, 성별, 치료 방법 등)를 나타냅니다.

2. 데이터 전처리

수집한 데이터는 종종 불완전하고, 노이즈가 포함되어 있습니다. 따라서 데이터를 정제하는 과정이 필요합니다. 주요 단계는 다음과 같습니다:

  • 결측치 처리: 결측치를 평균값, 중앙값 또는 다른 방법으로 대체하거나, 결측치가 있는 행을 제거합니다.
import pandas as pd

# CSV 파일 읽기
data = pd.read_csv('health_data.csv')

# 결측치 확인
print(data.isnull().sum())

# 평균으로 결측치 대체
data.fillna(data.mean(), inplace=True)
  • 카테고리 변수 인코딩: 성별이나 치료 방법과 같은 범주형 변수는 모델이 이해할 수 있도록 숫자로 변환해야 합니다. 원-핫 인코딩을 사용할 수 있습니다.
data = pd.get_dummies(data, columns=['gender', 'treatment_type'])
  • 정규화/표준화: 모든 피처를 동일한 범위로 맞추어 주는 과정입니다. 이는 특히 거리 기반 알고리즘에서 중요합니다.
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
data[['age', 'treatment_frequency']] = scaler.fit_transform(data[['age', 'treatment_frequency']])

3. 모델 선택 및 구축

랜덤 포레스트

랜덤 포레스트는 여러 개의 결정 트리를 사용하여 예측의 정확성을 높이는 앙상블 학습 기법입니다. 이 방법은 과적합을 줄이고, 다양한 변수의 중요성을 평가할 수 있는 장점이 있습니다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# 데이터 분할
X = data.drop('outcome', axis=1)  # 독립 변수
y = data['outcome']  # 종속 변수
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 모델 생성 및 학습
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 예측
y_pred = rf_model.predict(X_test)

그래디언트 부스팅

그래디언트 부스팅은 이전 모델의 오류를 보정하는 방식으로 학습하는 강력한 앙상블 기법입니다. 주로 XGBoost와 같은 라이브러리를 사용하여 구현할 수 있습니다.

from xgboost import XGBClassifier

# 모델 생성 및 학습
gb_model = XGBClassifier(use_label_encoder=False, eval_metric='logloss')
gb_model.fit(X_train, y_train)

# 예측
y_pred_gb = gb_model.predict(X_test)

4. 모델 평가

모델의 성능을 평가하기 위해 여러 지표를 사용할 수 있습니다:

  • 정확도(Accuracy): 전체 예측 중 올바르게 예측한 비율.
  • 정밀도(Precision): 양성 예측 중 실제 양성인 비율.
  • 재현율(Recall): 실제 양성 중 올바르게 예측한 비율.
  • F1 점수: 정밀도와 재현율의 조화 평균.
from sklearn.metrics import accuracy_score, classification_report

# 정확도 계산
print("Random Forest Accuracy:", accuracy_score(y_test, y_pred))
print("Gradient Boosting Accuracy:", accuracy_score(y_test, y_pred_gb))

# 분류 리포트
print(classification_report(y_test, y_pred))

5. 하이퍼파라미터 튜닝

모델의 성능을 높이기 위해서는 하이퍼파라미터 튜닝이 필수적입니다. GridSearchCV 또는 RandomizedSearchCV를 사용하여 최적의 파라미터를 찾을 수 있습니다.

from sklearn.model_selection import GridSearchCV

param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, 7],
}

grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

print("Best parameters found: ", grid_search.best_params_)

6. 결과 해석 및 활용

모델의 결과는 단순한 예측을 넘어서서, 의사결정에 큰 영향을 미칠 수 있습니다. 예를 들어, 랜덤 포레스트의 feature_importances_ 속성을 활용하면 어떤 변수가 예측에 가장 큰 영향을 미쳤는지 확인할 수 있습니다.

import matplotlib.pyplot as plt

feature_importances = rf_model.feature_importances_
plt.barh(X.columns, feature_importances)
plt.xlabel("Feature Importance")
plt.ylabel("Features")
plt.title("Feature Importance in Random Forest")
plt.show()

7. 결론

랜덤 포레스트와 그래디언트 부스팅을 사용하여 의료 예측 분석 모델을 구축하는 것은 복잡하지만 매우 보람 있는 과정입니다. 이러한 모델은 의료진이 환자의 결과를 예측하고 치료 방안을 결정하는 데 큰 도움이 될 수 있습니다. 데이터 전처리, 모델 학습, 하이퍼파라미터 튜닝 등을 통해 정확도를 높일 수 있으며, 최종적으로는 환자의 건강을 개선하는 데 기여할 수 있습니다.

참고문서

728x90
반응형