3.1 연구의 flowchart 모델

제 7기 국민보건영양조사 원시자료를 데이터 전처리를 통해 결측치를 제거하고 불필요한 데이터를 제거한 후 연구에 사용할 최종 데이터를 만들어 낸 다. 그 후 데이터의 구조를 분석하고 변수들 사이의 상관관계, 분산팽창계수, 변수 중요도를 계산하여 변수를 제거하는 과정을 반복하여 변수의 수가 일정 수에 도달하게 되면 종료한다. 선정된 변수들을 K-FOLD 방식을 이용하여 머신러닝을 위한 학습데이터, 검증데이터로 분류한다. 학습데이터에 SMOTE 알고리즘을 이용하여 데이터들의 균형을 맞춘 후 모델을 적용하여 예측 모델을 만들어 낸 후 검증데이터와 비교하는 과정을 거쳐 당뇨병 예측 모델을 추출하는 과정을 따르고 있다.

3.2 데이터 전처리

2018 국민보건영양조사 원시자료와 2017, 2016년 국민보건영양조사 데이터 중 당뇨병 환자의 데이터만을 뽑아서 분석에 사용한다. 데이터 전처리 과정은 첫번째로 799개의 변수들 중, 주관적인 관점을 이용하여 분석에 활용할 변수를 1차로 추려낸 후 데이터의 결측치를 평균화 기법과 KNN 알고리즘을 사용하여 채워넣는 과정을 진행했다. 그 후에는 변수들간의 상관관계, 분산팽창계수, 변수 중요도를 측정하여 일정 기준에 부합하지 않는 변수들은 제거하는 과정을 반복하여 변수의 수를 감소시키는 과정을 진행했다.

첫번째, 당뇨병에 대한 사전 지식을 적용하여 143개로 줄여 분석을 진행할 때 불필요할 것으로 예상되는 변수를 제거했다. 30세 이하에는 상대적으로 당뇨병 유병률도 낮고 관련 질병도 적을 것으로 예측하여 데이터 내에서 'age' 변수를 기준으로 30세 이하에 해당하는 데이터는 전부 삭제한다. 한 행에 결측치가 30개 이상 존재하는 경우 결측치 처리 방식으로 채워넣게 되면 해당 데이터의 경우 큰 의미가 없다고 생각되어 해당 데이터도 삭제했다.

두번째, 결측치 처리의 경우 국민보건영양조사 데이터를 기준으로 이산형 변수와 연속형 변수 두가지로 나누어 각각 KNN 알고리즘과 평균화 기법(중앙값)을 이용하여 결측치를 채워넣었다. KNN 알고리즘의 경우 Python의 라이브러리인 scikit-learn 내에 구현되어 있는 KNN 알고리즘을 사용하였고 K 값의 경우 11로 설정하여 진행하였다.

세번째, 변수들 사이의 상관관계분석, 분산평창계수 분석, 변수 중요도를 측정 한 후 각각의 단계에 맞는 기준을 설정하여 해당 기준에 맞지 않는 변수들을 제거하였다. 각각의 단계는 아래의 그림과 같은 방식으로 진행되었고 총 4번의 단계를 진행한 결과, 최종적으로 알고리즘이 적용되는 변수의 개수는 총 31개이다.