← 프로젝트 목록

Machine learning · Recommendation

PantryWise

사용자가 가진 재료를 기준으로 맛과 영양, 지속 가능성, 시각적 유사성을 함께 탐색한 Georgia Tech 팀 추천 프로젝트입니다.

담당
Georgia Tech CS 4641 팀 프로젝트 · 모델링과 평가 기여
공개 범위
공개 저장소
기술
LightGBM · K-Means · TF-IDF · ResNet50 · Pandas
PantryWise 저장소에 기록된 K-Means clustering evaluation 결과
tkim602/PantryWise · models/kmeans/clustering_evaluation.png
01

Context

사용자가 가진 재료를 먼저 반영하면서 맛, 영양, 지속 가능성과 visual similarity까지 함께 추천하려면 서로 다른 데이터와 평가 기준이 필요합니다. 이 팀 프로젝트에서는 TF-IDF/K-Means ranking, LightGBM와 ResNet50 image embedding을 나란히 실험하고, offline evaluation이 실제 선호를 어디까지 설명할 수 있는지 확인했습니다.

02

Engineering

ingredient text를 정규화하고 pantry coverage로 후보를 줄인 뒤 TF-IDF similarity와 model score로 순위를 만듭니다. Food.com rating과 Open Food Facts의 Nutri-Score/Eco-Score는 별도 LightGBM task로 학습하고, ResNet50 embedding은 시각적으로 비슷한 recipe image를 찾는 데 사용했습니다.

내가 맡은 일

  • 여러 추천 접근의 feature와 evaluation flow를 비교하는 모델링 작업에 참여했습니다.
  • diet label을 노출하던 feature를 찾아 제거하고 전체 evaluation을 다시 실행했습니다.
  • 최종 방법과 강한 결과, 약한 결과를 함께 팀 report와 공개 demo에 정리했습니다.

주요 기술 판단

맛, 영양, 지속 가능성을 별도 모델로 평가

세 목표는 label source와 오류의 의미가 다릅니다. 별도 모델로 예측한 뒤 ranking 단계에서 weight를 적용해 어느 목표를 우선했는지 볼 수 있게 했습니다.

99.9% accuracy를 만든 leakage 제거

초기 점수가 지나치게 높아 feature-label 관계를 다시 확인했습니다. plant_ratio와 meat_ratio가 vegan label을 사실상 노출하고 있어 두 feature를 제거한 뒤 TF-IDF ingredient semantics로 다시 학습했습니다.

03

Validation

leakage feature를 제거한 뒤 vegan accuracy는 92.5%로 다시 측정됐습니다. threshold 0.8에서는 precision 91.2%였지만 recall은 44.1%로 낮았습니다. 높은 초기 점수를 그대로 채택하지 않고 label 생성 과정부터 확인한 이유입니다.

최종 LightGBM pipeline은 nutrition hold-out에서 R² 0.923, sustainability ranking에서 Spearman 0.836을 기록했습니다. 반면 taste classification accuracy 0.625는 majority baseline 0.622와 거의 같았습니다. 강한 결과만 골라 보여 주지 않고 목표별 성능 차이를 그대로 남겼습니다.

추후 발전 방향

  • 현재 결과는 course dataset과 offline split에 기반합니다. pantry coverage와 추천 이유를 함께 보여 주는 사용자 평가를 추가해 실제 선택률과 반복 사용에서 ranking이 유효한지 확인할 수 있습니다.
  • nutrition과 sustainability label은 외부 product data를 recipe에 옮긴 근사치입니다. recipe-level ground truth를 확보하거나 label 불확실성을 ranking에 반영하고, baseline과 차이가 작았던 taste 모델은 사용자 행동 데이터가 생긴 뒤 다시 학습하는 것이 필요합니다.