Расчёты на кафешной салфетке
Меню кофейни с ценами 482, 591, 631 выглядит так, будто за ним стоит скрытая формула. Я потратил вечер, чтобы её найти — и главный результат в том, что её нет.
Коллеги из Москвы дразнят, что в провинции ничего толком нет, а что есть — дорого. Повод был кофейный: неровные, будто нарочно кривые цены. Не 499, не 590 — а 482, 591, 631. Первая мысль любого, кто зарабатывает на жизнь анализом: за этим прячется система. Кто-то умный вывел базовую цену и умножил на коэффициент. Разгадать бы его — и весь прайс раскроется как на ладони.
Эта первая мысль почти всегда и есть ловушка. Кейс — про то, как её распознать: не на LLM и не на A/B-платформе, а на восьми ламинированных листах, где всё видно невооружённым глазом и оттого особенно поучительно.
Скрытый множитель, которого хочется
Шесть цен с одного листа: 482, 482, 591, 631, 482, 161. Если предположить, что каждая — это круглая база, умноженная на общий коэффициент наценки, то задача сводится к подбору одного числа.
Я перебрал коэффициент по сетке. При k ≈ 1.341 базы получаются 360, 360, 440, 470, 360, 120 — все кратны десяти, максимальное отклонение 0.16%. Выглядит как разоблачение: нашли наценку в 34%, приклеенную к идеально круглому внутреннему прайсу.
Проверка занимает две строки. Гипотезу нужно столкнуть с нулевой моделью: а насколько хорошо тот же «скрытый множитель» описывает случайный прайс того же диапазона? Я взял все 65 позиций меню (честный размер выборки, а не шесть удобных точек) и прогнал ту же процедуру против тысячи случайных прайсов.
На полном наборе лучший коэффициент описывает реальное меню не лучше, чем случайные цены: p = 0.43. Красивый k=1.341 родился из четырёх точек и одного свободного параметра — это не закон, это подгонка на салфетке. Гипотеза мертва.
Настоящий сигнал прячется в последней цифре
Убить свою любимую гипотезу — половина работы. Вторая половина: посмотреть, что осталось стоять после нулевой модели. И тут меню выдаёт кое-что железобетонное.
Вот она, настоящая неровность — и она проходит проверку, которую не прошёл множитель. Но раз единый коэффициент её не объясняет, значит генератор попозиционный, а не системный. Никакого элегантного правила нет. Есть человек, который правит прайс блюдо за блюдом.
Доказательство лежит прямо на меню, шариковой ручкой:
555 → 471 · 572 → 472 · 554 → 454.
Две из трёх — ровно на сто рублей. Все на самых заметных пищевых листах. Это не дизайн-решение, это операционка: кто-то сидит и признаёт своей рукой, что переоценил готовность платить.
Внимание, маржа и цена как поза
Второй тезис москвичей — «дорого» — проверить строго нельзя: чеков нет. Но восемь листов в определённом порядке — это гипотеза самого заведения о том, как убывает внимание. Кто долистает до восьмого листа? Значит, что стоит впереди, то и ставят на поток. Посмотрим, куда что положено.
На первый взгляд — грамотно: дорогое впереди, дешёвое сзади, сезонные лисички на первом листе, где внимание максимально. Наивный аналитик скажет «отлично, ничего не трогаем» или «переставь ещё агрессивнее». Оба неправы, и вот где кейс становится про монетизацию всерьёз.
Ошибка №1: оптимизировать цену вместо маржи
Если пересортировать листы строго по убыванию цены, «взвешенная вниманием» средняя растёт всего на 3–12% (зависит от того, насколько круто падает внимание; +9% при среднем приоре) — и то это потолок. По цене раскладка почти оптимальна. Но цена — не маржа. Кофе за 259 ₽ — это себестоимость рублей сорок и маржа под 85%. Завтрак за 978 ₽ — хорошо если 30%. «Дешёвые» задние листы, скорее всего, самые прибыльные на единицу — и именно они зарыты там, где никто не листает. Спасает заведение лишь то, что кофе — покупка-цель: за ним приходят и заказывают на любом листе.
Ошибка №2: путать заявленный спрос с настоящим
Меню выдаёт, во что заведение верит про свой спрос. Яичница за 454 ₽ несёт девять платных добавок — до 1839 ₽ сверху. Хашбрауны — пять. Никто не вешает столько апселла на блюдо, которое не считает рабочей лошадкой. Десять бейджей «NEW!» сгруппированы там, куда толкают внимание. А летние напитки стоят ровно 316 ₽ впятером при разных объёмах — это не расчёт себестоимости, это единый якорь на раздел.
Наполовину использованный рычаг: позиция внутри раздела
Дорогое вынесено вперёд по листам — но не внутри раздела. Корреляция между позицией блюда в своём разделе и его ценой = −0.05, то есть ноль: верх раздела и низ раздела стоят одинаково. Классический gaze-cascade (верх раздела читают чаще) не задействован. Заведение фронт-лоадит внимание на уровне листов и забывает про него на уровне строк.
Средний чек: симуляция, а не гадание
Чеков у меня нет, поэтому среднего чека тоже нет. Но есть модель. Собираю заказ из 65 позиций как «одно блюдо + напиток + добавки», где вероятность выбора пропорциональна вниманию (лист × позиция), добавки цепляются независимо. Двадцать тысяч прогонов — и распределение чека, честно помеченное как модель на заявленном спросе, не измерение.
А теперь ради чего всё затевалось. Прогоняю модель под разными рычагами и смотрю, что реально двигает чек. Ответ отрезвляющий для всех, кто носится с ценовой психологией:
Крутилки этой модели вынесены наружу: покрути сам — вероятность напитка, attach добавок, затухание внимания, ширину апселла — и посмотри, что каждая делает с распределением чека.
Точная цена — это сигнал, а не расчёт
Вернёмся к вопросу, с которого всё началось. Есть два семейства «неровных» цен, и они означают противоположное.
Charm-цена — та, что кончается на 9 (499, 590). Она эксплуатирует left-digit effect (Thomas & Morwitz, 2005): взгляд цепляется за левую цифру, и 499 кодируется как «четыреста с чем-то», ощущается сильно дешевле пятисот. Сигнал: скидка, масс-маркет, экономия.
Точная цена — специфичная, некруглая, но не подогнанная под порог (471, 316, 631). За ней стоит price precision effect (Thomas, Simon & Kadiyali, 2010): точные цены воспринимаются меньше круглых того же порядка, потому что крупные суммы обычно круглые, а мелкие — точные, и мозг достраивает «точное = небольшое». Плюс точность сама по себе сигналит расчёт, аккуратность, ремесло.
Это меню — во втором лагере. Оно кончается на 1, а не на 9. Значит сигнал не «у нас дёшево», а «мы посчитали себестоимость до рубля, мы честные». Неровность тут — не жадность и не небрежность, а заявление о ценностях, зашитое в последнюю цифру.
Оговорка в духе всего разбора: свежие высокомощные предрегистрированные эксперименты (Escher et al., 2026) сравнили именно точные, just-below и круглые цены — и нашли эффекты неубедительными и противоречивыми, предупреждая, что прежние оценки могли быть завышены. Так что это ведущее объяснение стиля, а не доказанный факт про эту кофейню.
И вот ирония. Сигнал «мы честно посчитали» — сам по себе тоже приём. Данные показывают, что расчёт себестоимости до рубля наполовину поза: напитки якорятся плоско на 316 ₽, себестоимость там не при чём. То есть точная цена — такое же ценовое искусство, как charm-цена, просто целится в другую аудиторию. 499 говорит «тут выгодно». 471 говорит «тут считают по-честному». Оба — рассказанная цифрой история. Просто вторая продаётся дороже.
Одна дисциплина держит весь кейс: не давать уверенный неверный вердикт на чисто выглядящей поверхности. Ровное меню соблазняет ответить «тут скрытая формула» — а честный ответ иногда «воздержаться, данных нет». Ровно эту способность — распознать, когда правильный ход abstain, а не уверенный вердикт — я измеряю у языковых моделей в Blind-Contract Evals. Меню — тот же экзамен на честность, только сдаёт его человек с калькулятором. Про то, как это выглядит в решениях по A/B, — отдельная статья.
Закономерность реальна, только если переживает нулевую модель. Всё, что её не переживает, — узор, который ты нарисовал сам и принял за чужой замысел.
Чего данные не говорят. Здесь нет ни одного чека, а значит нет настоящих вероятностей продаж. Всё, что сказано выше про «спрос» и «внимание», — это гипотезы, которые заведение заложило в дизайн меню, реконструированные из артефакта. Отличать заложенную веру от измеренного факта — и есть вся суть этого разбора. Датасет из 65 позиций и 23 добавок с разметкой сигналов — открыт.