Skip to content

ML model을 활용하여 나트륨위험군 예측 및 저염레시피 추천 프로젝트

Notifications You must be signed in to change notification settings

yangjumi/Prediction-using-Machine-Learning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 

Repository files navigation

나트륨위험군 예측 및 저염레시피 추천 시스템

그림1

1. Introduction

Needs

대한민국 성인의 1일 나트륨 섭취 권고량은 2,000mg이나, 현재 한국인들의 나트륨 섭취량은 거의 2배 이상이다. 나트륨을 과다 섭취시 문제점으로 뇌졸중, 고혈압, 위장병, 골다공증 등이 있으며 많은 건강기관에서는 나트륨섭취를 줄이기 위한 꾸준한 노력을 하고 있음에도 불구하고 해결하기 어려운 상태다. 이는 대부분의 식단이 나트륨이 많이 들어있기도 하지만, 자신이 나트륨위험군에 속하는지를 인지하고 있지 않기 때문이다. 따라서 자신이 나트륨 위험군에 속하는지를 계산할 수 있는 방안에 대한 개발 필요성을 느꼈다. 가벼운 자가진단 문항으로 자신의 나트륨섭취량을 예측해보고, 대비할 수 있는 방안을 통해 나트륨 섭취량을 줄일 수 있게 하고자 한다. 특히, 코로나로 인해 집에서 ‘맞춤형 건강식’을 해먹는 사람들의 수요가 늘어나고 있다. 따라서 본 프로젝트를 통해 자가진단 문항을 통해 사람들의 나트륨위험군을 예측해주고, 더불어 이에 대한 저염레시피를 추천해주는 시스템을 개발하고자 한다.

Main contents

사용할 데이터는 ‘국민겅간영양조사(2016-2018)’이며, target 변수는 ‘1일 나트륨 섭취량(mg)’으로 두어 1일 나트륨 섭취량과 연관성이 높은 변수를 알아보고자 한다. 이 때 target 변수는 나트륨위험군인지를 예측하는 것이 과제의 목표이므로 ‘고(3)’ ‘중(2)’, ‘저(1)’로 범주화한다. 연관성이 높은 변수 10개를 토대로, 구글 docx 설문지를 제작한다. 자가 문진 설문지에 대한 답변을 제출한 사람들에게 나트륨위험군 중 어느 곳에 속하는지를 이메일을 통해 알려준다. 이메일 내용에 저염레시피를 추천하는 링크를 넣어줌으로써 사람들이 저염 레시피를 이용할 수 있도록 도모한다. 연관성이 높은 변수를 추출하고, 나트륨위험군을 예측하고자 하는 모델은 여러 머신러닝 모델의 앙상블을 토대로 구축한다. 앙상블에 해당하는 모델은 catboost, xgboost, LGBM으로 구성하였다.

Goals

우선 ‘1일 나트륨 섭취량(mg)’ 변수와 관련성이 높은 변수들을 추출할 때, MAPE 값이 가장 작은 모델을 토대로 한다. 한 사람에 대해 나트륨위험군을 예측할 수 있는 모델을 제작할 때는 머신러닝 모델인 catboost, xgboost, LGBM을 앙상블하여 보다 정확한 모델을 구축하고자 한다. 모델을 구축할 시 K-fold 교차 검정을 추가로 적용하여 데이터 개수가 적은 데이터 셋에 대하여 정확도를 향상시키고자 한다. 이러한 모델을 토대로 보다 정확하게 한 사람에 대한 나트륨위험군을 예측하고, 이에 대한 저염레시피를 추천해주고자 한다.

2. Analysis

Data processing

데이터 전처리 전 크기 데이터 전처리 후 크기
(7992, 737) (6078, 368)
  1. 데이터를 불러온 후 크기 및 칼럼을 확인한다.
  2. 설문항목과 관계가 없는 변수를 제거한다.
    • 순서는 기본변수 -> 건강설문조사변수 -> 검진조사변수 -> 영양조사변수를 순으로 하였다.
    • 설문문항과 관계없는 변수는 주관식문항, 기타항목이 포함된다.
    • 주관식문항에는 공복시간, 임신개월수, 총 콜레스테롤 등이 속한다.
    • 기타항목에는 최종 DB 수정일, 조사연도, 가중치항목들 등이 속한다.
  3. 결측치(NA)를 모두 제거한다
    • 방식은 열을 먼저 제거한 후, 행을 제거하는 순으로 수행했다.
    • 결측치(NA)의 개수를 센 후, target 변수인 ‘N_NA’(1일 나트륨 섭취량(mg))의 결측치 개수보다 많은 columns을 제거한다.
  4. 그 후 결측치(NA)가 남아있는 모든 행을 제거한다.

Transform and prepare data before learining the model

  1. 클래스를 분리하였다.
    • target 변수를 제외한 데이터를 Ttrain, target 변수만을 포함한 데이터를 Ttarget으로 두었다.
  2. Min-Max 스케일링을 진행하였다.
    • 변수들의 척도가 모두 다르기 때문에 해당 방법을 이용하였다.
    • 최소값과 최대값을 사용하여 0~1 사이의 범위로 데이터를 변환시켰다.
  3. K-fold를 적용하고자 설정하였다.
    • 모델에 대한 과적합 및 적은 데이터수의 한계를 없애고자 K-fold 교차검증을 이용하였다.
    • k-fold 적용 수를 5로 설정하여, 보다 일반화된 모델을 구축하고, 정확도를 향상시켰다.
  4. 최종적인 model evaluation 지표인 MAPE를 구하기 위해 초기값을 설정하였다.
    • 평균 절대 백분율 오차(MAPE)는 정확도를 오차의 백분율로 표시하는 지표다.
    • 예를 들어 MAPE가 5이면 예측값은 평균 5%를 벗어난다는 것을 뜻한다.
    • MAPE를 기준으로 하되, 다른 평가 지표 또한 구하였다.

Machine Learning model

 - catboost, xgboost, LGBM의 총 세가지 모델을 사용하였다.
 - 해당 모델은 feature importance, 나트륨위험군예측에 사용하였다.
  1. catboost

    • 모델에 적용한 catboost parameter 및 모델 학습 결과를 나타내었다.
    • 최종적인 MAPE는 20.5846이다.
  2. xgboost

    • 모델에 적용한 catboost parameter 및 모델 학습 결과를 나타내었다.
    • 최종적인 MAPE는 23.7981이다.
  3. LGBM

    • 모델에 적용한 catboost parameter 및 모델 학습 결과를 나타내었다.
    • 최종적인 MAPE는 23.0381이다.

Feature importance

 - feature importance를 구현할 모델은 가장 예측 정확도가 높은 catboost를 활용하였다.
 - catboost를 활용해 target 변수와 연관성이 높은 top 20 변수를 추출한 결과는 아래 그림과 같다.
 - 최종적으로 설문지 문항에 사용할 변수는 top 10이다.

importance

Ensemble model

 - 머신러닝 3가지 모델을 구현할 때 각 predict 값을 구했다.
 - 앙상블은 total_preds = (xgb_preds + lgb_preds + cat_preds)/3 의 식으로 구현하였다.

3. Results

Survey

 - 총 10개의 문항 및 이름 / 이메일 항목으로 구성된 설문지를 제작하였다.
 - 설문지에 대한 답변을 CSV 파일로 변환해, 앞선 모델을 활용하여 나트륨 위험군을 예측할 수 있다.
 - 아래 사진은 설문지 일부를 나타낸 것이다.

survey1 survey2

Predict

 - target 변수를 토대로 해당 사람이 나트륨위험군 중 어느 군에 속하는지 알 수 있다.
 - target 값은 1~3의 결과를 도출할 수 있다.
 - 임의적으로 1~1.5를 ‘저위험군’, 1.5~2.5를 ‘중위험군’, 2.5~3.0을 ‘고위험군’이라 설정하였다.

result

Email

 - 총 52명이 참가했으며, 해당 예측 결과와 저염레시피를 포함한 이메일을 전송해준다.

email

Expected effect and Application plan

Expected effect

하루 섭취한 나트륨을 일일이 계산하기란 어렵다. 국민건강영양조사를 활용하여 1일 나트륨 섭취량과 밀접한 관련이 있는 문항으로 설문조사를 실시하면, 자신이 나트륨위험군 중 어느 곳에 속하는지 알 수 있어 해당 결과를 통해 경각심을 얻을 수 있다. 또한 간단한 방식으로 자신의 위험정도를 파악할 수 있기 때문에 이용가능성이 많다. 특히, 고 위험군에 한하여 저염레시피가 담긴 링크를 보내줌으로써 보다 건강한 식습관을 도모해줄 수 있다.

Application plan

해당 시스템을 홈페이지로 제작해볼 수 있다. 홈페이지를 들어오면, 설문 문항이 바로 뜨게 되며 해당 문항을 선택 시 자신의 나트륨위험정도를 바로 파악할 수 있게 만든다. 마지막 결과화면에서 저염레시피를 알고 싶은 카테고리를 누르면 해당 레시피를 볼 수 있게 제작한다. 레시피에 관한 정보는 링크로 제공되는 것이 아닌 식품안전나라 사이트에 있는 레시피 DB를 활용하여 보다 다양하고 정확한 정보를 제공해줄 수 있다. 이는 보다 많은 국민들이 저염 식단을 유지하는데 도움을 줄 수 있다고 생각한다.

Conclusions and Suggestions

이번 프로젝트에서 국민건강영양조사 데이터셋을 활용하여 나트륨 위험군을 예측해주고 저염레시피를 추천해주는 시스템을 기획하고 개발해보았다. 특히 머신러닝 기법인 catboost, xgboost, LGBM의 총 3가지를 사용하여 보다 예측도가 높은 모델을 구현하고자 하였으며, 해당 프로젝트를 통해 다양한 예측 알고리즘의 특성 및 활용방안을 익힐 수 있었다. 결과적으로 이번 프로젝트를 통해 예측 시스템을 직접 만들어보면서 예측 알고리즘이 어떻게 동작하는지 잘 이해할 수 있었다. 다만, 활용방안에 있는 홈페이지 구현까지 못한 것은 아쉬우며 방학을 활용하여 보다 좋은 시스템으로 개발시키고자 한다.

About

ML model을 활용하여 나트륨위험군 예측 및 저염레시피 추천 프로젝트

Resources

Stars

Watchers

Forks

Packages

No packages published