캐글필사 Multi-Class Prediction of Cirrhosis Outcomes

Sooin Yoon·2025년 3월 23일

google colab link : 링크텍스트

Your Goal: For this Episode of the Series, your task is to use a multi-class approach to predict the the outcomes of patients with cirrhosis.
이 시리즈 에피소드의 목표는 작업은 다중클래스분류 방식으로 예측하는 것 간경화를 가진 환자들의 예후(결과)를 예측하는것
간경변증 환자의 임상 데이터를 활용하여
환자의 향후 상태(사망(D) / 치료 중(C) / 간이식(CL))를 예측하는 다중 클래스 분류 문제

Evaluation

Submissions are evaluated using the multi-class logarithmic loss. Each id in the test set had a single true class label, Status. For each id, you must submit a set of predicted probabilities for each of the three possible outcomes, e.g., Status_C, Status_CL, and Status_D.
제출은 다중클래스 로그손실를 사용하여 평가되어진다. 테스트셋의 각 id는 하나의 실제 클래스 라벨을 가지고 있으며, 각 id에 대해 세가지 가능성 결과에 대한 예측 확률 세트를 제출해야한다.

The metric is calculated

logloss=1Ni=1Nj=1Myijlog(pij)\text{logloss} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{M} y_{ij} \log(p_{ij})

where
N is the number of rows in the test set, 테스트셋의 행의 수
M is the number of outcomes (i.e., 3), 예후결과의 수
log is the natural logarithm, 자연로그
y₍ᵢⱼ₎ is 1
if row i has the ground truth label j and 0 otherwise,
i번째 샘플의 정답 클래스가 j인 경우 1 그렇지 않으면 0
and p₍ᵢⱼ₎ is the predicted probability that observation i belongs to class j.
i번째 샘플의 클래스 j에 속할 예측 확률

The submitted probabilities for a given row are not required to sum to one because they are rescaled prior to being scored (each row is divided by the row sum).
주어진 행에 대한 제출된 확률은 각 행이 1이 될 필요는 없다. 왜냐하면 그들은
채점전에 각 행에 그 합으로 나눠져 정규화하기 때문에
In order to avoid the extremes of the log function, predicted probabilities are replaced with max(min(p,1−10−15),10−15).
로그함수의 극단적인 값(무한대/음의 무한대)를 피하기 위해서 예측된 확률 값은 다음과 같이 값의 범위를 제한하여 대체된다

  • log_loss는 모델의 다중 클래스 확률 예측 정확도를 평가하는 지표, 낮을수록 더 좋은 모델
  • 즉, x_test에서 예측한 확률과 실제정답인 y_test를 비교해서 예측이 얼마나 정답에서 벗어났는지(손실)를 계산하는 것
  • 왜 predict이 아닌 precit_proba를 사용하는가? 단순이 맞췄는지 틀렸는지가 아닌 예측 확률이 얼마나 정답에 가까운지를 보는거라 확률기반예측인 predict_proba 필요

EDA (탐색적 데이터 분석)

전체 데이터 수: 418개 (origin.csv)
결측치 존재 → 특히 Copper, Cholesterol, SGOT 등에서 많음
타겟(Status) 분포:
C (치료 중): 약 XX%
CL (간이식): 약 XX%
D (사망): 약 XX%
주요 피처 특징:
Stage, Bilirubin, Albumin, Prothrombin 등은 Status와 관계가 뚜렷
증상 관련 변수들(Ascites, Edema, Spiders)도 중요한 신호

Optuna

: 자동 하이퍼파라미터 튜닝 도구

  • 머신러닝 모델의 성능을 높이려면 learning_rate, max_depth, n_estimators와 같은 하이퍼파라미터를 잘 조졸해야해
  • 이걸 수동으로 찾기엔 너무 힘들고 시간이 오래 걸려서
  • optuna는 자동으로 좋은 조합을 찾아주는 ai 도우미

Dataset

  • id : 환자식별자(고유값, 분석에 직접사용되지 않고, index 활용)
  • 'N_Days' : 치료 시작후 관찰된 일수(시간기반변수, 생존 분석 관점에서 중요할수 있음)
  • 'Drug': 약물 치료 여부
  • 'Age' : 환자나이
  • 'Sex' : 성별(남/여)
  • 'Ascites': 복수 유무(yes/no), 복수가 있으면 간경변이 진행된 상태로 봄
  • 'Hepatomegaly' : 간비대유무(간이 커진 상태, 간 기능 이상 또는 질환 진행을 나타냄)
  • 'Spiders' : 혈관종 유무(spider angioma), 간 질환에서 흔히 나타나는 피부증상
  • 'Edema': 부종 여부, 간 기능 저하 또는 저알부민혈증과 관련됨
  • 'Bilirubin' : 빌리루빈 수치(간 기능 지표), 간 기능 저하 시 증가, 상태 예측에 핵심변수
  • 'Cholesterol' : 콜레스테롤 수치, 간 기느 이상 시 비정상적 변화 가능
  • 'Albumin' : 알부민 수치(간 건강관 관련), 간에서 합성되므로 수치가 낮을 수록 기능 저하 의미
  • 'Copper' : 구리농도, 윌슨병 같은 질환에서 중요, 간 질환 진행에더 연관가능
  • 'Alk_Phos' : 알칼리성 인산분해효소 수치, 간담도계 질환에서 상승, 간 손상 지표 중 하나
  • 'SGOT' : AST 수치, 간세포 손상 시 상승 ,ALT와 함께 보통 활용됨
  • 'Tryglicerides' : 중성지방 수치, 간 기능 이상 또는 대상 이상 시 변화 가능
  • 'Platelets' : 혈소판 수, 간경변이 진행되면 혈소판 수치 감소 가능
  • 'Prothrombin' : 프로트롬빈 시간(혈액응고능력), 간 기능 저하시 증가, 생존 예측에서 매우 중요할 수 있음
  • 'Stage': 질환진행단계(1~4단계추정), 진행단계가 높을수록 예후가 나쁨 핵심 변수 중 하나
  • 'Status(target) : C(Censored) 아직 사망하거나 간이식을 받지 않고 치료 중인 환자, 생존 상태지만 미래는 불확실, CL(Censored with Liver Transplant) : 환자가 간이식(Transplant)를 받은 경우이며 사망의 아님, D(Death): 환자가 사망한 경우이며 가장 심각한 결과

사용 모델

Ensamble 모델 중 하나인 VotingClassifier 그 중에서 soft voting에 대한 것
VotingClassifier?

  • 여러 개의 서로 다른 모델을 결합해서 더 강력한 예측 성능을 얻기 위한 앙상블 기법
  • voting='soft'는 각 모델이 예측한 클래스 확률 proba를 평균내서 최종 예측을 만든다는 것 ex) [0.3,0.7], [0.2,0.8] -> 평균 [0.25, 0.75] -> 1 보통 soft가 성능이 더 좋은 경우가 많음
  • voting='hard'는 각 모델이 찍은 클래스(label)의 다수결 ex) [0,1,1] -> 1

Lesson Learned

  • predict_proba()와 log_loss의 연결 이해
  • Optuna 튜닝 흐름이 처음엔 어려웠지만, 반복해서 보니 익숙해짐
  • VotingClassifier로 앙상블하면 단일 모델보다 안정적
  • EDA를 꼼꼼히 해둬야 모델 성능이 설명 가능해짐

0개의 댓글