본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
연구 활동/폐암 예측 프로젝트

[2022 동계 인턴십]암예측 5

by 꿀먹은데이터 2022. 2. 19.

이번에는 데이터를 총 3분류로 나누어서 진행했다.

data1은 암 관련 phenotype ( 예를 들어 성별, 음주량, 흡연량, 나이 등등)만 진행했을 때의 AUC값

data2는 KCPS의 genotype으로 유전적인 피처(16955개의 피처를 갖고있다.)로만 진행했을 때의 AUC값

data3은 phenotype에 genotype을 더했을 때의 AUC값을 구하려고 진행했다.

data1=pd.read_csv('./phenotype_1000.txt',engine="python",sep=" ")
data2=pd.read_csv('./KCPS_r2_0.01_1000.csv')

data1의 데이터프레임
data2의 데이터프레임

for i in range(2,15190):
    data2.columns.values[i]=i

data2의 칼럼에 숫자를 부여하여 진행하였고, data1에서는 이전 포스팅에서의 feature_importance와 내가 생각했을 때 중요하다고 생각하는 변수를 넣었다.

data1=data1.loc[:,['LUNG','FID','AGE_B', 'SMOK_B', 'ALCO_B','EXER_B','HT_B', 'WT_B', 'WAIST_B', 'SBP_B', 'DBP_B', 'CHO_B','LDL_B', 'TG_B', 'HDL_B', 'FBS_B', 'GOT_B', 'GPT_B', 'GGT_B', 'URIC_B','BIL', 'WBC', 'CREAT','SEX1', 'CRC']]

data3의 경우는 data1과 data2를 합쳐 진행하였다.

data3 = pd.concat([data1,data2],axis=1)
y_df = data1.iloc[:, 0]
data1.drop('LUNG',axis=1,inplace=True)
X_df = data1

암 중 LUNG을 가지고 진행하였으며 전처리를 따로 하지 않고 진행해봤을 때의 AUC값을 비교하려고 한다.

 

train과 test값은 8:2로 나눴고, lasso를 사용하여 약 17000개의 피처 중 약 400개를 골랐다.

lasso = Lasso(alpha=0.001, max_iter=100000).fit(X_train, y_train)

print("훈련 세트의 정확도 : {:.2f}".format(lasso.score(X_train, y_train)))
print("테스트 세트의 정확도 : {:.2f}".format(lasso.score(X_test, y_test)))
print("사용한 특성의 수 : {}".format(np.sum(lasso.coef_ != 0)))
print("사용한 max_iter : {}".format(lasso.n_iter_))

뿐만 아니라 StratifiedKFold를 통해 한번 더 검증을 하였다.

 

진행된 모델로는 Random Forest, Decision Tree, Adaboost, XGBoost, LGBM으로 진행했다.

결과값은 이렇게 나왔으며 상당히 낮은 AUC값을 갖게되어 문제점을 생각해봤다.

 

문제점

첫번째 , Lasso를 진행했을 때, 최적의 alpha(여기서는 lambda를 뜻한다.)가 어떻게 나오는지에 대한 고민이 필요하다.

또한 방법론적으로 Clinical(phenotype에서의 피처)과 합친 후의 데이터프레임에서 train과 test를 분리 후 lasso를 구하는 것이 맞는지에 대한 고민이 필요하다.

 

두번째, 모델의 경우 option을 디폴트값으로 지정하고 진행을 하였지만, 앞으로는 어떤 option을 사용해야 하는지에 대한 고민이 필요하다.

이에 대해서 GridSearchCV를 써야하는지에 대한 고민을 하였다.