Методология8 мин чтения

Откуда мы берём данные о питательной ценности: 8 баз, один каталог

8 открытых баз пищевой композиции, как мы их сводим в единый каталог из 845+ продуктов с 38 нутриентами и какие методические компромиссы за этим стоят.

Карта 8 источников пищевой композиции — USDA, Ciqual, CoFID, AFCD, Frida, Matvaretabellen, CNF

«Сколько калорий в яблоке?» — простой вопрос с непростым ответом. Зависит от сорта, спелости, происхождения и того, кто измерял. Цифры на этикетках, в учебниках и приложениях иногда расходятся в 1,5–2 раза. Эта статья — про то, как мы в Vnutri пытаемся этот разрыв закрыть.

Каталог Vnutri — 845+ повседневных продуктов и 340 блюд с 38 нутриентами на каждый. Под ним — 8 кураторных, лицензионно-открытых баз пищевой композиции, сведённых в единый набор. Здесь — какие именно базы, почему именно они и как мы их объединяем.

Что такое база пищевой композиции

Food composition database — это лабораторно-измеренные данные о содержании нутриентов в продуктах. Каждая запись — конкретный продукт (например, «Apple, raw, with skin, including foods for USDA's Food Distribution Program») с десятками или сотнями колонок нутриентов на 100 г.

Эти базы строят государственные институты: USDA в США, ANSES во Франции, FSANZ в Австралии и т. д. Сбор данных — это инструментальный анализ (HPLC для витаминов, ICP-MS для минералов, газовая хроматография для жирных кислот) на регулярной выборке продуктов. Это дорого: типичная запись стоит лабораториям несколько тысяч долларов.

Поэтому большинство баз публичные — они построены на деньги налогоплательщиков, и государство обязывает делать их открытыми.

Восемь источников Vnutri

Источник Записей Лицензия Регион
USDA FoodData Central (Foundation + SR Legacy) 7 928 Public domain США
USDA FNDDS 2021–2023 (mixed dishes) 5 431 Public domain США
Canadian Nutrient File 5 690 OGL Canada Канада
UK CoFID (McCance & Widdowson 2021) 2 636 OGL v3.0 Великобритания
ANSES Ciqual 2020 2 298 Etalab Франция
Matvaretabellen 2 118 NLOD Норвегия
AFCD (FSANZ Release 3) 1 588 CC BY 3.0 AU Австралия
Frida (DTU) 1 381 Open Дания
USDA Choline DB ~25 Public domain США

Всего ~29 000 исходных записей до фильтрации.

Почему именно эти

Три критерия выбора.

  1. Открытая лицензия. Public domain, CC, OGL, NLOD. Никаких "data is provided for personal use only" — мы строим коммерческий продукт. Это исключает закрытые базы типа NEVO (Нидерланды) и некоторые университетские базы.
  2. Регулярные обновления. Базы, которые маркируются "Release 18" и обновляются раз в 3–5 лет. Это исключает архивные или одноразовые проекты.
  3. Лабораторное измерение, не recipe calculation. Из значений выбраны базы, где для большинства записей есть исходные инструментальные измерения. USDA FNDDS используется только для блюд (там значения рассчитаны из recipes, и это явно указано).

Что не включено и почему:

  • Open Food Facts (OFF) — пользовательская база, ODbL. Слишком много шума: branded products, garbled names, no validation. Мы используем OFF только для локализации (мультиязычный словарь названий продуктов), но не для нутрициональных значений.
  • Fineli (Финляндия) — отличная база, CC BY 4.0, но CLI-доступ заблокирован, ручной экспорт пока не сделали.
  • Livsmedelsverket (Швеция) — CC0, ручной drop, отложено.
  • NEVO (Нидерланды) — закрытая лицензия.

Какие нутриенты

38 нутриентов на каждый продукт:

Энергия и макросы (10): калории, белок, жир, углеводы, клетчатка, сахара, крахмал, насыщенные/моно-/полиненасыщенные/транс-жиры, холестерин.

Минералы (10): кальций, железо, магний, фосфор, калий, натрий, цинк, медь, селен, марганец, йод.

Витамины (13): A, ретинол, D, E, K, C, B1 (тиамин), B2 (рибофлавин), B3 (ниацин), B5 (пантотенат), B6, B9 (фолат), B12.

Жирные кислоты (3): омега-3, омега-6, плюс детальные внутри жиров.

Прочее (3): холин, лактоза, гликемический индекс (где есть).

Это больше, чем показывает любой отдельный источник: USDA SR Legacy не публикует йод, USDA FDC не публикует холин, Ciqual не публикует selenium etc. Каждый нутриент собирается из тех источников, где он есть.

Как мы сводим источники

Простая агрегация — взять среднее — работает плохо. Разные базы используют разные сорта, разную методологию, разные регионы. Один и тот же «apple» в USDA и в Ciqual — это разные физические продукты.

Поэтому в Vnutri идёт кластеризация записей из всех источников в группы (продукт → сорт → состояние), затем — взвешенная медиана на нутриент внутри каждой группы.

Конкретно:

  1. Нормализация имён. Удаляем категорийные суффиксы («raw, with skin, includes…»), синонимы (yoghurt → yogurt, aubergine → eggplant), форматирование.
  2. Кластеризация. Sorted tokens + state (raw/cooked/dried) → кластерный ключ. «Black beans, cooked» из USDA и «Beans, black, cooked» из CoFID попадают в один кластер.
  3. Sanity check. Atwater-проверка: предсказанные калории (белок × 4 + жир × 9 + углеводы × 4) должны совпадать с заявленными в пределах ±25 %. Записи вне диапазона отбрасываются — это маркер ошибки в данных.
  4. Взвешенная медиана. USDA Foundation, Ciqual, CoFID, CNF, Frida, AFCD — вес 3. USDA SR Legacy, Matvaretabellen — вес 2. Медиана, а не среднее, чтобы выбросы (одна аномальная запись) не сдвигали результат.
  5. Минимум источников. Кластер должен иметь данные минимум из 2 источников. Single-source аномалии отбрасываются.

Результат — одна запись на продукт с лучшим из имеющихся данных по каждому нутриенту. Источники указаны в карточке продукта.

Покрытие нутриентов

Не всё измеряется одинаково тщательно. Покрытие 845 продуктов по группам:

Диапазон покрытия Нутриенты
100 % Калории, белок, жир, углеводы
90–95 % Клетчатка, кальций, железо, натрий, калий, магний, фосфор, ниацин, A, C, B1, B2, B6, цинк, медь, фолат, B12
85–90 % Сахара, холестерин, насыщенные/моно-/поли- жиры, марганец, селен, D
75–85 % Пантотенат, E, омега-3
60–75 % Омега-6, крахмал, транс-жиры, K
50–60 % Холин, йод

Йод и холин застряли на 50–60 % из-за лимитов источников: USDA SR Legacy не репортит йод (хотя колонка есть), холин есть только в USDA и CNF.

Что про блюда

Из ~340 блюд в каталоге часть (~150) пришли из USDA FNDDS 2021–2023 — государственной базы блюд с recipe-calculated значениями. Остальное (~190) — региональные блюда без аналога в FNDDS: borscht, pelmeni, bibimbap, dal, pho, jollof rice и т. п. Для них значения нутриентов оценены Claude Opus по типовому рецепту с лабораторно-измеренными ингредиентами из основного каталога.

Эти блюда помечены в карточке бейджем «approximate» — нутрициональный профиль из LLM-оценки, не лабораторное измерение. Точность тут заметно ниже, чем у одноингредиентных продуктов.

Локализация названий

Имена продуктов в каталоге переведены на 6 языков (en, es, ca, fr, de, ru). Источник перевода — три слоя по дешевизне.

  1. OFF taxonomy — curated multilingual food vocabulary, 4 212 entries × 100+ языков. Open Food Facts ingredients taxonomy с GitHub. Match rate ~70 %.
  2. Wikidatawbsearchentities API для редких/региональных продуктов. Tiered picker с фильтрами по P31 (instance of food).
  3. Google Cloud Translation v3 (Translation LLM) — финальный pass. Re-translates всё для исправления scientific-name leakage, согласования рода и числа.

Подробнее — как мы называем еду на 6 языках.

Что про состояния (raw vs cooked)

Один и тот же продукт в сыром и приготовленном виде — это два разных продукта по нутрициональной плотности. У варёного риса больше воды, меньше белка/калорий на 100 г, чем у сырого. У варёного шпината — выше плотность многих минералов, чем у сырого, потому что вода ушла.

В Vnutri это решено через state-variant model: у каждого продукта есть state (raw, cooked, dried, baked и т. д.) и groupId, общий для всех состояний одного продукта. В списке отображается один primary (обычно raw), на детальной — переключалка состояний.

Подробнее — почему "варёная курица" и "сырая курица" — это разные продукты.

Гликемический индекс

GI — единственный нутриент в Vnutri, который не из 8 пищевых баз. Источник — мета-анализ Atkinson 2021 (Am J Clin Nutr), International Tables of Glycemic Index and Glycemic Load Values 2021. Это самая полная систематическая компиляция GI на сегодня.

Не для всех продуктов GI определён — только для углеводсодержащих, и только если хотя бы одна лабораторная сессия зафиксирована в литературе. Около 30 % каталога имеет GI. См. гликемический индекс.

Что мы НЕ делаем

  • Не покупаем закрытые базы. Только open license.
  • Не используем user-contributed данные для нутриентов. OFF только для названий.
  • Не доверяем production label-данным. Заявленная калорийность на упаковке может отличаться от лабораторной до 20 % (FDA tolerance). Лабораторные данные точнее.
  • Не суммируем нутриенты из рецептов, кроме как для блюд категории "mixed dishes" из FNDDS.

Точность и ограничения

Чего ожидать.

Точность данных: для одноингредиентных продуктов — лабораторно-измеренные значения. Для блюд из FNDDS — recipe-calculated значения. Для региональных блюд — LLM-оценки.

Региональные различия: яблоко в США, Норвегии и Австралии — это разные физические продукты. Наша медиана сглаживает региональные эффекты. Если вы анализируете еду конкретного региона, локальная база может быть точнее.

Сортовые различия: Honeycrisp ≠ Granny Smith по сахарам и кислотности. В каталоге «apple» — медиана по сортам. Конкретный сорт нужно искать отдельно.

Готовка: «boiled potato» в каталоге усреднён по способам варки. Запеканный или жареный — другой профиль.

Старение данных: USDA SR Legacy — данные 2018 года; CoFID 2021; Ciqual 2020. Колонка yotube как недавнее не появляется быстро.

Атрибуция

Все источники цитируются на странице Acknowledgments с лицензиями. Каждый нутриент в карточке продукта может быть проследен до источника (видно в детали).

Если вы хотите использовать данные Vnutri в своём проекте — мы открыты к обсуждению. Свяжитесь: hello@vnutri.app.

Источники

  • US Department of Agriculture. FoodData Central. 2024.
  • Health Canada. Canadian Nutrient File. 2023.
  • Public Health England. McCance and Widdowson's The Composition of Foods Integrated Dataset 2021.
  • ANSES. Ciqual French food composition table. 2020.
  • Norwegian Food Safety Authority. Matvaretabellen. 2023.
  • Food Standards Australia New Zealand. Australian Food Composition Database, Release 3. 2024.
  • Technical University of Denmark. Frida Food Database. 2023.
  • Atkinson FS, Brand-Miller JC, Foster-Powell K, et al. International tables of glycemic index and glycemic load values 2021. Am J Clin Nutr. 2021;114(5):1625–1632.