코드스테이츠| PMB 11/Daily 과제

데이터를 이용한 <야지오(YAZIO)> 유저 가설 검증_코드스테이츠 PMB 11기| W6D4

Sutella 2022. 4. 21. 23:34
728x90
선정 product: 야지오(Yazio)

 뚱땡이 시절을 지나 잠시! 날씬했던 시절.. 바디 프로필을 찍은 후 체중 유지를 위해 "야지오(Yazio)"라는 어플을 사용한 적이 있다. 8개월가량 헬스장에 다니며 PT를 통해 체중을 감량했지만, 당시에는 식단 어플을 쓰지 않았다. 먹는 게 정해져 있었고, 기계보다 정확한(?) PT 선생님이 내 식단을 통제해 줬기 때문이다.

 하지만 복학을 위해 어쩔 수 없이 PT를 그만둬야 했기에, 나의 새로운 통제자를 찾아 나섰다. PT 선생님은 전문가라 내가 먹은 식단에 따라 다음 식단의 음식 종류, 양 등을 정해줄 수 있었지만, 나는 그렇지 못했다. 그리고 다이어트식을 계속 먹자니... 환경적인 한계도 있었다. 학교&기숙사 특성상 취사가 불가능했으며, 근처에는 '사 먹어야 하는' 음식밖에 없었다. 이전의 과제에서도 다룬 적이 있지만, 냉장고도 작아서 대부분 상온 보관이 가능한 식품을 먹어야 했다. 닭가슴살을 시켜먹기에는 보관도, 조리도 힘들었다😭

 그래서 나는 야지오를 설치했다. 내가 먹은 가공 식품을 등록하면 칼로리와 영양성분을 분석해 내가 먹을 수 있는 남은 양을 알려줬기 때문이다. 추가적으로 16:8과 같은 단식도 가능해서 당시에 잘 사용했던 기억이 난다. 물론 지금은 행복한 돼지가 되었지만, 당시에는 체중을 유지하며 나름 행복하게 식생활을 이어갔다.


 이번 과제는 데이터를 사용한 가설 검증이다. 해당 서비스의 직접적인 데이터를 얻을 수 있다면 좋겠지만, 당연하게도! 실제 데이터는 내가 구할 수 없다. 따라서 과제 수행을 위해 Kaggle의 <Diet Plan Recommendation>를 통해 분석을 시행했다.


✅ Data set 설명 및 Attribute 선정 이유

 야지오의 목적은 체중 감량/유지/증량을 위한 식단 관리 어플이다. 해당 서비스에 대한 직접적인 데이터를 사용할 수는 없기에, 간접적으로 'diet plan recommendation' 자료를 이용하여 야지오의 사용자들이라 가정했다. 

 본 과제에서 이용한 데이터셋은 <Diet Plan Recommendation>이라는 이름의 데이터셋이며, 총 11개의 column(attribute)과 10,726개의 row로 이루어져 있다. 체중 유지를 목적으로 칼로리에 기반한 다이어트 계획 예측 자료이며, 모집단에 대한 자세한 설명은 첨부되어 있지 않다. 분석에는 데이터셋 중 20살 이상의 성인을 대상으로 하여, 총 6280개의 데이터(남 2992, 여 3288)를 이용했다. 20세 미만의 경우 성장기에는 변수가 많기 때문에 제외하였으며, 이를 포함할 경우 오히려 다른 데이터에 방해가 돼 노이즈로 처리하였다. (2세 데이터부터 포함되어 있음) 

 

Attribute
  • 성별: 건강 관리에 있어 남녀의 생물학적 차이는 존재할 수밖에 없다. 따라서 모든 데이터를 살펴볼 때 성별적 요소를 고려해야 한다.
  • BMI: 비만도를 나타내는 지수로, 체중과 키의 관계로 계산한다.  * 공식 = 몸무게/키^2
  • BMR: Basal metabolic rate의 약자로 기초대사량(율)을 의미한다.
  • Activity level: 활동성을 나타내는 지표로 해석되며, 별다른 설명이 없어 파악이 힘들지만, 2에 가까울수록 활발하고, 1에 가까울수록 활동성이 적다고 가정한다.

 


📢 가설 설정 및 검증
가설 1. 활동성이 높은 사람은 bmi 지수가 낮을 것이다. ➡  REJECT

 야지오의 유저들은 목표 설정에 앞서 자신의 활동성에 대한 질문에 답을 해야 한다. 활동 수준은 <낮음/보통/높음/매우 높음> 중에 선택할 수 있으며, 단순히 키와 몸무게에 따른 칼로리/영양성분 제한이 아닌, 사용자의 일상을 고려하고 있다.

 따라서 나는 위의 지표를 고려해 활동성이 높은 유저들의 BMI 지수가 대체로 낮을 것이라 생각했다. 활동성이 높다는 것은 그만큼 더 많은 에너지를 소비한다는 것이기에, BMI 지수가 낮은 유저들이 다수를 차지하지 않을까? (이 유저들은 아마 체중 유지, 혹은 증량을 위해 야지오를 사용한다고 추측했다.)

 하지만 검증 결과 가설은 기각당했다. 위의 Scatter plot에 분포된 데이터들의 분포와 추계선만을 살핀다면, 가설이 채택되었을 수 있다. 눈으로 파악하기에 뚜렷한 규칙성을 보이지는 않지만 추계선이 우하향한 모습으로 가설이 사실인 것 같은 기대감을 심어준다.

 하지만 R^2 수치를 확인하면 얘기가 달라진다. R^2 값이 0.1015로 위의 결괏값에 대한 신뢰도가 10% 남짓이라는 것을 알 수 있다. 이를 확인한 후 plot을 다시 본다면 '규칙성'을 찾기에는 무리가 있는 분포라는 것을 알 수 있다.

가설 1. 활동성이 높은 사람은 bmi 지수가 낮을 것이다. ➡ REJECT

 

가설 2. 기초대사량이 높을수록 활동성이 높을 것이다. ➡  REJECT

 두 번째로 설정한 가설은 기초대사량과 활동성 간의 관계이다. 기초대사량은 유저들이 별다른 행동을 하지 않아도, 쉽게 말해 숨만 쉬어도 하루에 소비하는 에너지의 양이라 말할 수 있다.

 이러한 정의만 보면 기초대사량과 활동성 간에 관계가 없다 생각할 수 있다. 하지만 기초대사량이 어떻게 만들어지는지 생각해 본다면 이야기가 다르다. 물론 타고난 근수저일 가능성도 있지만, 이러한 유저는 희박하다. 대체로 평소 활동이 많아 자연스레 근육량이 많아지고, 혈액순환이 활발해져 BMR 수치가 증가할 가능성이 높다. 따라서 BMR이 높을수록 활동성이 높을 것이라는 가설을 세웠다. 

 해당 plot 역시 추계선을 본다면 명확한 상관관계를 보여주는 듯하다. 하지만 데이터의 분포를 고려한다면 이를 쉽게 수용할 수 없다. 또한 해당 분석은 성별에 따라 분리해서 보다 자세히 살펴봐야 한다. 생물학적으로 남성이 여성보다 타고난 근육량이 많고, 여성은 신체 구조상 근육보다 지방의 양이 많기 때문에 BMR 수치가 상대적으로 낮을 수밖에 없다.

 앞선 plot을 성별에 따라 데이터를 분리한 후 scatter plot을 다시 작성한 모습이다. 남성의 경우 여성에 비해 그나마 경향성을 띠고 있으며, 추계선 또한 신뢰성 있어 보인다. 하지만 여전히 R^2 값이 0.2036으로 해당 추계선을 신뢰하기는 어렵다. 여성의 경우는 R^2값이 더욱 낮은 0.1369를 기록했다. 추계선의 기울기는 가팔라 보이지만, 데이터의 분포와 R^2 값을 고려하면 이 또한 BMR과 활동성 간의 상관관계가 있다고 볼 수 없다.

가설 2. 기초대사량이 높을수록 활동성이 높을 것이다. ➡  REJECT

 

가설 3. 몸무게가 무거울수록 BMR 수치가 높을 것이다. ➡ ADOPTION

 마지막으로 세운 가설은 나의 PT 경험을 바탕으로 한 가설이며, 몸무게와 BMR 간의 관계에 대한 내용이다. 과거 인바디 결과지를 받아 들고 PT 선생님의 설명을 들었을 때, 20대 여성의 평균적인 근육량이 18~21kg라고 한다. 하지만 다이어트 전의 내 근육량은 26~28kg(? 기억이 정확하지 않다ㅠ) 수준이어서, '어, 나 근수저인가? (두근)'이라는 생각을 했다. 

 하지만 인체의 신비는... 역시 과학이다. 우리의 인체는 무거워진 몸뚱이(지방)의 무게를 견디기 위해 그만큼 생존 근육이 발달한다. 즉, 진짜 근육이 아닌 살기 위한 근육 수치일 뿐이다😂 (그래서 다이어트를 할 때는 지방은 빼고 근육은 유지/증량해야 하는 방향으로 운동해야 한다.) 

 위의 경험을 바탕으로 나는 그것이 '진짜'일지 궁금했다. 해당 데이터셋에서 직접적인 유저들의 근육량 수치를 알 수는 없지만, BMR 지표를 통해 근육량을 추론할 수 있다. (BMR에 대한 설명은 2번 가설의 설명 참고) 따라서 몸무게 무거울수록 BMR 지표가 높아질 것이라는 가설을 세웠다.

* 사실 '가설'이라고 말하긴 했지만, 이미 과학적으로 입증된 사실을 내 눈으로 확인하는...

 먼저 남녀를 구분하지 않은 데이터셋을 scatter plot으로 표현한 후 추계선을 그린 모습이다. 2번 가설에서 확인했던 그래프처럼 추계선은 여전히 경향성을 띠고 있는 것으로 보인다. 다만 데이터 분포에 있어서 확실한 차이를 보이고 있다. 몸무게가 55~95kg 구간까지는 뚜렷하게 증가하는 모습을 보이기 때문에 가설이 채택될 것이라는 기대감이 들었다. 이를 더 명확히 확인하기 위해 성별에 따른 데이터 분석을 시행하였다. 

 전체 그래프에서 확인한 것처럼, 몸무게와 BMR 간의 관계는 이전의 그래프들과 달리 명확한 경향성을 보였다. R^2 계수도 0.7232, 0.7129로 위의 결과가 신뢰할 수 있다는 것을 입증하고 있다. 남녀 그래프의 y축에는 차이가 있지만, 해당 부분은 앞서 언급한 것처럼 생물학적 BMR 차이를 나타내기 때문에 분석 결과에는 영향을 미치지 않는다. 

 다만 95~100kg 구간 대에서는 남녀 구분 없이 경향성을 따른다고 보기 어려웠다. plot의 데이터 분포도 세로로 길고, 선명하지 않은 모습을 보인다. 내 추측이지만, 이는 95kg가 넘어가면 신체에도 한계가 존재해 개인적인 역량(?)에 따라 BMR에 차이가 발생하지 않을까 싶다. 

가설 3. 몸무게가 무거울수록 BMR 수치가 높을 것이다. ➡ ADOPTION

 


 이번 과제를 통해 야지오의 가상 유저들을 설정하여, 그들의 건강 상태에 관한 가설 검정을 시행했다. 활동성과 BMI, BMR과 활동성 간의 관계에 대한 가설은 기각당했지만, 몸무게와 BMR에 대한 가설은 채택되었다.

 가설 검정 결과를 바탕으로 야지오는 유저별 칼로리/영양성분의 제한 수치를 설정할 때, "몸무게" 요소에 가중치를 부여한다고 추측할 수 있다. BMR은 에너지를 소모하는 것이기에, BMR이 높으면 하루 섭취 칼로리가 증가할 수밖에 없다. 유저들에게 칼로리를 설정해 주는 야지오의 정확한 알고리즘 및 계산 공식은 알 수 없지만, 이번 가설 검정을 통해 '몸무게'가 중요한 지표로 작용함을 예상해 본다.

가설 검정의 한계점
  • 서두에 밝혔듯, 본 가설 검정은 "야지오"의 직접적인 유저 데이터를 사용한 것이 아니기에 R^2 수치가 잘 나왔다 하더라도, 분석 결과를 신뢰하기 어렵다. 
  • 또한 데이터셋의 데이터 수는 충분하지만, 모집단이 어떻게 수집되었는지 제대로 파악할 수 없기에 raw data 자체를 신뢰하기 어렵다. 국가, 인종, 건강 상태 등이 고려되지 않은, 단순 키/몸무게/BMR 등의 수치이기에 분석에 한계가 존재한다.
  • 정확한 분석 기법을 사용한 것이 아닌, 데이터를 scatter plot으로 그린 후 엑셀의 '추계선'과 'R^2 자동 계산' 기능을 사용했다. 나 또한 과거에 배웠던 지식을 알음알음... 짚어가며 뇌피셜로 작성한 분석 결과이기에, 위의 가설 검정을 믿으면 안 된다.

 


 이번 과제는 '데이터 분석'에만 의의를 뒀다. 위에 그럴듯하게 글자들을 써놨지만, 정말 뇌피셜이 많다. 하지만 이번 과제를 통해 오랜만에 데이터를 다뤄봤다. 학부 시절에 사용했던 R도 써봤지만, 역시 인간은 망각의 동물이다^^

 과거의 기억+구글링을 통해 일부분은 R을 사용해서 preprocessing을 진행한 후 csv 파일로 추출해 다시 엑셀에서 차트 기능을 이용했다. 역시 전처리 부분은... 엑셀보다 R이 편한듯하다. 엑셀은 데이터가 1만 개가 넘어가니 버튼 하나 누르는 데도 500년이 걸렸다. 전처리&정제 후 분석을 시행해도 마찬가지였다. 겨우 6,000개 남짓의 데이터인데ㅠ 엑셀은 버티기 힘들었는지 내 그래프를 몇 번이고 날렸다~,~

 R에서도 plot이나 ggplot으로 그릴 수 있는데ㅋㅋㅋㅋㅋ 이 무슨 바보 같은 짓... 하지만 나는 바보니까 괜찮다!^^ 기죽지 않아! 역시나 그렇듯 이번 과제도 '행동'으로 옮겨본 데에 의의를 둔다.

+ python도 해볼까 했지만, Anaconda랑 Jupyter를 다시 깔아야 했기에 깔끔히 포기! 당연한 얘기지만 명령어도 기억 안 난다. 당시에는 pandas 못 잃어ㅠ 했는데... 이젠 뭐 그러던가 말던가ㅎ

Fin.

728x90