Ⅰ. 서론
당뇨병은 전 세계적으로 유병률이 빠르게 증가하고 있는 만성 질환으로, 합병증으로 인한 사망률도 지속적으로 증가하고 있다. 국내 당뇨병 유병률은 2018년 13.8%에서 2020년 16.7%로 꾸준히 증가하는 추세이고, 전 세계적으로도 지속적으로 증가하여 2045년에는 78억명이 당뇨 관련 질환을 앓을 것으로 예상하고 있다[1,2]. 이로 인해 혈당 관리는 현대 사회에서 매우 중요한 과제로 대두되고 있다. 혈당 관리에는 크게 식이요법, 운동요법, 약물요법이 사용된다. 그 중 식이요법은 고혈당을 유발하는 식품을 피하며 혈당 변동을 최소화하는 방법으로, 혈당 관리에 있어서 가장 근본이 되는 기초공사이며, 당뇨병 환자 뿐만 아니라 일반인들도 보다 쉽게 접근할 수 있다[3]. 그러나 최근 연구에 따르면, 당뇨병 환자 중 제대로 된 식이요법을 진행하는 환자의 비율이 매우 낮다는 사실이 밝혀졌다[4,5]. 또한 현재 국내·외 여러 플랫폼에서는 식이요법과 관련하여 식단 구성 서비스를 제공하고 있지만, 이는 주로 사용자나 전문 코치에 의해 수행되고 있다. 이에 따라 본 논문에서는 혈당 관리를 위한 일련의 식이요법 알고리즘 제시한다. 먼저, 식이요법 알고리즘을 위해서는 사용자의 정확한 권장 Kcal가 필요로 하기때문에 DNN을 기반으로 한 정확한 Kcal 산출 모델을 구현한다. 그리고나서 사용자의 권장 Kcal와 당뇨병 유무, 식전 및 식후 혈당을 기반으로 사용자에게 식단을 제시하고 나서, 식단 이후에는 식후 혈당을 기반으로 해당 식단에 대한 피드백까지 진행하는 알고리즘을 구현한다.
Ⅱ. Kcal 산출 모델 구현
그림 1과 같이 Kcal는 크게 성별, 나이, 신체 정보, 체형 등에 따라 좌우된다[6]. 일반적으로 성별 관점으로 남성이 여성보다 권장 Kcal가 높으며, 나이 관점으로는 노화함에 따라 근육량이 감소하기 때문에 권장 Kcal가 감소한다. 신체 정보는 신장과 체중으로 나뉘는데, 이 둘은 증가함에 따라 권장 Kcal가 증가한다. 마지막으로 체형은 체지방 양의 지표인 BMI를 기준으로 증가함에 따라 권장 Kcal가 증가한다. 이처럼 성별, 나이, 신체 정보, BMI 등의 데이터를 통해 정확한 Kcal 산출 모델을 구현한다.
그림 1. 데이터 선택
Fig. 1. Select data
데이터는 국민건강보험공단의 건강검진정보 2018년~2020년 데이터로 진행한다. 데이터는 총 34개의 정보를 담고 있으며, 데이터 개수는 총 1,000,000개로 정리하였다. 그 다음 그림 2와 같이 필요한 데이터만 따로 추출하여 Excel로 정리하였다.
그림 2. 데이터 가공
Fig. 2. Data Processing
그림 3은 정확한 Kcal 산출을 위한 DNN 모델 구현 흐름도이다. 먼저 6가지의 DNN 모델 변수를 설정하여 총 96개 조합을 제시한다. 이후에, 96개 조합의 DNN 모델 전체에 대한 데이터 학습을 진행한 뒤 정확도를 비교하여 최종적으로 최고의 정확도를 보이는 DNN 기반 Kcal 산출 모델을 선정한다.
그림 3. Kcal 산출을 위한 DNN 모델 구현 흐름도
Fig. 3. Flowchart for implementing a DNN model to calculate Kcal
1. 모델 변수 설정
그림 4는 정확한 Kcal 산출을 위한 DNN의 기본 모델이다. 정확한 Kcal 산출을 위한 DNN 모델을 구현하기 위해서는 DNN의 모델 변수인 은닉층의 수, 은닉층의 뉴런 수, epoch, batch size, 학습률(learning rate), 활성화 함수 등을 고려해야 한다. 활성화 함수 경우, 은닉층과 출력층의 비선형성을 도입하여 모델이 비선형 관계를 학습할 수 있도록 돕는 파라미터이다. 여러 활성화 함수 중 다중 분류 문제에 강점을 보이는 ReLU와 Swish 함수를 사용한다.
그림 4. Kcal 산출을 위한 DNN 기본 모델
Fig. 4. DNN base model for calculating Kcal
그림 5는 정확한 Kcal 산출 모델 구현에 사용할 6가지 모델 변수와 조합 경우의 수를 정리한 내용이다. 은닉층 수는 데이터 개수가 많고 복잡성을 고려하여 [3, 4]을 사용한다. 뉴런 수는 총 계산량을 고려하여 [64, 128]을 사용한다. epoch는 데이터 수와 과적합 방지를 위해 [50, 100, 150]을 사용한다. batch size는 계산 효율성을 위해 [128, 256]을 사용한다. 학습률은 [0.001, 0.01]로 설정하고, 활성화 함수는 [ReLU, Swish]를 사용한다. 이를 가능한 모든 조합을 시도하여 최적의 변수 값을 찾는 기법인 그리드 탐색 기법을 이용하여 총 96개의 조합으로 이루어진 모델 각각의 정확도를 비교하여 최종적으로 최고 정확도를 보이는 Kcal 산출 모델을 선정한다.
그림 5. 모델 변수 조합
Fig. 5. Model variable combination
2. 데이터 학습
데이터 학습은 총 1,000,000개 데이터 중 무작위로 800,000개 학습 데이터, 100,000개 검증 데이터, 100,000개 시험 데이터로 구분한다. 학습 데이터를 기반으로 모델 학습을 진행하고 그에 따른 정확도를 검증 데이터에 적용하여 정확도 비교를 진행한다. 이후에 최고 정확도를 보이는 모델을 시험 데이터에 적용하여 최종적인 정확도와 그에 따른 과적합 및 일반화를 판단한다.
3. 정확도 비교
그림 6은 그리드 탐색으로 진행한 6가지 모델 변수의 총 96개 변수 조합 정확도를 정리한 내용이다. 96개 조합 중 최고 정확도를 보인 모델의 변수 조합은 은닉층 수 [4], 뉴런 수 [128], epoch [50], batch size [256], 활성화 함수 [Swish], 학습률 [0.001]이며 정확도는 99.95%이다.
그림 6. 변수 조합에 따른 정확도 비교
Fig. 6. Accuracy comparison by variable combination
4. 예측 모델 선정
그림 7은 정확도 99.95%인 모델을 시험 데이터에 적용한 결과이다. 시험 데이터는 모델의 학습과 검증에 사용되지 않았기에 과적합이 되지않고 일반화가 잘 되어있을수록 높은 정확도를 보인다. 그에 비추어 보았을 때, 해당 모델을 시험 데이터에 대한 정확도는 99.942%를 보이며 정확도 뿐만 아니라 일반화 또한 잘 되어있는 것을 확인할 수 있다.
그림 7. 시험 데이터 적용 결과
Fig. 7. Result of applying test data
Ⅲ. 혈당 관리 식이요법 알고리즘 구현
본 논문의 알고리즘은 사용자의 인적 사항에 선정한 Kcal 산출 모델을 적용하여 정확한 Kcal를 출력한 다음, 당뇨병 유무 및 혈당 값을 기반으로 하는 기준치 비교 알고리즘을 통해 식단 DB의 일반 식단 Table 또는 혈당 식단 Table을 선택한다. 이후 선택한 식단 Table과 사용자의 Kcal를 바탕으로 식단 메뉴 선정 알고리즘을 통해 사용자에게 아침, 점심, 저녁 식단을 제시하고, 식후 혈당 값을 입력 받아 해당 식단에 대한 피드백을 진행한다.
이후 구현은 먼저 식단 DB 구현한 후, 기준치 비교 알고리즘, 식단 메뉴 선정 알고리즘 구현을 진행한다.
그림 8. 알고리즘 개발 흐름도
Fig. 8. Algorithm development flowchart
1. 식단 DB 구현
식단 DB의 일반 식단 Table 구현을 위해 그림 9와 같이 식품의약품안전처에서 제공하고 있는 801개의 음식 Kcal 데이터를 사용한다. 추가적으로 한식, 중식, 일식, 양식 등 음식 분류 별로 음식 레시피를 참고하여 그림 9와 중복이 되지 않는 음식 Kcal 데이터를 추가한다.
그림 9. 식품의약품안전처 음식 데이터
Fig. 9. Food data from the Ministry of Food and Drug Safety
식단이라 함은 밥, 국, 반찬으로 구성된 3첩 반상을 기본으로, 반찬은 고기·생선·달걀·콩류 반찬(주찬) 1가지, 채소류 반찬(부찬) 1~2가지, 김치 1가지를 기본구성으로 한다. 또한 과일 및 후식류, 우유 및 유제품류는 추가로 선택 제공한다. 따라서 이 기준을 바탕으로 구성한 일반 식단 Table을 정리하였고, 그 내용을 표 1에 도시하였다.
표 1. 일반 식단 Table
Table 1. General diet table
GI 지수란 식품이 혈당을 얼마나 빠르게 올리는지를 나타내는 지수로, 0부터 100까지의 숫자로 표시된다. GI 지수가 낮을수록 혈당을 천천히 상승시키고 혈당의 급격한 변화를 막아 안정화시키는데 도움을 준다. 따라서, 혈당 식단 Table은 구현한 일반 식단 Table에 GI 지수를 기준으로 LOW GI에 해당하는 음식들로만 구성한다.
표 2. GI 지수 구분
Table 2. GI distinction
2. 기준치 비교 알고리즘 구현
Kcal 산출 모델을 통해 사용자의 Kcal를 산출하고 공복 혈당을 입력하면 그림 10과 같은 흐름도를 통해 일반 식단 Table과 혈당 식단 Table을 선택하게 된다. 식단 선정의 기준은 당뇨병 유무, 공복 혈당, 식후 혈당이다. 한번이라도 당뇨병이 있거나, 공복 혈당이 126mg/dL이 넘거나, 식후 혈당이 200mg/dL이 넘어가면 혈당 식단 Table을 기반으로 식단 선정 알고리즘을 진행하게 되며, 3가지 기준을 모두 넘지 않으면 일반 식단 Talbe을 기반으로 진행하게 된다. 또한, 최초 실행 시에는 식후 혈당값이 없으므로 당뇨병 유무와 공복 혈당만으로 판단하며 이후 반복 실행 시 3가지 기준으로 진행하게 된다.
그림 10. 기준치 비교 알고리즘 흐름도
Fig. 10. Baseline comparison algorithm flowchart
3. 식단 메뉴 선정 알고리즘 구현
기준치 비교 알고리즘을 통해 일반 또는 혈당 식단 Table을 선택한 후, 이전에 Kcal 산출 모델을 이용하여 도출한 사용자의 Kcal를 반영하여 해당 식단 Table에 구분 별로 랜덤하게 음식을 선정한다. 랜덤하게 선정하는 과정에서 전체 식단 Kcal가 사용자의 Kcal보다 넘지 않도록 진행한다. 그림 11은 예시로 일반 식단 Table을 바탕으로 식단을 선정하는 과정을 그린 것이다.
그림 11. 식단 메뉴 선정 알고리즘
Fig. 11. Diet menu selection algorithm
그림 12는 실제 식단 선정 결과와 이후 식후 혈당을 입력하는 내용이다. 혈당 식단을 진행하더라도 사용자마다 식품에 대한 혈당 반응이 매우 다양하기 때문에[7], 식후 혈당이 200mg/dL이 넘어가면 해당 식단을 식단 DB에 피드백하여 이후 그림 13과 같이 사용자가 해당 식단과 그 날짜를 주의 List로 확인할 수 있도록 한다.
그림 12. 식단 선정 결과 및 식후 혈당 입력
Fig. 12. Diet selection results and blood glucose input after meals
그림 13. 주의 List 확인 결과
Fig. 13. Caution list check result
Ⅳ. 결론
당뇨병은 세계적으로 빠르게 증가하고 있는 만성질환으로, 합병증으로 인한 사망률 또한 증가하고 있다. 이에 식이요법은 혈당 관리에 있어서 가장 기본이 되고 중요한 역할로 작용하고 있다. 따라서, 본 논문에서는 공공데이터 및 DNN을 기반으로 한 정확한 Kcal 산출 모델을 구현하고, 일반 식단 및 혈당 식단 Table을 각각 구성하여 식단 DB를 구현하였다. 이후에 사용자의 당뇨병 유무, 식전 및 식후 혈당을 바탕으로 하는 기준치 비교 알고리즘을 구현하고 최종적으로 사용자의 Kcal를 기반으로 하는 식단 선정 알고리즘 및 식후 혈당을 기반으로 하는 식단 피드백 알고리즘을 구현하였다.
현재 알고리즘 구현에 초점을 맞추어, 실제 사용자가 사용하기에는 어려움이 있다. 따라서 본 논문의 알고리즘을 기반으로 실제 사용 가능한 버전의 웹 서비스 또는 애플리케이션 개발을 진행하고, 추가적으로 사용자의 식단 선호도 및 제시한 식단에 대한 조리법, 관련 콘텐츠를 제시하는 방향으로 진행할 예정이다.
참고문헌
- "Diabetes Fact Sheet 2022", Korean Diabetes Association, 2022
- "IDF Diabetes Atlas 10TH edition", International Diabetes Federation, 2021
- Diabetes treatment, lohas-seoul, http://lohas-seoul.com/Module/CMS/CMS.asp?Srno=38905&ContentsSrno=9532#
- health.chosun, https://health.chosun.com/site/data/html_dir/2019/03/19/2019031902156.html
- samsunghospital, http://www.samsunghospital.com/dept/main/index.do?DP_CODE=DM
- "Appendix 2. Estimated Calorie Needs per Day, by Age, Sex, & physical Activity Level", 2015-2020 Dietary Guidelines, U.S. Department of Health and Human Services, https://health.gov/sites/default/files/2019-09/2015-2020_Dietary_Guidelines.pdf
- Ruth Vrolix, Ronald P. Mensink, "Variability of the glycemic response to single food products in healthy subjects", Contemporary Clinical Trials, Vol. 31, Issue 1, pp. 5-11, 2010 DOI: https://doi.org/10.1016/j.cct.2009.08.001
- H.J. Kim, J.E. Hwang, Y.K. Boo, "Lifestyle Factors Affecting Blood Sugar Control by Workers with Type 2 Diabetes using the Korean National Health and Nutrition Examination Survey, 2016-2020", Joufnal of the Korea Academia-Industrial cooperation Society, Vol. 24, No. 6, pp. 105-115, 2023 DOI: https://doi.org/10.5762/KAIS.2023.24.6.105
- K.J. Lee, H.J. J, S.H. L, "Anomaly Detection Method of User Trajectories based on Deep Learning Technologies", The Journal of Korean Institute of Information Technology, Vol. 20, No. 11, pp. 101-116, 2022 DOI: https://doi.org/10.14801/jkiit.2022.20.11.101