From fbffeda5eae6846b58aa21a25a5d3b04eaa7f340 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Sun, 2 Aug 2026 21:06:51 +0300 Subject: [PATCH] =?UTF-8?q?docs(generator):=20=D1=80=D0=B5=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B3=D1=80=D0=B8=D0=BB=D0=B8=D0=BD=D0=B3?= =?UTF-8?q?=D0=B0=20=E2=80=94=20=D0=BA=D0=BE=D1=80=D0=B7=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D1=83=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D0=B0=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - приёмка #40 нашла в торговых данных два точных равенства, каких в живом магазине не бывает: событие корзины возникало ровно у визитов со страницей /cart, а внутри такого визита в корзину ложились все открытые карточки. - Что: - в спеку генератора, раздел 9, добавлен блок «Решено при исполнении #40 после приёмки»: корзина отвязана от страницы корзины, уровень спроса становится свойством товара, границы правки — вилки раздела 5. - записаны отклонённые варианты: свой процент у каждого sku и вывод склонности из цены. - в CONTEXT.md заведён термин «уровень спроса». - Проверка: - git show --stat; текст решений читается без обращения к переписке. --- CONTEXT.md | 6 +++++ docs/specs/2026-08-01-generator.md | 42 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/CONTEXT.md b/CONTEXT.md index 61637b2..daef449 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -84,6 +84,12 @@ _Избегать_: «покупатель» про того, кто купил `data/catalog/products.csv` — общий справочник генератора и словаря ClickHouse. Форма файла решена, длина — нет: строки дописываются. +**Уровень спроса**: +Свойство товара в каталоге: как часто открытую карточку кладут в корзину. +Три значения — магнит, обычный, залёживается. Постоянная часть мира, а не +поведение дня: он и делает конверсию «просмотр → корзина» по товарам и +брендам различимой. + **Ось модельного времени**: Собственный календарь мира генератора. Дни считаются от фиксированного первого дня D0; реальный календарь в модели не участвует. Между прогонами diff --git a/docs/specs/2026-08-01-generator.md b/docs/specs/2026-08-01-generator.md index 49ae360..c7b6f9a 100644 --- a/docs/specs/2026-08-01-generator.md +++ b/docs/specs/2026-08-01-generator.md @@ -719,6 +719,48 @@ pytest-тест с маркером `perf` и таймаутом-обрубан которого в плоских колонках нет; строки живут в справочниках рядом с устройствами и городами, а не сочиняются на месте. +Решено при исполнении #40 после приёмки (2026-08-02) — грилинг тождества +«просмотр → корзина». Приёмка нашла два точных равенства: каждое в живых +данных не встречается и потому читается аналитиком как склейка в разметке, +а не как поведение людей. + +- **Корзина отвязана от страницы корзины.** Замерено до правки (день 2 + канонического мира): множества «визиты с событием корзины» и «визиты со + страницей `/cart`» совпадали в точности — 802 и 802. Событие корзины + возникало только у визита, дошедшего до воронки, то есть факт добавления + идеально предсказывался более поздним просмотром страницы. Теперь + положить может любой визит, открывший карточку; страница `/cart` + остаётся шагом воронки и решается как прежде, а заказ по-прежнему + рисуется только у визита, дошедшего до подтверждения. Оговорка, без + которой появилась бы новая ложь вместо старой: у визита, дошедшего до + `/cart`, хотя бы одна позиция в корзине есть всегда — страница корзины + при пустой корзине невозможна. Брошенные корзины в мире были и до правки + (в том же дне 802 корзины против 272 покупок); правка добавляет к ним + тех, кто положил и корзину не открывал, — самый массовый сюжет магазина. + Почему это проехало при нарезке: воронка #39 записана в терминах + страниц, #40 принял решение про события («событие корзины садится на + карточку»), но вопрос «какой визит вообще кладёт» заново не задал — + страничное правило молча переехало на уровень событий. +- **Класть или нет решает и товар, а не только визит.** До правки в + корзину ложились все карточки покупающего визита: внутри воронки 100%, + вне её 0%. Привлекательность товара измерить было нечем — конверсия + «просмотр → корзина» по sku давала чистый шум, а вопрос «какие товары + кладут чаще» ответа не имел. Теперь у товара есть уровень спроса: + колонка каталога с тремя значениями (магнит, обычный, залёживается), а + вероятности трёх уровней — числа мира рядом с остальными. Отклонено: + *свой процент у каждого из 180 sku* — рукописные числа, которых никто не + обоснует, а каталог по решению #39 дописывается механически; *выводить + склонность из цены* — жёсткая связь, в которой менти найдёт ровно то, + что мы в неё вложили, и ничего сверх. +- **Границы правки — те же вилки раздела 5**: аудитория 6–8 тыс., средний + день около 50 тыс. событий (сейчас 49,5 тыс. — запас невелик, и рост + событий корзины считается против него), конверсия визита около 2%. + Заказ рисуется из корзины, а корзина сузилась, поэтому доля брошенных + позиций (15%) и состав заказа (1,9 позиции) перемеряются вместе с + остальным: сохраняется не число, а свойство — заказ уже корзины и + однопозиционных заказов около половины. Числа канонического мира после + правки перемеряются и переписываются. + Остаётся открытым, за тикетами: - интерфейс запуска генератора (CLI / цели make) и как он делит режимы