귀찮아서 미루고 미뤄왔던 게시물을 드디어 쓰게 됐다..
데이터사이언스 프로그래밍 수업은 중간에는 이론 시험, 기말은 프로젝트로 진행되었다.
나는 나를 포함한 데이터사이언스학과 3명이 팀이었고, 내가 제일 아는게 없었다...ㅎㅎ
그래도 끝내고보니 굉장히 뿌듯한 프로젝트였다.
1. 데이터셋
본 프로젝트에서 사용하는 데이터는 캐글 사이트의 dietary data (https://www.kaggle.com/datasets/saurabhshahane/dietary-data) 를 사용했다.
이는 크게 3 종류의 데이터로 이루어져 있다. 첫 번째 데이터는 당뇨병 환자의 기본 정보와 음식에 대한 선호도로 이루어져 있고, 두 번째 데이터는 음식을 얼마나 섭취하는지를 물어보는 질문에 대한 답안 기준 단위가 제시되어 있다. 세 번째 데이터는 첫 번째 데이터의 열 데이터가 각각 무엇을 의미하는지를 알려주고 있다. 첫 번째 데이터는 463개의 column과 509개의 row로 구성되어 있다.
또한, 본 연구가 단순히 식단만을 제시하는 것이 아닌 일일 권장 칼로리 섭취량을 고려한 식단을 제공하는 점에 임하여 위의 데이터에 있는 각 음식의 칼로리와, 탄수화물, 단백질, 지방의 함유량으로 이루어진 nutrient라는 이름의 새로운 데이터를 제작하였다.
2. 주제 선정 과정
전 세계 성인 인구 중 약 4억 6천만 명 이상이 당뇨병 진단을 받았고 2045년에는 당뇨병 환자가 약 7억 명으로 급증할 것으로 예상된다. 당뇨병은 전 세계 사망 원인의 11.3%를 차지하여 사망자 절반이 60세 미만으로 나타나 조기 사망의 주요 원인으로 지목되고 있다. 본 연구는 대다수를 차지하고 있는 당뇨병 2형 환자들에게 식사요법이 중요함을 인식시키고 환자들을 위한 식단을 제공하는 프로그램을 작성해 제공함으로써 당뇨병 치료에 보탬이 되고자 한다. 또한 식단을 제공함에 있어 각 환자의 음식에 대한 선호도, 음식의 칼로리와 영양성분을 고려하였다.
3. 데이터 전처리
본 연구에서 주요 데이터로 사용하는 Frequency of consumption per week의 결측치는 68개였다. 이는 Frequency of consumption variables 데이터를 기반으로 만들어졌으며, 1개를 제외하고 나머지는 둘다 결측치여서 임의로 결측치를 설정해야 했다. 여기서 우리가 고민한 것은
1) 결측치를 모두 0으로 채울지?
2) 비슷한 음식군의 선호도를 반영하여 평균값의 선호도를 반영할지?
팀원들의 회의 끝에 각 음식의 선호도를 반영하는 프로그램이기 떄문에 모두 0으로 채우는 것은 선호도 반영이 어렵지 않을까해서 음식군을 선정하고 그 음식들의 선호도를 평균내서 반영시켰다.
그러나 중간 발표 후 교수님께서 2번의 방식을 사용하는 것은 문제가 있을 것 같다고 하셔서 1번의 방식으로 바꾸게 되었고, 전체적인 오차를 비교했을 때 교수님 말씀대로 1번을 사용하는 것이 더욱 효과적인 방법이었다.(그래프 참고)
preprocessing_df는 4개의 음식을 제외하고 결측치를 비슷한 음식군에 대한 선호도를 고려해 대체한 데이터, df는 4개의 음식을 제외하고 결측치를 0으로 대체한 데이터, old_df는 전처리 전 데이터이다. 다방면으로 점수가 높은 df를 채택했다.
4. 데이터 분석 기법
본 연구에서는 종속 변수를 혈당 부하 지수로 하고, 독립 변수를 각 음식에 대한 선호도로 하는 Linear Regression을 이용하였다. 그리고 K-fold 방식으로 train 데이터와 test 데이터를 분할하여 선형회귀 모델을 적용하였다. K-fold 방식은 데이터를 K개로 분할하여 K-1개의 셋을 훈련 셋으로 사용하고 나머지를 테스트 셋으로 사용하는 것을 K 번 반복한다. 선형회귀분석법은 머신 러닝의 지도 학습 알고리즘 중 하나로 입력변수(x) 와 출력변수(y) 사이의 선형적인 관계를 모델링하는 회귀분석기법이다. 단순 선형회귀식은 y = a + bx 로 표현되며 예측에 관련된 입력변수 x를 통해 예측하고자 하는 결과 값인 종속변수 y를 간편하게 예측할 수 있다.
다양한 모델을 적용하고 싶었지만 우리가 가지고 있는 데이터셋을 적용할만한 기법은 다양하지 않았다. 그래서 우선 가장 기본이 되는 선형회귀 기법을 사용하였는데, 중간 발표시 교수님께서 특별한 데이터 모델을 적용한 것은 아니지만 프로젝트 주제와 코드 진행, 그리고 데이터셋 제작 및 활용 부분에서 칭찬을 많이 해주셨기 때문에 팀원들과 회의에서 코드 수정과 시각화에 집중하기 위해 선형 회귀 모델만 적용하는 것으로 결정하였다.
[참고 문헌]
전다원. "층화추출을 이용한 빅데이터 교차검증의 효율 증대." 국내석사학위논문 고려대학교 일반대학원, 2022. 서울
이용규. "발전소 데이터를 이용한 태양광발전량의 선형회귀모델 예측분석." 국내석사학위논문 충남대학교 에너지과학기술대학원, 2022. 대전
https://medium.com/the-owl/k-fold-cross-validation-in-keras-3ec4a3a00538 ,2020
'데이터사이언스 > 프로젝트' 카테고리의 다른 글
[프로젝트] 당뇨병 환자 식단 최적화 (1) | 2024.01.03 |
---|---|
[프로젝트] 보험 사기 예측 모델 (3) | 2023.12.27 |
[프로젝트] 서울시 공공자전거 대여소 수요량 예측 (1) | 2023.12.26 |
[프로젝트] 여러가지 변수에 따른 개인 별 의료비 예측 (0) | 2023.02.02 |
[프로젝트] 음식 선호도에 기반한 당뇨병 환자의 식단 제공 프로그램 part. 2 (0) | 2022.12.19 |