Методология
Как мы считаем
Короткий ответ: мы показываем диапазоны и уровни уверенности, потому что точное число о еде почти всегда выдумано. Длинный ответ — ниже, с примерами и правилами, по которым работает каждая цифра на этом сайте и в приложении.
Почему не одно точное число
Русскоязычные таблицы калорийности отвечают с точностью до десятой доли: «борщ — 57,7 ккал». Эта точность не заработана. Борща вообще не существует — есть постный борщ у одного человека и борщ на говяжьей грудинке со сметаной у другого, и между ними разница втрое. Точное число не просто неточно: оно скрывает главное — от чего цифра зависит.
То же с щами и гороховым супом — у каждого свой разброс и свой набор причин, и он расписан прямо на их страницах, а не спрятан за одной цифрой.
Поэтому у каждого блюда мы показываем диапазон и список того, что двигает цифру внутри него. Диапазон — это не «мы не знаем». Это «вот в каких пределах живёт настоящий ответ, и вот почему».
Откуда берутся диапазоны
Для каждого блюда мы берём распространённые варианты приготовления и считаем состав по ингредиентам. Границами диапазона становятся самый лёгкий и самый сытный из массовых вариантов. Экзотические версии внутрь не входят — иначе диапазон растянулся бы так, что перестал бы что-либо значить. Диапазон шире, чем втрое, ничего не сообщает, и мы таких не публикуем.
У продуктов, где жирность стоит прямо в названии — «творог 5%», «молоко 2,5%», — мы, наоборот, показываем точку. Рисовать там неопределённость значило бы изображать незнание, которого нет. Мы против ложной точности, а не против точности.
Три источника, а не одна таблица
На сайте нет единой базы, из которой берутся все цифры. Есть три источника, и у каждого своя работа: один описывает продукт, второй — потребность человека, третий вообще не таблица, а расчёт. Перепутать их — частая логическая ошибка в статьях о питании: норму принимают за состав еды, а к рецепту ищут готовую строку там, где её нет и быть не может.
Состав продукта на 100 г — курицы, творога, риса — мы сверяем с USDA FoodData Central, открытой базой Минсельхоза США в статусе public domain: состав курицы не зависит от гражданства, а лицензия снимает вопрос, можно ли цифрой пользоваться. Американские порции и русские бытовые меры не совпадают, поэтому значения не копируются — под наши меры они пересчитаны заново, и уже из этого справочника собран каталог продуктов.
Суточная норма — другой вопрос, и таблица состава на него не отвечает: она про еду, а не про потребности человека. Для норм мы берём МР 2.3.1.0253-21 «Нормы физиологических потребностей в энергии и пищевых веществах для различных групп населения Российской Федерации» — документ Роспотребнадзора 2021 года, ныне действующий. Он стоит за нашими калькуляторами нормы, но ни разу — за калорийностью конкретной еды.
У готового блюда источника-таблицы нет вовсе — ни в USDA, ни в МР 2.3.1.0253-21 строки «борщ — столько-то ккал» нет и быть не может: оба документа про сырьё и про нормы, а не про чужую кастрюлю. Поэтому калорийность блюда мы каждый раз считаем заново — по составу ингредиентов типовой рецептуры, как описано выше, — и получаем диапазон, а не цифру, списанную из чужой таблицы.
Что задаёт ширину диапазона
Ширина диапазона — не свойство блюда «в среднем», а прямое следствие того, сколько в его рецепте независимых решений о жире. Жир даёт девять килокалорий на грамм — больше чем вдвое против четырёх у белка и углеводов, поэтому решение «положить жир или нет» двигает итог сильнее любого другого выбора в рецепте.
Если такое решение одно, диапазон получается умеренным. У плова он 150–240 ккал на 100 г, то есть ×1,6: варианты отличаются в основном тем, сколько масла и жирного мяса положили, — один рычаг. У пельменей та же картина: 200–290, ×1,45 — постный фарш против жирного со сметаной сверху, снова одно решение.
У супов решений несколько, и они не складываются, а перемножаются: бульон постный или на жирном мясе, зажарка на масле — класть или нет, ложка сметаны в тарелке — да или нет. Три независимых решения подряд растягивают диапазон сильнее, чем одно, даже если каждое само по себе скромное. Поэтому у борща 30–75 ккал, ×2,5, а у горохового супа 45–125, ×2,78 — самый широкий диапазон среди всех наших блюд. Шире мы не публикуем нигде: правило «не больше чем втрое» — это и есть потолок, в который почти упирается перемножение трёх решений подряд.
Диапазон не зависит от размера порции: он посчитан на 100 г, а порция — отдельное число рядом. Не зависит он и от длины списка ингредиентов — у плова их не меньше, чем у борща, а диапазон вдвое уже. И наоборот, там, где решений о жире нет вовсе — «творог 5%», «молоко 2,5%» — жирность уже названа в имени, и мы показываем точку, а не диапазон: рисовать неопределённость там, где её не осталось, было бы так же нечестно, как прятать её за одним числом там, где она есть.
Почему мы не копируем чужие таблицы калорийности
Проще всего было бы открыть популярную таблицу и перенести цифры к себе — в рунете десятки страниц с одинаковым «борщ — 49 ккал», списанным друг у друга. Мы этого не делаем не из принципа, а потому что готовое число нельзя разобрать назад: неизвестно, о каком борще речь — постном или на грудинке, о ста граммах или о тарелке 350 г, о сырой крупе гарнира или уже сваренной. Взяв чужую цифру, мы взяли бы вместе с ней и это незнание, только спрятанное под видом точности.
Смысл наших диапазонов не в самом диапазоне, а в том, что у каждой границы есть причина: у борща — мясо и зажарка, у плова — сколько жира ушло в казан. Чужое число такой причины не несёт, потому что таблица, из которой оно взято, чаще всего сама не знает своего рецепта — она получила цифру от предыдущей таблицы, а та от ещё одной. Разброс калорийности одного и того же блюда между приложениями — не ошибка измерения, а как раз след этой цепочки непроверенных допущений; подробный разбор — в статье «Почему у одного блюда в разных приложениях разная калорийность».
Готовыми мы берём только цифры состава отдельных продуктов из официальных справочников — это измеримый факт, который можно свериться по Атуотеру, а не чей-то расчёт целого блюда. Между составом гречки и «калорийностью гречки с курицей» из соседнего приложения та же разница, что между сырьём и чужим обедом: во втором уже намешаны чей-то рецепт, чья-то порция и чьё-то округление. Диапазон мы складываем из первого, а не переносим готовым второе.
Проверка, которую проходит каждая цифра
Калорийность обязана сходиться с белками, жирами и углеводами по формуле Этуотера: четыре килокалории на грамм белка и углеводов, девять — на грамм жира; клетчатка почти не усваивается и вычитается. Эта сверка встроена в наши тесты: цифра, у которой энергия не бьётся с составом, на сайт не попадает. Самая частая ошибка таблиц — опечатка в разряде, «170 граммов белка» вместо семнадцати, — так не проходит.
Отдельная проверка — крупы. В таблицах гречка часто указана сухой: 343 ккал. Дома на весы попадает готовая каша: 110 ккал. Перепутать — значит ошибиться втрое, поэтому крупы у нас всюду в отварном виде, а пересчёт сухого в готовое — отдельной строкой. Что ещё стоит взвешивать, а что можно на глаз без потери точности — в руководстве «Как считать калории».
Как страница проверяется перед публикацией
Черновик страницы никогда не становится страницей сайта сам. Между текстом и тем, что видит поисковик, стоят два разных прохода — автоматическая проверка и человек, который читает текст глазами. Они ловят разное: один считает, другой судит на глаз, и ни один не заменяет другой.
Автоматика сверяет калорийность блюда с белками, жирами и углеводами по формуле Этуотера, следит, чтобы диапазон не получился шире, чем втрое, и не пропускает вариант приготовления за пределами объявленных границ. Она же не даёт странице выйти тоньше уже написанных: у блюда, карточки продукта, термина словаря и статьи — свой порог по числу слов, которые пришли из данных именно этой позиции, а не из общего шаблона раздела.
Человек проверяет то, что автоматика посчитать не умеет: правдоподобны ли числа на вид, не появилось ли медицинских формулировок, не повторяет ли страница по смыслу уже написанную, не сбился ли тон в мотивационный. Единственная найденная за всё время числовая ошибка — калорийность плова на сто граммов, поданная как калорийность порции, — прошла автоматическую проверку целиком: диапазон не был перевёрнут, состав сходился сам с собой. Заметили её глазами, и это ровно та ошибка, ради которой второй проход существует.
Поэтому до обоих проходов ни один текст не публикуется сам: черновик живёт в отдельной ветке и попадает в основную версию сайта только после того, как оба прохода пройдены. Так же проверялось и объяснение того, что такое диапазон КБЖУ, прежде чем стать страницей словаря.
Опубликованное тоже не застывает: если источник меняет цифру, мы правим её вместе с датой обновления и не переписываем текст молча. Как мы обновляем числа, когда источник изменился.
Уверенность AI-разбора — словами, не процентом
Когда еду разбирает модель по фотографии, мы показываем уровень уверенности: высокая, средняя, низкая. Не «92%» — модель такого числа не сообщает, и процент был бы выдуманным. Там, где уверенность не высокая, под итогом стоит диапазон и уточняющий вопрос, который его сузит. Уверенный разбор — просто число, без диапазона: неопределённость мы показываем тогда, когда она есть, а не для стиля. Насколько вообще можно доверять такому разбору — отдельный текст.
Уверенность всего разбора равна уверенности худшей позиции. Если модель уверена в гречке, но не уверена в соусе, честная оценка тарелки — «не уверена»: итог не может быть надёжнее самого слабого слагаемого.
Стартовый план — формула с границами, а не приговор
Суточную норму мы считаем по формуле Миффлина-Сан Жеора — той, что используется как отправная точка в клинической практике, — и показываем её диапазоном с наиболее вероятным значением. Формула линейна, а обмен веществ связан с размером тела нелинейно, поэтому у очень крупных и очень миниатюрных людей она систематически ошибается. Это не повод её выбросить — это повод не верить ей до килокалории.
Ориентиры по белку и клетчатке согласованы с российскими нормами физиологических потребностей (МР 2.3.1.0253-21) и общепринятыми рекомендациями: белок — коридором от 1,2 до 2,0 г на килограмм веса, а не одной цифрой.
План подстраивается по вашим данным
Любая формула — оценка по населению, а не по вам. Настоящий расход энергии виден только из динамики: сколько вы едите и как при этом меняется тренд веса. Поэтому план в приложении корректируется по факту — маленькими шагами по 150 ккал, не чаще чем при накопленных данных минимум за пять дней, с накопленным пределом в 450 ккал и всегда с вашего подтверждения. При снижении веса обмен замедляется сильнее, чем объясняется потерей массы, — адаптивная цель учитывает и это, чего разовая формула не умеет в принципе.
Вес при этом мы оцениваем трендом, а не сегодняшней цифрой на весах: суточные колебания воды и содержимого желудка — до килограмма-полутора, и решение, принятое по одному взвешиванию, — это решение, принятое по шуму.
Чего мы не делаем
Мы не называем еду «хорошей» и «плохой», не обещаем результат к дате и не даём медицинских утверждений: мы считаем еду, а не лечим. Числа, которые нельзя проверить, мы не публикуем; источники, в которых не уверены, не цитируем. Если где-то на сайте вы нашли цифру, которая не сходится, — напишите нам: сверка цифр и есть наша работа.
«Живое Тело» — сервис для самонаблюдения за питанием. Это не медицинское изделие: сервис не ставит диагнозы, не назначает лечение и не заменяет консультацию врача или диетолога. Подробнее о границах сервиса →