1학년때 했던거라 부족함이 있을수 있습니다.

PLM data 활용한 질병 예측 시스템 연구
Final Report
질병 예측을 위해 사용할 data set에 대한 Modeling Evaluation

0.Decision Tree Modeling을 위한 기초작업 Dataset Target Attribute가 특정 Class에 편향되어 있음을 확인. Class (0or1)의 비율을 조절하여 dataset을 추출해, 더 나은 decision tree Modeling.

I. 상관계수의 절댓값을 바탕으로 Modeling에 사용할 Attribute 선정 : 1차 선정 Modeling에 사용할 Attribute들을 선정함에 있어, 몇 가지의 방법 중 ‘Filter Approach’중 하나인 상관계수를 사용. 상관계수 중 Pearson 방식을 사용, 그 절댓값의 순위를 바탕으로 5개의 Attribute를 선정.

II. Entropy, Information Gain 바탕으로 Node 순서 결정 및 1 Modeling (Training : Test = 5:5) 선정한 5개의 Attribute가 적어도 한 번씩 분류 기준으로 쓰일 수 있는 최소 깊이인 Depth5 1차 모델링. 이때, Attribute들의 Entropy Information Gain을 비교. (Training Set : Test Set= 5 : 5)

Ⅲ. Decision Tree accuracy를 바탕으로 sweet spot 찾기 Training set을 바탕으로 수립한 decision tree accuracy를 각 depth 별로 계산. 이후, 같은 model test set을 넣어 각 depth accuracy를 계산. accuracy를 표로 작성하여 이 표를 x축이 depth, y축이 accuracy인 직선그래프로 나타내어 decision tree sweet spot을 찾음.

Ⅳ-1. 모델&그래프 해석Fitting Graph를 보면 Training & Test dataset 모두 Node depth <=2일 때 일정한 Accuracy를 갖는데 그 이유는 수립된 1차 모델이 Node depth <=2에서 leaf node 가 모두 0으로 labeled되기 때문. 이후, 모델 복잡도가 높아질수록 모델이 Training set을 잘 반영하는 반면, Node depth = 3을 기점으로 Test set Accuracy 증감이 변함. 본 보고서에서는 그 기점인 node depth = 3 SweetSpot이라 간주하고 가지치기를 실시.

Ⅳ-2. 과적합 판단 후 조정 모델링 초기 단계에서 기준에 따라 사전 가지치기를 진행한 모델을, 파악한SweetSpot을 토대로 node를 제한하여 1차 가지치기를 진행. 성능을 향상시키지 않는 불필요한 node에 대해 2차 가지치기를 진행하여leaf node 수를 줄임으로써 유용성을 키움.

.  Class label 및 모델 확률화 앞가지치기를 통해 완성된 모델의 각 leaf node에서 '심장병에 걸림' (TenYearCHD = 1) probability를 구하고 그 probability 0.5를 기준으로 class label을 분류함.

Ⅵ. Model Evaluaion 1)예측 값과 실제 값을 비교해 record 4가지 경우로 나누어 confusion matrix를 구함. 각각의 비율을 계산하여 예측의 정확성을 판단. 2) precision Recall 값을 구해 F-measure을 계산. 여기서 recall Precision을 동일하게 중요하다고 판단하여 β의 값을 1로 설정. 3) Patientslikeme는 심장병에 걸릴 것이라고 예측한 고객에 대해, 제약회사, 병원 등과 협력하여, 낮은 가격으로 심장병 예방 및 체질 개선에 대한 서비스 또는 운동 및 식습관 개선 프로그램을 제공. 이를 바탕으로 서비스의 가격과 cost를 책정해 cost-benefit matrix를 구하고, 각 확률과 값을 곱해 더해주어 기댓값을 구함.

. ‘질병코드 data set’을 이용한 연관성 분석 앞서 추출한 '심장병 환자 data set'에 대한 decision tree를 통해 심장병 여부를 예측에 더 나아가 '질병코드 data set'을 연관성 분석을 통해 여러 종류의 질병을 예측 모델링을 실시.

0. Decision Tree Modeling 을 위한 기초작업

우리의 데이터에 “Class Imbalance Problem”이 있음을 발견하였고 불균형을 해소하여 보다 나은 의사결정나무를 만들기 위해 전체 데이터셋 중 “Target attribute(10년이내 심장병 발병여부) = 1”의 비율을 적절히 맞추어 추출해냈다. Target Attribute 비율 : 517/3850 = 0.134286 (추출 전) , 517/1577 = 0.327838 (추출 후)

I. Pearson 상관계수 절댓값을 바탕으로 Feature Attribute 선정 : 1차 선정

<Target Attribute에 대한 나머지 15 Attribute Pearson 상관계수 절댓값>

II. Entropy, Information gain* 바탕으로 Node 순서 선정 및 1 Modeling(Training : Test = 5:5)

분기마다 5개의 Attribute에 대한 Information Gain을 구해서 1순위 Attribute를 분류기준으로 사용. ( I,II :각각의 분류 기준은 데이터분석 툴(Brightics Studio)Best Split 기준을 참고하여 결정함.)

 

결정함.)

* 계산 예시) <1Age”> ChildNode1 Entropy : -(73/373)*LOG(73/373,2)-(300/373)*LOG(300/373,2) = 0.713 /// ChildNode 가중 Entropy(가중평균) : (373/788)*0.713 + (415/788)*0.996 = 0.862042 /// Information Gain = 0.921 – 0.862042 = 0.058958

의사결정나무 1차 모델

III. Decision Treeaccuracy를 바탕으로 sweet spot 찾기

Training set으로 만든 의사결정나무의 accuracy를 측정하였다. 예를 들면, 5-11 node ‘sysBP<=169.25’이다. node로 나눈 결과 전체 140개의 data sysBP169.25 이하인 사람은 125, 그 중 10년 뒤 심장병을 앓은 사람은 42, 그렇지 않은 사람은83명이었다. sysBP169.25 초과인 사람은 15, 그 중 심장병을 앓은 사람은 11, 그렇지 않은 사람은 4명이었다. 이를 바탕으로 sysBP169.25 이하일 경우, 심장병을 앓지 않을 것이고, sysBP169.25초과일 경우에 심장병을 앓을 것이라고 예측할 수 이는데 이것만 가지고 accuracy를 계산하면 (83+11)/140=0.6714이다. 위와 같은 방식으로 depth5일 때의 모든 node에 대한 accuracy를 계산하면 0.7398이 나온다. 다른 depth accuracy를 계산한 과정은 다음과 같다.

그 후 의사결정나무에 holdout data, test set을 넣어 다시 accuracy를 측정하였다. 마찬가지로 5-11로 예를 들면, training set을 가지고 예측한 model에서는 sysBP169.25 이하일 경우, 심장병을 앓지 않을 것이고, sysBP169.25초과일 경우에 심장병을 앓을 것이라고 예측했지만 test set을 넣었을 때는 sysBP169.25 초과일 경우 심장병을 앓는 사람이 더 많음을 볼 수 있다. 이 때의 accuracy(83+8)/141=0.6454이고 같은 방식으로 depth=5 accuracy를 계산하면 0.6865가 나온다. 다른 depthaccuracy를 계산한 과정은 다음과 같다. (자세한 사항은 첨부 파일 참고)

위에서 계산한 결과를 표로 정리하면 다음과 같다.

Depth Accuracy on Training set Accuracy on Test set
1 0.6637 0.6810
2 0.6637 0.6810
3 0.7030 0.7089
4 0.7239 0.6956
5 0.7398 0.6865

x축을 depth(모델 복잡도), y축을 accuracy라 하고 training settest set accuracy를 그래프로 나타내면 다음과 같고, over-fitting이 시작되는 sweet spot depth3일 때라는 것을 알 수 있다.

. 모델 & 그래프 해석 / 과적합 판단 후 조정하기

 그래프를 보면 Training & Test dataset 모두 Node depth <=2 일때 일정한 Accuracy를 갖는데, 그 이유는 1차적으로 수립된 모델이 Node depth <=2 에서 leaf node 가 모두 0 으로 labeled 되었기 때문이다. , Target 값을 모두 0으로 예측하니 동일한 accuracy를 얻게 된 것이다. 다음으로, 모델 복잡도가 높아질수록 모델이 Training dataset을 잘 반영하는 것을 볼 수 있는 반면, Node depth = 3 을 기점으로 Testdataset Accuracy 증감이 변하는 것을 볼 수 있다. 이는 모델이 Training dataset에 과적합되어 Test dataset의 유의미한 분류 예측이 방해되었다는 의미로, 본 보고서에서는 그 기점인 node depth = 3 SweetSpot이라 간주하여 가지치기를 실시하였다.

모델 1
모델 2

적절한 node depth와 그 자료의 수가 정해졌을때 주로 사용되는 기법 중 하나인 'Cost-Complexity pruning(사후 가지치기의 일종)'의 개념은 다음과 같다.

이를 통해 모델 수립에는 정확도&불순도 뿐 아니라 구조의 복잡도도 중요한 요소임을 다시금 확인할 수 있다. 모델 2의 예측 정확도는 약 0.7085 로, Min Sample Splits, Min Sample leafs, Max leaf nodes, Min Impurity Decrease 등의 요소를 고려해 추가적인 가지치기를 해도 예측 정확도가 더 향상되지는 않지만 (오히려 감소한다.) 모델의 단순화를 통해 그 유용성을 더욱 확보할 수 있을 것으로 보인다. 다음은 한번 더 가지치기하여 단순화한 모델이다.

모델 3) 최종

알파를 0.05 로 두고 모델3 과 모델2 CC를 비교해보면,

CC(모델3) - CC(모델2) = 0.05 (4-8) = -0.2

, 0.2 만큼 모델의 비용 복잡도가 감소했음을 알 수 있다.  

최종 모델의 Max depth = 3, Max Leaf node = 4, Min impurity Decrease = 0.09 이며, 모델 수립에 사용된 설명 Attribute [ Age, SysBP, Male ] 이다. Attribute Feature Importance age = 0.74, sysBP = 0.15, male = 0.12 이다.

.  Class label 및 모델 확률화

전체 training data set (788) 10년 후심장병에 걸리지 않음’ (TenYearCHD = 0) 523, ‘심장병에 걸림’ (TenYearCHD = 1) 265.

* Majority class는 심장병에 걸릴지를 예측하는 모델이므로 TenYearCHD = 1 으로 설정.

1-1.        전체 중 Age ≤ 48.5 로 분류된 data set ‘0’값은 300, ‘1’ 값은 73.

Probability = 73/(300+73) = 0.1957

P(TenYearCHD = 1) 0.5 이므로 leaf node class label TenYearCHD = 0

1-2.        전체 중 Age 로 분류된 data set sysBP≤122.75 로 분류.

2-1.        sysBP≤122.75 로 분류된 data set ‘0’값은 72, ‘1’ 값은 33.

Probability=33/(72+33) = 0.31430.5이므로 leaf node class label TenYearCHD = 0

2-2.        sysBP≥122.75 로 분류된 data set male=0 으로 분류.

3-1.        male=0으로 분류된 data set ‘0’값은 72, ‘1’ 값은 33.

Probability=77/(100+77)=0.4350≤0.5이므로 leaf node class label TenYearCHD = 0

3-2.        male=1로 분류된 data set ‘0’값은 51, ‘1’값은 82.

Probability=82/(51+82)=0.6165 0.5이므로 leaf node class label TenYearCHD = 1

Ⅵ. Model Evaluation

(1) Confusion matrix

True positive: 심장병에 걸릴 것이라고 예측, 실제로도 걸린 경우 -> 88

False positive: 심장병에 걸릴 것이라고 예측, 실제로는 아닌 경우 -> 66

False negative: 심장병에 걸리지 않을 것이라고 예측, 실제로는 걸린 경우 ->164

True negative: 심장병에 걸리지 않을 것이라고 예측, 실제로도 걸리지 않은 경우 -> 471

  positive Negative Total
Yes 88 66 154
No 164 471 635
Total 252 537 789

각각의 비율을 구해보면 다음과 같다.

Tp rate= 88/(88+164)= 0.35 = Recall  

Fp rate= 66/537 =0.12

Fn rate= 164/252 =0.65   

Tn rate= 471/537 =0.88 = Specificity

(2) F-measure계산

Precision=TP/(TP+FP)=88/(88+66)=0.57

F=measure=2*precision*recall/(precision+recall)=2*0.57*0.35/(0.57+0.35)=0.43

(Recall Precision이 동일하게 중요하다고 판단하였음)

Expected value 계산

Patientslikeme는 심장병에 걸릴 것이라고 예측한 고객에 대해, 제약회사, 병원 등과 협력하여, 낮은 가격으로 심장병 예방 및 체질 개선에 대한 서비스 또는 운동 및 식습관 개선 프로그램을 제공한다. 이 서비스의 가격은 $200이고, 서비스를 준비하는 cost$100으로 한다. , 분석한 결과를 토대로 해당 회원에게 전화해, 심장병에 걸릴 확률을 말해주고 서비스를 소개하고 구매에 이르는 데 필요한 전화, 이메일의 비용을 $1이라고 한다. (서비스는 매우 합리적인 조건이므로, 심장병에 걸릴 것이라고 예측한 사람은 모두 받아들이는 것으로 가정한다.) 따라서 cost-benefit matrix는 다음과 같다.

. ‘질병코드 data set’을 이용한 연관성 분석

 앞서 진행한 심장병 환자 data set’을 통해 의사 결정 나무를 추출하였다. 의사 결정 나무를 통하여 한가지 질병에 대한 질병 여부를 예측하였고 이에 더 나아가 연관성 분석을 통해 여러가지 질병에 대한 질병 여부를 예측할 수 있다.

질병코드 data set’은 가입자 일련번호를 통해 한 명의 사람이 어떤 질병에 대해 진료를 받았는 지에 대한 정보를 알 수 있다. 동일한 가입자 일련번호 내에서, 주상병코드와 부상병코드를 통해 질병A와 질병B가 동시에 발생할 확률인 지지도, 질병A가 발생한 사람 중에서 질병B가 발생한 사람의 비율인 신뢰도, 질병A와 질병B가 동시에 발생할 확률과 독립적으로 발생하는 확률을 비교하는 향상도를 통해 질병 간 연관성을 분석하여 앞으로의 질병을 예측할 수 있는 모델을 구축한다.

References (no limit)

 


해당 과정은 수업때 교수님께서 Entropy를 엑셀로 직접 계산해 풀 것, 그리고 모델은 의사결정나무로 할 것이라는 제한을 두셔서 Accuracy가 높게 나오진 못한 것 같습니다.

다음번에는 같은 주제에 대해 이러한 제한을 두지 않고 더 많은 방법으로, 다양한 모델을 비교해가며 Accuracy를 높이는것만을 위해서도 프로젝트를 진행해보도록 해보겠습니다.

 

+ 내용추가)

 

아래 링크는 본문의 내용과 같은 주제로 진행한 프로젝트 결과인데요, (=만성질환 =>당뇨병)

* 주제만 같을뿐 사용한 툴, 데이터의 전처리방식, 사용된 모델 등 프로젝트의 내용은 전혀 다릅니다!

제약이 많았던 2학년때의 프로젝트 이후, 제약 없이 진행한 3학년때의 프로젝트 결과입니다!

✨A.I.D.D, 최우수상 수상! 2021, AI 당뇨병 발병 예측 데이터톤 참여, 시상식 후기 <전국구 132팀중 최종 2등>✨

 

✨A.I.D.D, 최우수상 수상! 2021, AI 당뇨병 발병 예측 데이터톤 참여, 시상식 후기 <전국구 132팀중 최

안녕하세요! 시험기간이기도 하고, 이래저래 진행되는 프로젝트나 일정이 많아 오랜만에 인사드리게 되었네요. 오늘의 소식은 전국구 데이터톤! Artificial Intelligence Diabetes Datathon, AIDD -인공지능

checherry.tistory.com

 

+ Recent posts