docs(generator): решения грилинга — корзина и уровень спроса товара
- Зачем: - приёмка #40 нашла в торговых данных два точных равенства, каких в живом магазине не бывает: событие корзины возникало ровно у визитов со страницей /cart, а внутри такого визита в корзину ложились все открытые карточки. - Что: - в спеку генератора, раздел 9, добавлен блок «Решено при исполнении #40 после приёмки»: корзина отвязана от страницы корзины, уровень спроса становится свойством товара, границы правки — вилки раздела 5. - записаны отклонённые варианты: свой процент у каждого sku и вывод склонности из цены. - в CONTEXT.md заведён термин «уровень спроса». - Проверка: - git show --stat; текст решений читается без обращения к переписке.
This commit is contained in:
@@ -84,6 +84,12 @@ _Избегать_: «покупатель» про того, кто купил
|
|||||||
`data/catalog/products.csv` — общий справочник генератора и словаря
|
`data/catalog/products.csv` — общий справочник генератора и словаря
|
||||||
ClickHouse. Форма файла решена, длина — нет: строки дописываются.
|
ClickHouse. Форма файла решена, длина — нет: строки дописываются.
|
||||||
|
|
||||||
|
**Уровень спроса**:
|
||||||
|
Свойство товара в каталоге: как часто открытую карточку кладут в корзину.
|
||||||
|
Три значения — магнит, обычный, залёживается. Постоянная часть мира, а не
|
||||||
|
поведение дня: он и делает конверсию «просмотр → корзина» по товарам и
|
||||||
|
брендам различимой.
|
||||||
|
|
||||||
**Ось модельного времени**:
|
**Ось модельного времени**:
|
||||||
Собственный календарь мира генератора. Дни считаются от фиксированного
|
Собственный календарь мира генератора. Дни считаются от фиксированного
|
||||||
первого дня D0; реальный календарь в модели не участвует. Между прогонами
|
первого дня D0; реальный календарь в модели не участвует. Между прогонами
|
||||||
|
|||||||
@@ -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) и как он делит режимы
|
- интерфейс запуска генератора (CLI / цели make) и как он делит режимы
|
||||||
|
|||||||
Reference in New Issue
Block a user