Skip to content

AlishAzimov/Nutritionist_AI

Repository files navigation

Nutritionist_AI

Проект по разработке ML-системы для классификации блюд, анализа пищевой ценности ингредиентов и рекомендации рецептов с возможностью генерации сбалансированного дневного меню через CLI-приложение.

В рамках проекта реализован модуль recipes.py, включающий классы для машинного обучения, анализа нутриентов, рекомендаций рецептов и генерации дневного меню, а также CLI-интерфейс nutritionist.py для пользовательского взаимодействия.


Описание проекта

Цель проекта — построить прикладную систему, объединяющую:

  • ML-классификацию блюда по списку ингредиентов
  • Анализ пищевой ценности (в % Daily Value)
  • Рекомендательную систему рецептов
  • Генерацию сбалансированного дневного меню
  • CLI-интерфейс для удобного использования

Проект демонстрирует навыки построения end-to-end ML-pipeline: от подготовки данных и обучения модели до продакшен-логики и пользовательского интерфейса.


Архитектура решения

Ядро проекта — модуль recipes.py, внутри которого реализованы классы:

NutritionPredictor

ML-модель для классификации блюда по ингредиентам.

Реализовано:

  • Загрузка stacking-модели (CatBoost + XGBoost)
  • Масштабирование признаков (StandardScaler)
  • Label encoding
  • Бинарная векторизация ингредиентов
  • Обработка ошибок ввода

Классы:

  • bad
  • so-so
  • great

NutritionFacts

Модуль анализа пищевой ценности.

Реализовано:

  • Загрузка таблицы %DV по ингредиентам
  • Поиск совпадающих ингредиентов
  • Вывод нутриентов в формате:
Nutrient — X% of Daily Value
  • Обработка отсутствующих ингредиентов

RecipeRecommender

Система рекомендаций рецептов.

Алгоритм:

  • Подсчет score на основе совпадений ингредиентов в:
    • названии
    • поисковом запросе
  • Дополнительная сортировка по рейтингу
  • Удаление дубликатов
  • Формирование Top-3 рекомендаций

MenuGenerator

Генерация сбалансированного меню на день.

Логика:

  • Разделение рецептов на:
    • breakfast
    • lunch
    • dinner
  • Подсчет суммарного %DV по всем нутриентам
  • Исключение рецептов с превышением 100% по любому нутриенту
  • Сортировка по рейтингу и нутриентному покрытию
  • Случайный выбор из top-N лучших

Результат — автоматически сформированное дневное меню с:

  • ингредиентами
  • нутриентами
  • ссылкой на рецепт

CLI-интерфейс

Файл nutritionist.py реализует два режима работы.

Режим 1 — По ингредиентам

Запуск:

python nutritionist.py chicken, rice, tomato

Пример взаимодействия:

I. OUR FORECAST
Nice! That looks like a tasty and promising combination!
-------

II. NUTRITION FACTS
Chicken
Protein - 54% of Daily Value
Iron - 12% of Daily Value
-------
Rice
Carbohydrates - 28% of Daily Value
-------
Tomato
Vitamin C - 21% of Daily Value
------

III. TOP-3 SIMILAR RECIPES:
- Chicken Rice Bowl, rating: 4.6, URL:
https://example.com/recipe1
------
- Tomato Chicken Skillet, rating: 4.4, URL:
https://example.com/recipe2
------
- Healthy Rice & Chicken, rating: 4.2, URL:
https://example.com/recipe3
------

Режим 2 — Без аргументов (генерация меню)

Запуск:

python nutritionist.py

Пример взаимодействия:

No ingredients provided.
If you want to search by ingredients: ./nutritionist.py ingredient1, ingredient2, ...

IV. DAILY MENU SUGGESTION
Generating a balanced daily menu based on our full recipe database...

BREAKFAST
------------------------------
Oatmeal with banana (rating: 4.5)
Ingredients:
- oatmeal
- banana
Nutrients:
- fiber: 32.4%
- potassium: 18.1%
URL: https://example.com/breakfast

LUNCH
------------------------------
Grilled chicken salad (rating: 4.7)
Ingredients:
- chicken
- lettuce
- tomato
Nutrients:
- protein: 48.3%
- vitamin C: 22.7%
URL: https://example.com/lunch

DINNER
------------------------------
Baked salmon with vegetables (rating: 4.8)
Ingredients:
- salmon
- broccoli
- carrot
Nutrients:
- protein: 52.1%
- omega-3: 65.4%
URL: https://example.com/dinner

Основные сложности и как я их решал

1. Векторизация ингредиентов

Проблема:
Пользователь вводит ингредиенты в произвольном формате (разный регистр, пробелы, короткие слова, отсутствующие в базе).

Как я решил:

  • Привел все ингредиенты к lowercase
  • Удалил лишние пробелы
  • Сопоставил ввод с feature_list
  • Добавил проверку на отсутствие совпадений
  • Реализовал выброс ValueError при некорректном вводе

Это позволило сделать модель устойчивой к некорректным данным.


2. Несоответствие ингредиентов и рецептов

Проблема:
В названиях рецептов используются разные формулировки (например, "grilled chicken breast" вместо "chicken").

Как я решил:

  • Объединил title и searched_query
  • Разбил текст по запятым и пробелам
  • Нормализовал слова
  • Фильтровал только известные ингредиенты

Это позволило повысить точность рекомендаций.


3. Баланс нутриентов

Проблема:
Некоторые рецепты превышали 100% по отдельным нутриентам, что нарушало логику "сбалансированного меню".

Как я решил:

  • Реализовал подсчет суммарного %DV
  • Добавил проверку превышения 100% по каждому нутриенту
  • Исключал такие рецепты из кандидатов
  • Сортировал оставшиеся по рейтингу и покрытию

В результате меню стало более реалистичным.


4. Интеграция ML-модели в CLI

Проблема:
Модель обучалась отдельно, но требовалась ее интеграция в прикладной интерфейс.

Как я решил:

  • Сериализовал модель через joblib
  • Инкапсулировал всю ML-логику в класс NutritionPredictor
  • Разделил бизнес-логику и CLI
  • Добавил обработку исключений

Это позволило создать полноценное прикладное ML-приложение.


5. Производительность

Проблема:
Перебор всех рецептов мог замедлять выполнение.

Как я решил:

  • Оптимизировал фильтрацию кандидатов
  • Исключал рецепты без совпадений на раннем этапе
  • Минимизировал лишние преобразования

Используемые технологии

  • Python 3
  • Pandas
  • NumPy
  • Scikit-learn
  • CatBoost
  • XGBoost
  • Joblib
  • CLI (sys.argv)
  • Объектно-ориентированное программирование

Результат

  • Реализована end-to-end ML-система
  • Построен CLI-интерфейс
  • Реализована рекомендательная логика
  • Создан генератор сбалансированного меню
  • Продемонстрированы навыки проектирования архитектуры, обработки данных, построения ML-моделей и интеграции их в прикладное приложение

About

Проект по разработке ML-системы для классификации блюд, анализа пищевой ценности ингредиентов и рекомендации рецептов с возможностью генерации сбалансированного дневного меню через CLI-приложение.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors