안녕하세요. 저는 최근 대외활동으로 알게된 팀원들과 함께 ICT프로젝트를 하고 있습니다. 빅데이터를 이용해 주식 가격을 예측하는 프로그램을 만드는 프로젝트인데요, 이번에는 그 중간보고까지의 과정을 올려보려 합니다. 처음 프로젝트를 기획할때는 주식 가격을 예측하는 알고리즘을 더 개선시키는 방법을 연구하고, 관련 논문을 작성해보는 방향으로 하려고했으나 점차 논의를 통해, 논문이 아닌 PyQt를 GUI로 하는 프로그램을 만드는 방향을 선택하게 되었습니다. 이에따라 주식 가격 예측 시스템 뿐 아니라, 보다 사용자가 실용적으로 사용할 수 있는 기능들을 추가하게 되었습니다.  

사실 저는 Tensorflow 자격증을 공부할때 LSTM을 이용한 예측 모델을 공부해본적이 있는데요, 그 때 간단하게 기본적인 모델만 배웠던것에 비해 앞으로는 관련 논문을 찾아보고, 좀더 깊이 인공지능 모델링을 학습하며 제 역량을 키울 수 있을것이라 생각합니다. 또한, SQLite, PyQt, Python, 금융권의API 등을 서로 상호작용시켜 사용하고, 하나의 완성된 프로그램을 만드는 것은 제게 귀중한 경험이 될 것이라 생각합니다.

개발 초기인 지금의 단계에서, SW에 대해 잘 모르니 많이 우당탕하며 하나씩 배워나가고 있는데요, 그 과정에서 제가 배운것이 꽤 많다는 것을 느낍니다. 예로 사소한걸 하나 말하자면 API를 다룰때 금융권은 대개의 경우 64BIT가 아닌 32BIT 프로그램을 써야하는데, 기존에 쓰던 파이썬(과 그외 프로그램)은 64BIT 였습니다. 이에 어떻게해야하나 고민하다가, 가상환경을 만들어서 그곳에 분리하여 저장을 해두고 필요할때마다 변경한다던가.., 이런 저런 오류가 날 때, 어떻게 대처해야 한다던가.. 말입니다. SW를 공부하는 사람들은 구글 검색에 익숙해져야 하며, 프로그램 설치를 어떻게 할 것인지에도 익숙해져야하고, 새로운것을 배우고 찾아보는데 익숙해져야 한다고 배웠는데 그 과정을 이번 프로젝트를 통해 몸소 겪어보고 있는 것 같습니다.

이제 설계 단계가 완성이 되었을 뿐, 개발 단계까지 끝내지는 못한 상황입니다. 9월 말 안으로 개발을 완료하고, 공모전에 제출하는것을 목표로 잡고 있습니다. 앞으로도 팀원들과 함께 으쌰으쌰하며 개발을 해보도록 하겠습니다. 파이팅!

+ 중간보고/개발설계서 뿐 아니라, 회의록을 올릴지 말지 고민이네요.. 이후 최종보고는 한번 블로그에 올릴 예정이고 개발 결과는 제 Github에 올리도록 하겠습니다. (개발 과정은 별도 계정으로 GitLab을 이용하는 중입니다) 

 

 

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

 

PLM data 활용한 질병 예측 시스템 연구
질병 예측을 위해 사용할 data set 대한 이해 분석을 위한 준비

Proposal 변경 사안

1) 기존 : PLM 환자의 질병 이력 데이터를 동시발생그룹화 기법을 통해 분석해 질병 간 연관성을 파악하고, 이를 바탕으로 분류와 계층확률추정기법을 통해 환자의 데이터를 입력하면 그에 따른 질병 발생 확률을 예측하고자 하였다.

2) 구체화 : 1. 모든 질병을 분석하기엔 어려움이 있어 연관성 분석 및 질병예측의 분석 대상을 전 세계 사망원인 1위인 '심장병'으로 특정하였다. 또한 심장 질환과 관련이 깊은 '고혈압' '당뇨병' 을 추가적으로 특정하였다. 2. 질병 예측을 위해 제시한 '분류 기법' '의사결정나무'로 구체화 하였다.

구체화에 따라, 소주제 1. '의사결정 나무를 통한 질병예측 data set으로 '심장병 환자 data set' , 소주제 2. 동시 발생 그룹화를 통한 질병간 연관성 분석의 data set으로 '질병코드 data set' 을 준비하였다.

Summary

Ⅰ. Data set에 대한 설명 미국의 환자들의 개인정보와 건강정보, 10년 뒤 심장병 발병 여부에 대한 data set‘Heart Patients’ 2002년부터 2013년까지의 국민건강보험 가입자 중 요양기관으로부터의 진료 이력이 있는 100만 명의 개인정보와 진료내역에 대한 data set진료내역정보를 사용한다.

. Cost & Benefit data set 모두 누구나 이용이 가능한 사이트에서 데이터를 구했으며, 용량이 작으므로, 구입과 저장에 대한 비용이 없고, 얻게 될 benefit은 새로운 서비스 제공이다.

. 데이터 분석을 위해 필요한 형태 Data Preparation 단계에서 해야 할 작업중 하나는 raw data를 우리의 분석 기법 및 목적에 맞게 손질하는 것이다. Attribute header나 데이터의 값이 이해하기 어려운 형태로 되어있거나 데이터의 구성이 사용할 분석기법에 적합하지 않은 경우가 있을 수 있기 때문에 이러한 요소들을 고려해봐야 한다. 여기서 우리의 두 data set에 대해 그러한 점검을 진행해본다.

. Missing value 처리 심장병환자 data set에서 결측값 처리는 범주형 변수인 ‘education’, ’BPMeds’의 결측값은 각각 최빈값으로 대체하고, 연속형변수인 ‘cigsPerDay’, ‘totChol’, ‘sysBP’, ‘diaBP’, ‘BMI’, ‘heartrate’, ‘glucose’의 결측값은 각각 자체 연산에 따라 평균값으로 대체한다. 질병코드 data set의 결측값 처리는 주상병, 부상병 코드가 둘 다 결측 값일 경우, 가입자 일련코드가 결측 값일 경우 해당 record를 삭제한다.

. 정규화 'Z-score normalization' 'Min-max Scaling' 정규화 방법 중, Min-max Scaling을 이용하기로 하며, 정규화의 전 단계로서 Outlier Detection & Removal - Carling Method을 진행해 Min-max Scaling 기법의 단점을 보완할 수 있도록 한다. 이상치를 제거한 data setReplace Missing Number 함수를 이용해 결측치를 채운 후 정규화한다. 정규화는 [ cigsPerDay, totChoi, sysBP, diaBP, BMI, heartrate, glucose ] 7 개의 연속형 attribute에 대해 진행한다. 덧붙여, 연관성 분석에 사용되는 data set attribute는 대부분 범주형 데이터로, 정규화를 생략한다

 

. Data Set 에 대한 설명

 의사결정나무에는 Kaggle에서 찾은 Heart Patients라는 data set을 사용한다. data set은 미국 환자들의 성(male), 나이(age), 교육 수준(education)의 개인정보와 현재 흡연 여부(currentSmoker), 일일 흡연량(cigsPerDay), 혈압약 복용 여부(BPMeds), 과거 뇌졸중 여부(prevalentStroke), 과거 고혈압 여부(prevalentHyp), 당뇨병 유무(diabetes), 총 콜레스테롤 수치(totChol), 수축기 혈압(sysBP), 이완기 혈압(diaBP), 체질량지수(BMI), 심박수(heartrate), 글루코스 수치(glucose)의 건강정보, 10년 뒤 심장병 발병 여부(TenYearCHD)로 구성되어 있다. 이중 나이와 일일 흡연량, 총 콜레스테롤 수치, 혈압, 체질량, 심박수, 글루코스 수치는 연속형 데이터이고 나머지는 범주형 데이터에 해당한다. PLM에서 얻은 데이터는 아니지만 이 data setattribute 중 일일 흡연량을 제외한 다른 것은 모두 수집할 수 있고 10년 뒤 심장병이 발병했는지를 알 수 있기 때문에 심장병 예측 모델을 만드는 데 적합한 data set이라고 할 수 있으며 약간의 결측 치는 있으나 4238명의 데이터를 가지고 있기 때문에 record의 수도 충분하다고 판단했다.

 연관성 분석에는 공공데이터 포털에서 찾은 진료내역정보라는 data set을 사용한다. 진료내역정보는 2002년부터 2013년까지의 국민건강보험 가입자 중 요양병원이나 요양 의원과 같은 요양기관으로부터의 진료 이력이 있는 각 연도별 수진자 100만 명에 대한 기본정보(가입자일련번호, 성별코드, 연령대코드 등)와 진료내역(주상병코드, 부상병코드 등)으로 구성된 개방 데이터로 요양기관에서 얻은 자료이기 때문에, 연령층이 높다는 단점이 있으나 우리나라의 경우 의료보험 당연지정제로 출생신고와 함께 의료보험에 가입하게 되므로 많은 사람들의 데이터가 있다는 장점이 있어 해당 data set을 선택하였다.

. Cost & Benefit

데이터에 따라 데이터 비용달라진다. 먼저, 프로젝트를 위한 data set Kaggle이라는 데이터 사이트에서 구했다. Kaggle기업 및 단체에서 데이터와 해결과제를 등록하면, 데이터 과학자들이 이를 해결하는 모델을 개발하고 경쟁하는 플랫폼이며, 누구나 무료로 데이터를 자유롭게 활용할 수 있도록 제공하고 있다. 따라서 데이터 구입을 위해 지불한 비용은 없다. 다음으로, 이 데이터셋을 저장하기 위해서 비용이 발생할 수 있다. 데이터 저장을 위해선 구글 클라우드나 네이버 클라우드와 같은 서비스를 이용한다. 구글 클라우드인 드라이브는 사진, 동영상, 파일 등을 안전하게 보관하고 공유할 수 있으며, 한 계정 당 15GB 까지는 무료로 이용 가능하다. 하지만, 우리가 가지고 있는 data set188KB 밖에 되지 않기 때문에 데이터 보유에도 비용이 들지 않는다. 또한, 모두에게 공개되어 있는 데이터 셋이므로, 유출되었을 때 책임져야 할 비용도 없다.

데이터를 응용했을 때 얻을 수 있는 benefit은 새로운 서비스를 제공할 수 있다는 것이다. 이 데이터셋에는 환자가 입력한 성별, 교육수준, 하루에 피는 담배의 양, BMI지수 등의 정보가 담겨 있다. 이를 이용해 PatientsLikeMe는 심장병의 발병을 예측할 수 있는 새로운 플랫폼을 만들 수 있다. 기존의 단순히 치료법과 증상을 공유하는 사이트에서, 더 나아가 발병의 가능성을 예측해주는 서비스는 분명 PLM에 도움이 될 것이다.

연관성 분석을 위한 질병코드 data set은 마찬가지로 모든 사람이 자유롭게 데이터를 활용할 수 있는 공공데이터 포털 사이트에서 구했다. 또한, 크기는 402,623KB이기 때문에 데이터 구입 및 보유 비용 모두 들지 않는다. 이 데이터에는 한 개인의 성별, 연령, 앓았던 질병 등을 알 수 있다. 이를 통해 각 질병 간의 연관성을 분석해 합병증을 찾을 수 있을 것이다.

. 데이터 분석을 위해 필요한 형태

1. 의사결정 나무 기법_ 심장병 환자 data set

 Raw data는 분석 기법과 목적에 따라 다소 다르게 수집될 수 있기 때문에, 우리가 이를 그대로 사용할 경우 분석 도중 오류가 발생하거나, 분석작업이 매우 복잡해 지거나, 오류가 많이 발생하는 모델이 수립되는 등의 문제가 야기될 수 있다. 따라서 다음과 같은 점검의 필요성을 인지하고 점검을 수행해보았다.

점검사항 1) Attribute 이름이 불명확하여 어떤 것을 의미하는지 한눈에 안보이는 것이 있는가?[1]  

-> 몇 개의 attribute headerinformation-rich하지 못하다.[1] 따라서 우리는 이들의 이름을 다시 붙여줄 필요가 있다.[1] 이때 Camal 표기법을 쓰기로 하자. [1]

prevalentStroke -> PastStroke , prevalentHyp -> PastHyp, diabetes -> PastDiab, heartrate -> HeartPerMin

점검 사항 2) 의사결정 나무의 특성상 통합할 데이터는 없는가?

-> 우리가 사용할 의사결정 나무 기법은 데이터를 분류할 때 교육수준 “2 이하”, “2 초과와 같이 두 갈래로 나누게 되기 때문에 그 안에서 12가 나눠져 있는 것은 무의미 하며 오히려 복잡성만 증가시킬 수 있다. 1,2,3,4 는 숫자의 크기에 따라 교육수준이 순차적으로 증가하는 특징이 있기 때문에 교육수준을 질병 예측의 요소로서 고려함에 있어서 (1,3), (2,4)와 같이 묶는 것은 바람직하지 못하다. 따라서 1 20으로, 341로 묶는 것을 고려해볼 수 있다.

2. 연관성 분석 기법_ 질병코드 data set

점검사항 1) 데이터의 규모가 우리의 분석 능력을 벗어나지 않는가?

-> 데이터의 개수가 100만 줄 이상이고 attribute의 수도 많아서 우리의 분석 능력을 벗어난다고 생각했고 이에 따라 다음과 같은 절차를 수행할 필요성을 인지했다.

1. Attribute를 성별, 나이, 일련번호, 질병코드(주상병, 부상병) 등으로 한정

2. 타겟 질병의 코드를 파악 -> 전체 data set target 질병만을 필터링

3. 그 질병을 앓았던 환자들의 일련번호를 필터링 -> 그 환자들의 질병 목록만을 필터링

점검사항 2) 데이터 값들이 이해하기 쉬운가?

-> Attribute는 보고 바로 이해하기에 문제가 없었지만, 질병 코드 attribute의 데이터가 모두 코드 형식으로 되어있어서 알아보기 어려웠다. 이에 따라 질병 코드 검색 결과를 바탕으로 코드를 모두 질병명으로 바꿀 필요성을 인지했다.

. Missing value 처리

 응답자가 의도적으로 응답을 누락하거나 의도하지 않았지만 단순 누락이 되는 경우 결측값이 발생한다. 결측값이 발생한 행을 제거하고 데이터 분석을 진행할 경우 정보에 편향 될 수 있는 가능성을 가지게 된다. 또한 중요한 정보를 담고 있을 수도 있는 그 행의 다른 변수 값도 사라지기 때문에 모델 생성 과정에서 중요한 정보를 놓칠 수 있는 위험이 생긴다.

1) 결측 데이터의 종류

- 완전 무작위 결측 : 어떤 변수 상에 결측 데이터가 다른 변수와 연관이 없다면 이 데이터는 완전 무작위 결측 이라고 한다. 이러한 경우 단순 무작위 표본추출을 통해 결측값을 채울 수 있다.

심장병 환자 data set에서의 완전 무작위 결측 : education, BMI, HeartPerMin, glucose

- 무작위 결측 : 어떤 변수 상에 결측 데이터가 관측된 다른 변수와 연관되어 있지만 그 자체의 비 관측된 값들과는 연관되어 있지 않은 값

심장병 환자 data set에서의 무작위 결측 : currentSmoker – cigsPerDay / BPMeds - PastHyp, PastStroke / PastDiab – totChol / sysBP – diaBP

- 비 무작위 결측 : 완전 무작위 결측 또는 무작위 결측이 아닌 값

2) 결측값 처리 방법

- 예측 모델 : 채우고자 하는 변수와 다른 변수들 간의 관계를 이용한다. 소규모 데이터에는 변수들 간의 관계를 알아내고 다른 외부데이터를 들여와서 관계를 파악해 결측값을 채울 수 있지만 크기가 큰 빅데이터에서는 힘들다.

- 삭제 : 한 개 이상의 결측값을 가진 record를 제거하는 방법. 하지만 표본의 크기를 축소시켜 통계적 유의성을 감소시킨다. 또한 통계적 편향이 생기게 된다.

- 대치 : 결측값을 최빈값, 중앙값, 평균값 등을 이용해 채우는 방법. 주로 연속형 변수 형태의 결측 값은 평균값으로, 범주형 변수 결측값은 최빈값으로 채우기도 한다.

3) 심장병 환자 data set에서의 적용

  attribute를 대치 방법을 통해 연속형 변수 결측 값은 평균값으로, 범주형 변수의 결측 값은 최빈값으로 채우기로 한다.

- education : 범주형 변수로, 최빈값인 ‘1’로 대체한다. 이 경우에 전체 data1~4까지의 비율을 고려하여 결측값을 대체하는 방법도 고안했으나, 각각 입력해야 하고, 어느 row에 어떤 수를 입력해야 하는 지에 대한 어려움이 있어 최빈값으로 대체한다.

- BPMeds : 범주형 변수로 최빈값인 ‘0’으로 대체한다.

- 다음은 연속형 변수의 평균값과 대체값이다

Attribute cigsPerDay totChol sysBP diaBP BMI HeartPermin glucose
평균값 1.979 236.699 132.354 82.897 25.800 75.878 81.963
대체값 2 237 132.4 82.9 25.8 76 82

 

4) 질병코드 data set에서의 적용

주상병, 부상병 코드가 둘 다 결측 값일 경우, 가입자 일련코드가 결측값일 경우 해당 record를 삭제한다. record100만개 이상으로 충분하기도 하고, 가입자 일련번호는 대체할 수 있는 값이 없기 때문이다.

. Normalization_ 정규화

1) Standard Scaling(Z-score) VS Min-Max Scaling

 정규화란 normalized or scaled so that they are comparable, 즉 데이터를 비교하기 위해 동등한 속성(척도)를 가지게 하여 의미하는 바를 같게 하는 단계이다. 정규화는 일반적으로 'Z-score Normalization' 'Min-max Scaling'을 사용하는데, 이를 간략히 설명하면 다음과 같다.

- Z-score Normalization : Sample data가 정규분포를 따른다고 가정하고, 표준 정규분포 식을 이용하여 평균을 0, 표준편차를 1로 정규화하는 방법이다. 이 기법의 downside data point 간의 scale이 일정하지 않다는 점과, sample data가 꼭 정규분포를 따를 것이라는 보장이 없다는 데에 있다. 함부로 가정하기는 위험하기에 Z-score 기법을 사용할 때는 먼저 분포의 검정이 필요하다.

- Min-max Scaling : 데이터 범위가 크게 다를 때 유용한 방법으로, sample data가 어떤 분포를 따를 것이란 가정 없이 데이터의 왜곡을 최소화하여 0~1 사이의 값으로 표현하는 방법이다. 이 기법의 downside outlier(이상치)에 너무 취약하다는 점이다. , 데이터 하나가 눈에 띄는 이상치를 갖고 있다면 정보의 편향이 발생할 수 있어 위험하다.

 본 연구에서는 sample data가 정규 분포를 따른다고 섣불리 가정하지 않고 Min-max Scaling을 이용하기로 하며, 정규화의 전 단계로서 Outlier Detection & Removal을 통해 Min-max Scaling 기법의 단점을 보완할 수 있도록 한다. 전 과정은 삼성 SDS가 제공하는 [Brightics]를 활용한다.

2) Outlier Detection & Removal

 이상치 탐지 및 제거는 Tukey VS Carling Method , 중앙값을 기준으로 이상치를 탐지하는 방법으로, 변수의 분포를 정규 분포 형태로 가정하지 않을 때 비교적 사용하기 적절한 Carling Method를 선택해 제거하였다. 또한 multipler는 기본 설정값인 2.3을 사용하였다.

 범주형 변수인 '나이' x, 연속형 변수인 '이완기 혈압' y축으로 놓고 outlier removal 전후를 비교한 그래프이다. 눈에 띄던 outlier data가 제거되었음을 확인할 수 있다. 이완기 혈압의 이상치 뿐 아니라 15개의 모든 attribute에 대해 진행하였다.

3) Min-Max Scaling

 이상치를 제거한 data set Replace Missing Number 함수를 이용해 연속형/범주형 data의 결측치를 채운 후 정규화한다. Min-max Scaling은 범주형 데이터와 연속형 데이터의 일부(정규화가 크게 의미 없는 경우)를 제외한 [cigsPerDay, totChoi, sysBP, diaBP, BMI, HeartPerMin, glucose] 7 개의 attribute에 대해 진행했다.

Normalized Attribute
The other

덧붙여, 연관성 분석에 사용되는 data set attribute는 대부분 범주형 데이터로, 정규화가 불가능하여 생략한다.

 


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

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

 

+ 내용추가)

 

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

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

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

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

 

PLM data를 활용한 질병 예측 시스템 연구
Co-occurrence Grouping을 통한 질병 간 연관성 분석과
Class Probability Estimation을 통한 질병 발생 가능성 예측 모델 구현

. Business Problem 정의

환자들이 질병에 걸린 후에야 손을 쓸 수 있다는  PatientsLikeMe의 기존의 한계점을 극복하고 그들이 앓고 있는 질병에 연속적으로 발병할 수 있는 합병증 등을 알아내기 위해 질병 예측 모델을 도입한다. 이 모델은 환자들이 걸릴 수 있는 질병을 예측해 줌으로써 스스로 질병을 예방하고, 초기에 질병을 발견하여 성공적으로 치료할 수 있게 하는 것을 목적으로 한다.

. 사례 및 배경

프로젝트 수행의 일환으로 사례 탐색을 진행하던 중, Nature지의 자매지인 SCI급 학술지 Scientific reports에 개재된 논문을 찾았다. 이 논문을 통해서, 의료 데이터를 분석함으로써 기존에 의학계에서 밝혀지지 않았던 새로운 발견을 한 연구를 살펴본다. 이와 더불어, 이 연구의 한계점과 PLM에서는 이 한계점을 극복할 수 있음에 대하여 논의하며, 우리가 도입 하고자 하는 시스템의 가능성에 대해서 알아본다.

. 필요성

신체활동, 식습관, 흡연 및 음주 등의 생활 습관 변화로 인해 만성질환이 증가하고 있다.  특히 고혈압과 당뇨와 같은 질환은 합병증과 함께 만성질환의 형태로 발생한다. 합병증으로 인해 수명이 단축되고 사회,경제적인 손해가 막대하다. 때문에 질병이 발병하기 전에 미리 예측하여 예방하는 것이 손해를 극적으로 감소시킬 수 있다. 따라서 PLM의 데이터를 바탕으로 질병을 가지고 있는 환자에게 추후에 발병할 수 있는 합병증 등을 예측하는 서비스의 도입이 필요하다.

. Data Science Problem에서의 정의

1. PML 환자 질병 데이터를 분석하여, 빈번 규칙을 찾아 질병간 연관성(합병증)을 파악한다.

2. 질병 이력을 입력하면, 데이터 기반으로 합병증 발생 가능성을 확률화한 모델을 구현한다.

DSP 세부 목표1, 연관성 규칙 발견을 위한 기법인동시 발생 그룹화(Co-occurrence)’를 적용해 수행한다. 본 수행에선 질병 간의 연관 정도, 강도 등 또한 파악할 것이며, 연관 규칙을 만족하는 질병을 연관성이 있다고 인정한다.

DSP 세부 목표2, ‘분류와 계층 확률 추정(Class Probability)’ 기법을 적용해 수행한다. 이 기법은 개인을 분류하는 작업이지만, 점수화 모델(계층 확률 추정)을 적용하면 개인이 속할 계층을 결정하는 대신 계층에 속할확률을 계산하여 나타내준다. 본 수행에선 DSP 세부목표1에서 얻은 질병간 연관성 데이터를 기반으로 확률 추정을 진행할 것이다.

. 기대 효과

질병을 예측함으로써, 환자입장에서는 경제적, 신체적 부담을 줄일 수 있고, PLM입장에서는 더 나은 서비스를 제공함으로써 수익창출, 사회적 공헌을 실현할 수 있다. 병원 입장에서는 병상 부족 등의 문제를 해결할 수 있다.

. Business Problem 정의

PatientsLikeMe는 회원들이 각자의 질병과 증상을 입력하고, 치료법을 공유하며, 오늘의 상태 등을 남기는 환자들의 SNS이다. 환자들은 이 사이트에서 자신의 병에 대한 치료법을 찾아 각자의 질병을 치료해 나간다. 이런 과정에서 발생할 수 있는 문제 중 하나가 합병증이다. 2가지 이상의 질환이 동시에 또는 전후에 생기고 또한 그러한 질환이 상호 직접적인 인과관계를 생각할 수 없는 경우, 하나의 질환에서 보아 다른 질환을 합병증이라고 한다.[1] 합병증은 그 증상이 경미하여 인지가 어려운 경우도 있고, 시간이 지나면 생명에 위협이 되는 경우가 많아 조기 발견이 중요하다. 루게릭병의 경우, 환자들의 가장 흔한 사망원인은 호흡 부전으로 이는 루게릭병의 합병증에 해당한다.[2] 기존 PLM의 시스템상 환자들은 자신에게 질병이 있음을 인지한 후에야 PLM를 찾는다. 손을 쓰기엔 이미 늦은 상황을 미연에 방지하고 환자들이 추가로 걸릴 수 있는 질병을 예방할 수 있게 알려주는 질병 예측 모델을 도입하고자 한다. 질병 예측 모델은 질병 A를 앓고 있는 환자가 질병 A를 과거에 앓았던 다른 환자들이 또 어떤 질병을 앓고 있었는지를 바탕으로 어떤 질병을 조심해야 하는지를 예측하는 것을 목적으로 한다. 질병 예측 모델이 예측한 내용을 바탕으로 환자는 질병을 예방할 수 있을 것이다. 환자는 진료를 받으러 갈 수도 있을 것이고, 자신의 병을 초기에 발견할 수도 있을 것이다. 당뇨병 환자는 당뇨병 그 자체보다는 이에 수반되는 급성 합병증 또는 만성 합병증으로 사망하는 경우가 많다.[3] 심지어 당뇨병은 전 세계의 성인 11명 중 한 명이 앓고 있을 정도로 흔한 병인데다가 당뇨병에 결린 사람들 중 46%는 아직 진단을 받지 않았다고(undiagnosed) 한다.[4] 즉 약 161만 명의 사람이 자신이 당뇨라는 사실을 모르고 살고 있다는 것이다. 우리는 질병 예측 모델이 환자가 느끼는 증상을 바탕으로 합병증뿐만 아니라 자신이 아직 인지하지 못했던 새로운 질병을 예측해 줌으로써 환자가 더 성공적으로 치료를 받을 수 있게 하는 것을 목표로 한다.

PLM에서 환자는 자신의 병명뿐만 아니라 질병과 관련하여 몸에 나타나는 증상, 그 심한 정도 등을 날마다 기록할 수 있다. PLM는 다른 기업에는 없는 희귀한 정보를 가지고 있는 것이다. 그러므로 PLM에 질병 예측 모델이 도입된다면 기업이 가지고 있는 환자의 증상에 대한 데이터를 바탕으로 어떤 질병이 생길 수 있는지를 더 정확하게 예측할 수 있을 것이다.

. 사례 및 배경

 “윤덕용 교수팀(아주대병원 의료정보학과)은 한국인 100만 명을 대상으로한 빅데이터 연구를 통해 기존에 잘 알려져 있지 않은 당뇨합병증을 새롭게 발견해 주목된다. 이번에 새롭게 확인한 당뇨합병증은 바로 바이러스성 간염과 갑상선질환이다. 기존에 잘 알려진 심혈관질환, 망막질환과 같은 미세혈관질환 달리, 바이러스성 간염과 갑상선질환은 그동안 잘 알려져 있지 않아 중요하게 다뤄지지 않았지만, 이번에 중요한 당뇨 합병증임을 확인한 만큼 환자들은 유의해야할 것으로 보인다.”[5] 이처럼 데이터 분석을 진행하다 보면 기존에 의학계에서 밝혀지지 않았던 질병 사이의 새로운 관계도 찾을 수 있다. 반면, 본 연구에서 아래와 같은 한계점이 발견되었다. “We must also consider that the initial date of physician diagnosis, which we considered to be the incidence date, may be biased given the lack of narrative text in claims data to indicate when and for what duration the patients had experienced symptoms.”[6] “…we did not consider other potentially important confounding variables that may have affected disease progression, such as prescription and treatment information, smoking habits, and the general health status.”[6] , 첫 진단을 받은 날짜를 질병발생일로 간주하였고 언제부터 증상이 나타났으며 어느정도 지속이 되었는지 확인이 어렵다는 점과, 처방 및 치료법, 생활습관 등의 정보를 반영하지 못했다는 점이다. 비교적 최근의 연구임에도 불구하고 이러한 한계가 나타났다는 것으로 미루어 짐작해봤을 때, 이는 일반적인 의료 데이터를 바탕으로 진행되는 기존 연구들의 한계점으로 볼 수 있다.  PLM에서는 앞서 언급한 정보들을 환자들이 직접 입력하고 있다. 또한, 이를 바탕으로 전반적인 건강 상태도 도출이 가능하기 때문에 기존의 한계점을 극복하여 보다 정확한 분석을 바탕으로 서비스를 제공할 수 있을 것으로 보인다.

. 필요성

세계적으로 인구의 고령화, 의료기술의 발전, 생활 습관의 변화 등으로 인해 현대인의 질병구조가 만성질환 위주로 변화하고있다.[7] 고혈압과 당뇨와 같은 질환은 만성질환의 유병률이 점점 증가하고 있을 뿐만 아니라 그에 의한 합병증 또한 다양하고 심각한 경우도 많다. 만성질환의 증가는 의료비의 폭발적 증가를 초래하고 있고 이러한 의료비 재정의 압박으로 인해 치료 중심의 의료서비스에서 예방과 건강관리 서비스로의 패러다임 전환이 요구된다.[8] 고혈압과 당뇨의 합병증이 오게 되면 당뇨 망막 병증, 만성 신부전증, 뇌경색증, 심근경색을 일으킬 수 있다.[9 ,10] 당뇨와 고혈압이 이 질환들이 함께 동반되었을 경우 여러가지 합병증의 발생이 촉진되어 수명이 단축되기 때문에 합병증을 사전에 예방함으로써 사후 장애를 최소화하는 것이 중요하다.[10,11] 만성질환 관리는 신체활동, 식습관, 흡연 및 음주 등과 같은 생활습관의 개선이 필수적이어서 질환에 대한 약물 요법 뿐 만 아니라 생활습관 변화를 포함한 자가관리가 필요하다. 연구 결과에 의하면 환자들의 경험공유에 의한 자가관리는 개인적인 관리보다 자가 이행률이 높다고 한다.[7] 따라서 PLM의 환자들이 겪었던 다른 질병들을 바탕으로 연관규칙분석(Association Rule Analysis)을 수행해본다면 이를 이용해 다른 환자들의 질병을 예측하는 것이 가능하다. PLM에 질병 예측 시스템을 도입하여 환자에게 예상되는 질병을 알려준다면 스스로 자가관리 이행도를 높여 큰 피해를 축소할 수 있기 때문에 질병 예측  시스템을 도입할 필요가 있다.

. Data Science Problem에서의 정의

 본 연구의 목표는 첫째로, 환자의 과거 및 현재의 질병 이력 데이터를 통해 앞으로 발생 가능성이 있는 질병을 확률화(%)하여 알려주는 서비스의 제공이며, 둘째로 PML이 가진 방대한 환자 데이터의 질병 간 연관성을 파악해 이전까지 의학계가 알지 못했던합병증을 발견하는 데 그 의의를 둔다.

위 두 가지 목표를 위한 Data Science Problem(이하 DSP) 목표는 다음과 같이 정의된다.

1. PML 환자 질병 데이터를 분석하여, 빈번 규칙을 찾아 질병간 연관성(합병증)을 파악한다.

2. 개인의 질병 이력을 입력하면, 분석해 둔 데이터를 기반으로 합병증 발생의 가능성을 확률화하는 모델을 구현한다.

DSP 세부 목표1, 연관성 규칙 발견을 위한 기법인동시 발생 그룹화(Co-occurrence)’를 적용해 수행한다. 동시 발생 그룹화란 데이터 집합에 빈번히 나타나는 패턴을 찾는 것으로, 사전에 지정한 최소 지지도 이상의 빈발 항목 집합 전체를 찾은 후, 집합에서 최소 지지도, 신뢰도, 향상도를 모두 만족하는 강한 연관성을 갖는 것을 도출해 규칙으로 표현하는 것이다.

*지지도(support) = 모든 Data set A B가 함께 발생할 확률

*신뢰도(confidence) = A가 발생했을 때, B도 발생할 확률

*향상도(lift) = A 발생 조건이 붙은 경우와 붙지 않은 경우의 B 발생 확률의 차이 비율.

연관 규칙은 R Merge, Aggregate 등 스크립트를 이용해 직접 구현하여 찾거나, R에서 제공하는 패키지를 이용하면 더욱 간단히 찾을 수 있다. 본 수행에선 질병 간의 연관 정도, 강도 등 또한 파악할 것이며, 연관 규칙을 만족하는 질병을 연관성이 있다고 인정한다.

DSP 세부 목표2, ‘분류와 계층 확률 추정(Class Probability)’ 기법을 적용해 수행한다. 이 기법은 개인을 분류하는 작업이지만, 점수화 모델(계층 확률 추정)을 적용하면 개인이 속할 계층을 결정하는 대신 계층에 속할확률을 계산하여 나타내준다. 본 수행에선 DSP 세부목표1에서 얻은 질병간 연관성 데이터를 기반으로 확률 추정을 진행할 것이다.

이러한 DSP 세부 목표를 수행할 때 유의할 점은 Target에 대한데이터가 존재하는 Data set을 찾아야 한다는 점이다. 환자의 이력 데이터가 불완전하다면 Target으로서의 가치가 없다. 이후 데이터 분석을 진행하는데 적합한 Data set Attribute의 자세한 구성은 2차 제출에서 보고하도록 하겠다.

. 기대 효과

우선, 환자 입장에서 질병을 예측할 때의 가장 큰 기대효과는 의료비 절감과 건강 증진이 가능하다는 것이다. 기대 수명과 건강 수명 간의 격차를 최소화할 수 있으며 삶의 질 향상을 성취할 수 있다. 다음으로, PLM입장에서는 환자들이 입력한 데이터를 활용해, 질병 예측 프로그램(Disease Predicting Program)의 일환으로 분석을 진행할 수 있다. 그러면 위의 II. 사례 및 배경에서 언급한 사례와 같이 새로운 합병증을 발견하거나, 전혀 별개인 것처럼 보였던 질환들 사이의 연관성을 찾아내어 환자들(회원들)이 만족할 수 있는 새로운 서비스를 제공할 수 있을 것이다. 또한, 제약사, 병원 등 관련 연구 및 프로젝트 Partner들에게 더 많은 데이터를 제공할 수 있게 되어, 궁극적으로는 그들의 철학 중 하나인 사회적 공헌을 실현할 수 있을 것이다. 뿐만 아니라, 더욱 풍부한 데이터가 확보된다면 수익도 늘릴 수 있을 것이며 자연스럽게 기업 경쟁력 또한 상승하는 효과를 기대해볼 수 있다. 마지막으로, 병원 입장에서는 병상 수 부족, 합병증으로 인한 환자들의 재원 일수 증가 등의 문제를 해결할 수 있다.

. 참고문헌

[1] 당뇨병, 간호학대사전, 한국사전연구사, 1996

[2] Amyotrophic lateral sclerosis (ALS), Mayo Clinic Marketplace

[3] 당뇨병, 질병관리청 KDCA

[4] Diabetes UK, Diabetes Facts and Stats: 2015, 2015

[5] MEDICAL Observer  당뇨병 합병증으로 바이러스간염, 갑성선질환도발견”, 2020.05.18. 박선재 기자

[6] Eugene Jeong, Namgi Park, Yujeong Kim, Ja Young Jeon, Wou Young Chung & Dukyong Yoon. (2020) “Temporal trajectories of accompanying comorbidities in patients with type 2 diabetes : a Korean nationwide observational study” , Nature - Scientific reports. p.4-5

[7] 임정자, 윤소영 (2020). “보건진료소 중심 고혈압, 당뇨병 환자의 경험공유 자가관리 프로그램 효과”. 한국산학기술학회 논문지, 21(7), 331-341

[8] 이은환, 김욱 (2018). 질병예방과 건강수명연장을 위한 지역사회 공공 스마트 헬스케어 모델구축 이슈&진단(331), 1-2

[9] 신아미, 박희준, 이인희, 김윤년 (2009). “순차규칙 모델링을 활용한 뇌경색증 환자 진단 분석”. 재활복지공학회논문지, 2(1), 51- 56

[10] 배종화 (2002). “당뇨병 환자의 고혈압으로 찾아오는 합병증”. 월간 당뇨 = A Monthly Diabetes Magazine no.151 = no.151, 2002, pp.20 - 23

[11] 신아미, 이인희, 손창식, 박희준 (2009). “데이터 마이닝을 활용한 뇌경색증 환자 진단 분석”. 한국재활복지공학회 학술대회 논문집, 118-121

 


해당 과정은 수업때 교수님께서 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

 

안녕하세요. 이번에는 학부 생활을 하며, 2학년 때 간단하게 프로젝트의 설계 단계 부분까지 진행했던 글을 올려보려 합니다.

팀 프로젝트로 진행을 했었고, 다 같이 열심히 참여했던 기억이 납니다 

데이터 분석 관련해서 처음으로 진행하는거라 모르는 것도 참 많았는데, 서로 의견을 많이 나누며 고민을 많이 했던 것 같아요.

파일로 업데이트를 할까 하다가, 그냥 글로 올리는것이 접근성이 좋을 것 같아 올려봅니다. 

간단히 말씀드리면, PLM데이터는 PatientsLikeMe 라는 회사의 데이터 입니다. 이 회사는 (보통) 만성 질병을 가진 환자들의 커뮤니티 사이트를 제공하는 회사에요. 환자들이 자신의 질병 이력들, 처방, 생활, 경과, 식습관, 등 다양한 정보들을 올리고, 또 다른 사람의 정보와 처방법 등을 보며 소통할 수 있는 사이트 입니다. 회사는 이렇게 쌓인 데이터들을 제약회사 등과 공유하며 이익을 얻고, 제약회사는 데이터를 통해 만성 질병 환자를 위한 개선된 약을 개발하는 선순환 구조로 이루어져있다고 할 수 있죠.

저희의 프로젝트는 CRISP-DM 방식을 사용하여, 어떻게 하면 이 회사의 서비스가 더 향상될 수 있을지를 고민해보았습니다. 그러던 중 생각한 아이디어가, 지금까지 누적된 데이터를 바탕으로 질병 예측 서비스를 운영해 만성 질병에 걸린 환자들은 또 다른 질병을 대비하고, 질병에 걸리지 않은 환자들도(기존에 이용 고객이 아니던 사람) 이 서비스를 이용해 앞으로 걸릴 가능성이 있는 질병을 확인하고 조심할 수 있게 하자는 것이었습니다. 이렇게 하면, 새로운 소비자층이 생기게 되니 1석 2조 겠죠. 

그렇게 질병 예측 서비스를 만들고자 하였는데, 가장 큰 문제점은 데이터를 어떻게 얻을 것인가? 였습니다. 프로젝트가 PLM 사의 서비스를 개선하는 것인 만큼, 다른 곳의 데이터 보다도 PLM 사의 데이터가 필요했으니까요. 그래서 데이터 수집을 위해 저희가 가장 먼저 해본 행동은, PLM 사 측에 데이터를 어떤 식으로 구매할 수 있는지에 대해 문의한 것이었습니다. PLM 사에서는 데이터를 구매하는 방법에 대해 안내해줬고, 학교에서 하는 프로젝트다보니 학교 측에도 함께 문의를 넣었었는데요, 데이터의 구매는 조금 어려울 것 같다는 내용을 받았습니다. (아무래도 시간적인 부분때문에 더 그랬던 것 같아요)

사실 중요한 것은 만성 질병 예측 모델을 만드는 것이니 꼭 PLM 데이터가 아니어도 될 것이라는 판단에, 인터넷상(Kaggle 등) 에서 구할 수 있는 만성 질병 관련 데이터셋을 찾아 다운 받았습니다. 선별의 기준은 저희가 원하는 Attribute 가 모두 포함되어 있는지, 데이터의 갯수가 충분한지 등이었습니다. 참! 그리고 만성 질병 예측 모델 은 너무 광범위하다는 판단에, 만성 질병 중에서도 환자1순위라 알려져있는 심장병 예측 모델로 세부적인 범위를 잡게 되었습니다. 

이후 저희는 해당 데이터를 전처리하고, 의사결정나무 모델을 채택해 모델링을 하였습니다. (제 기억으로는 R을 이용했었고, 추가적으로 삼성 SDS의 Brightics 플랫폼도 경험해보자! 는 의견이 나와서 그것도 써보았었습니다)  데이터를 전처리 할 때와 모델링을 할 때 모두 많은 고민을 했었습니다. 가령 Target 데이터 값이 너무 치우쳐져서 유의미한 모델이 안나오는데 어떻게 할 것인지, Test Accuracy 와 Target Accuracy 의 그래프가 정상적인 모습이 아니라던지, 등.. (관련해서는 이후 문서를 봐주세요)

아무튼! 모델링이 끝난 후, 모델에 대한 평가를 진행했었고 그렇게 저희 프로젝트는 마무리를 했었습니다. 

이건 요약본이라 부를 수도 없는 정도이니, 이후 올린 1. Proposal, 2. Intermediate, 3. Final 문서를 봐주세요! 

감사합니다.

 


해당 과정은 수업때 교수님께서 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