처음 써보는 라이브러리에 정보도 거의 없어서 코딩하기 제일 어려웠던 프로젝트로 기억한다.
코드 자체는 쉬운데 최적화 내용을 처음 접하고 cplex도 처음 써봐서 너무 어렵게 느껴졌던 것 같다.
당장 결과를 얻어내기 위해 시간에 쫓기면서 하다보니 나도 보기 싫은 하드 코딩을 했다..
이렇게 부족한 점이 많지만 적는 이유는 우선 cplex를 처음 접해봤고, 관련 정보가 너무 없기 때문에 정보 제공을 위함이다.
이 프로젝트는 2학년 1학기에 진행했던 당뇨병 환자 식단 추천 프로그램과 주제는 같지만 문제를 풀어나가는 방향이 완전히 달라 기록하는 것에 의미가 있을 것 같다. 발표 PPT를 활용하여 내용을 간단하게 설명하겠다.
1. 주제 및 선정 이유
당뇨병 환자의 만족도를 최대화 하는 식단을 구성하자는 것을 주제로 이 프로젝트를 진행하였다.
이 주제를 선정한 이유는 다음과 같다.
2. 데이터 설명
이 프로젝트에서 중점으로 사용한 데이터는 각 음식별 섭취 횟수 데이터이다. 여기서 음식별 섭취 횟수를 선호도라고 판단하여 활용하였다. 데이터에서 끼니로 여기기 어렵다고 판단한 tea 종류, 소스류, 버텨, 마가린은 제외하여 112가지 음식에 대한 선호도를 사용하였다. 결측치의 경우 비슷한 음식군에 대한 선호도의 평균값으로 대체하였다.
(이 부분에서 프로젝트가 끝나고 아쉽다고 생각했던 부분은 끼니로 여기기 어려웠던 음식 종류들을 제외한 점이다. 이 음식들을 제외하는 것이 아니라 제약식을 하나 더 추가하는게 좋았을 것이라고 생각한다.)
그다음 내용으로 넘어가기 전에 앞으로 진행할 내용을 간단하게 표현한 내용을 첨부한다.
전체 프로젝트는 이 플로우로 진행되었다고 보면 된다. 앞으로 이 순서대로 설명을 진행할 예정이다.
3. 케이스 선정
4. 목적함수 설명
5. 변수 설명
결정 변수는 음식의 종류들이고 앞에 붙는 계수들은 선호도가 될 수도 있고, 칼로리나 탄단지 포함량 등이 될 수 있다.
6. 제약식 설명 & 코드 결과
랜덤으로 선정된 환자의 BMI 수치를 기준으로 최소, 최대 섭취 칼로리를 계산하여 제약식을 설정하였다.
마찬가지로 탄단지도 제약식을 설정하였다.
당뇨병 환자에게는 실질적으로 혈당부하지수를 관리하는 것이 중요하다고 볼 수 있기 때문에 각 식품별 혈당부하지수를 조사하여서 제약식을 설정하였다.
한 식품군에 치우친 섭취 또한 좋지 않기 때문에 다양한 식품군에서 먹을 수 있도록 제약식을 설정하였다.
그리고 무조건 선호도가 높다고 식단에 추가되어 서는 안되기 때문에 높은 혈당부하지수를 가지는 음식은 한가지만 들어갈 수 있도록 제약식을 설정하였다.
마찬가지로 선호도가 좋지 않아도 몸에 좋은 음식을 어느정도 섭취해주는 것이 중요하기 때문에 제약식을 설정하였다.
마지막으로 총 음식수를 제약하였다.
그 결과 계산된 최적화 식단이다.
7. Discussion
이외에 아쉬운 점은 전체 환자에 대해 적용하지 못했다는 점이고, 처음에도 언급했듯이 소프트 코딩으로 진행하지 못했다는 점이다. 그래도 수업 자체를 통해서 최적화에 대해 많은 지식을 얻을 수 있어 좋았고, 최적화 문제를 풀어주는 코드들도 알게 되어 굉장히 유용했다.
'데이터사이언스 > 프로젝트' 카테고리의 다른 글
[프로젝트] 이커머스 고객 세그먼트 분석 및 장바구니 기반 추천 시스템 개발 (0) | 2024.02.07 |
---|---|
[프로젝트] 보험 사기 예측 모델 (3) | 2023.12.27 |
[프로젝트] 서울시 공공자전거 대여소 수요량 예측 (1) | 2023.12.26 |
[프로젝트] 여러가지 변수에 따른 개인 별 의료비 예측 (0) | 2023.02.02 |
[프로젝트] 음식 선호도에 기반한 당뇨병 환자의 식단 제공 프로그램 part. 2 (0) | 2022.12.19 |