### AI 추천 로직 상세 해부 이 시스템은 12만여 개의 한식 레시피 데이터를 학습한 AI가 재료의 의미와 문맥을 분석합니다. 단순히 이름이 비슷한 재료가 아닌, **'지금 이 요리에 가장 잘 어울리는'** 최적의 대안을 찾아내는 과정입니다. --- #### 💡 AI는 재료를 어떻게 이해할까요? (3차원 벡터 공간 예시) AI는 모든 식재료를 거대한 3차원 공간(실제로는 수백 차원) 속의 **'좌표(벡터)'**로 인식합니다. * **유사도가 높다는 뜻:** 이 공간에서 두 재료의 좌표가 서로 **가까운 위치**에 모여 있거나, 원점에서 뻗어나가는 **화살표의 방향이 비슷하다**는 의미입니다. 위 그림처럼 '돼지고기'와 '소고기'는 '육류'라는 비슷한 성질을 가져 공간상에서 가까운 위치에 모여 있습니다. 반면, '사과'는 성질이 다르기 때문에 멀리 떨어져 있습니다. AI는 이 **'거리와 방향의 멂과 가까움'**을 계산하여 추천에 활용합니다. --- #### 1단계. 의미 파악 (Word2Vec): "친구를 보면 너를 알 수 있어" * **핵심 원리:** AI는 재료의 맛이나 식감을 직접 알지 못합니다. 대신 **'함께 자주 쓰이는 주변 재료(문맥)'**가 비슷할수록 유사한 역할을 하는 재료로 학습합니다. * **예시 (타겟 재료: 돼지고기)** * **돼지고기**의 친구들: [간장, 마늘, 양파, 고추장, 김치, 볶기] * 🥩 **소고기 (유사도 0.85):** [간장, 마늘, 양파, 참기름, 불고기] → 겹치는 친구가 매우 많음 (비슷한 재료!) * 🐟 **고등어 (유사도 0.45):** [간장, 마늘, **무, 생강, 비린내**] → 일부 겹치지만, 다른 친구들도 많음 (조금 다른 재료) * 🍎 **사과 (유사도 0.10):** [설탕, **마요네즈, 샐러드, 아침**] → 겹치는 친구가 거의 없음 (완전히 다른 재료) #### 2단계. 문맥 이해 (Doc2Vec): "같은 조리법 상황에서의 궁합 파악" * **핵심 (코드 구현 내용):** 단순히 '이 재료가 요리에 어울리나?'를 보는 것이 아니라, **'현재의 조리방법(예: 끓이기, 볶기)'과 동일한 상황에서** 잘 어울리는지를 판단합니다. * **작동 원리 (Ver.1 DB 모드 기준):** 1. 현재 타겟 요리의 **'조리방법'(예: 끓이기)**을 확인합니다. 2. 후보 재료가 사용된 수많은 레시피 중, **같은 조리방법('끓이기')이 사용된 레시피들만 골라냅니다.** 3. 골라낸 레시피들의 좌표가 현재 타겟 요리의 좌표와 얼마나 가까운지 비교합니다. * **왜 이렇게 하나요?** 같은 재료라도 '볶을 때'와 '끓일 때'의 역할이 다르기 때문입니다. 조리법 조건을 걸어 더 정확한 문맥 파악을 합니다. #### 3단계. 통계적 적합성 (Ver.1 DB 모드 전용): "데이터 검증 (Lift)" * **역할:** 실제 데이터에서 해당 재료가 특정 **조리법**이나 **요리 카테고리**에 '유독' 많이 쓰이는지 검증합니다. (여기서 카테고리 정보도 함께 활용됩니다.) * **핵심 개념 (Lift, 향상도):** 평균적인 사용 확률 대비, 특정 조건에서 사용 확률이 얼마나 높아지는지를 봅니다. 기준값은 **1**입니다. * **판단 기준:** * **Lift > 1 (추천):** 평균보다 이 조건에서 더 자주 쓰임 (궁합이 좋음) * **Lift ≈ 1 (보통):** 평균적인 수준으로 쓰임 * **Lift < 1 (비추천):** 평균보다 이 조건에서 덜 쓰임 (궁합이 안 좋음) * **예시 (조리법: 끓이기):** 두부(Lift **> 1**, 끓일 때 필수), 상추(Lift **< 1**, 끓일 때 안 씀) --- #### 🚀 추천 알고리즘 심화: 어떻게 최적의 재료를 찾아낼까? **1. 단일 재료 대체 (Best N 찾기)** * 위 1~3단계 점수에 가중치를 적용한 **최종 종합 점수**를 계산하고, 점수가 가장 높은 순서대로 상위 N개의 재료를 추천합니다. **2. 다중 재료 대체 (최적 조합 찾기 - 빔 서치)** * 여러 재료를 동시에 바꿀 때는 경우의 수가 폭발적으로 늘어납니다. 이때 효율적인 탐색을 위해 **'빔 서치(Beam Search)'**를 사용합니다. * **작동 원리 (매 단계마다):** 1. 현재까지 구성된 조합에 새로운 재료 후보를 하나씩 추가해봅니다. 2. 새로운 조합의 점수를 계산합니다. (점수 = 현재까지의 점수 + 새 재료의 AI 점수) 3. 모든 후보 조합 중 **점수가 가장 높은 상위 K개(Beam Width)의 조합만 남기고** 나머지는 버립니다. 4. 이 과정을 목표한 재료 수만큼 반복하여 최종적으로 가장 좋은 조합을 찾아냅니다. > **💡 비유:** 어두운 숲속에서 보물을 찾을 때, 여러 갈래 길 중 가장 밝은 빛이 비추는 길 3곳(K=3)만 골라서 계속 따라가는 것과 같습니다. --- #### 🏆 최종 종합 점수 계산 예시 (가중치 적용) **(시나리오: 김치찌개(끓이기, 국/탕)에서 '돼지고기' 대신 '참치캔' 추천 시)** * **1. 의미 점수:** 0.70 × 가중치 5.0 = **3.50** * **2. 문맥 점수:** 0.95 × 가중치 1.0 = **0.95** (같은 '끓이기' 요리들과 비교) * **3. 조리 통계:** 0.90 × 가중치 1.0 = **0.90** ('끓이기' 데이터 검증) * **4. 분류 통계:** 0.85 × 가중치 1.0 = **0.85** ('국/탕' 데이터 검증) 👉 **총점:** 3.50 + 0.95 + 0.90 + 0.85 = **6.20** / (총 가중치 8.0) = **최종 적합도 77.5%** --- #### 💰 예상 원가 변동 (별도 계산) AI 점수와 별개로 제공되는 참고 정보입니다. 실시간 정확한 시세가 아닌, **사전에 정의된 재료별 상대적 가격 등급(1~5등급)**을 기준으로 계산됩니다. * **예:** 돼지고기(4등급) ➡️ 두부(2등급) 대체 시 `4 - 2 = +2` (🟢 총 +2단계 절감 예상)