feat(generator): добавлена модель связанного визита
- Зачем: - генератор должен создавать учебно полезный визит с общим click_id, правдоподобным путём и честным тиковым бюджетом событий. - Что: - добавлена марковская цепочка страниц, запланированные метки времени и потолок GEN_MAX_SESSION_EVENTS. - добавлен набор тикового батча из нескольких визитов до рассчитанного бюджета событий. - обновлены тесты, README, KNOWN_ISSUES и статусы задач 01/02. - Проверка: - uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q
This commit is contained in:
@@ -5,6 +5,13 @@
|
||||
> Витрины и Superset-дашборд строятся на **статическом сиде** (`data/*.jsonl`).
|
||||
> Причина — ниже. Это не «сырой код по мелочи», а концептуальный дефект
|
||||
> генеративной модели, который надо осознанно чинить перед использованием.
|
||||
>
|
||||
> **Обновление (2026-06-11):** первый срез модели визита реализован в
|
||||
> `generate_batch()`: один публичный вызов строит один `click_id` с несколькими
|
||||
> событиями, марковским путём по страницам и запланированными строго растущими
|
||||
> метками времени. Остальные пункты ниже остаются полезным историческим
|
||||
> контекстом и списком следующих шагов: популяция возвращающихся пользователей,
|
||||
> межсессионные паузы и полноценное состояние активных визитов ещё не закрыты.
|
||||
|
||||
Заметка написана при дизайне Superset-дашборда (ветка
|
||||
`docs/advanced-clickstream-course`): разбирались, почему на дашборде
|
||||
@@ -16,12 +23,13 @@
|
||||
|
||||
- **Модель интенсивности потока (сколько событий и когда) — нормальная.**
|
||||
Poisson по тикам + дневной коэффициент + jitter. Её можно оставить.
|
||||
- **Генеративная модель сущностей (кто, какая сессия, какое событие) — неверная.**
|
||||
На каждое событие штампуется свежий `click_id`, а атрибуты копируются из
|
||||
случайной сид-строки. Это уничтожает понятие визита/сессии.
|
||||
- **Вывод:** прежде чем использовать генератор как источник, переделать именно
|
||||
модель сущностей (иерархия пользователь → сессия → событие). Математику
|
||||
интенсивности трогать не обязательно.
|
||||
- **Генеративная модель сущностей исправляется по шагам.** Срез одного визита
|
||||
уже не штампует свежий `click_id` на каждое событие, но полная иерархия
|
||||
пользователь → несколько визитов → события ещё требует популяции
|
||||
возвращающихся пользователей.
|
||||
- **Вывод:** прежде чем использовать генератор как полноценный источник,
|
||||
доделать оставшиеся уровни модели сущностей. Математику интенсивности
|
||||
трогать не обязательно.
|
||||
|
||||
## Доменная модель (как задумано в DDL)
|
||||
|
||||
@@ -50,10 +58,10 @@ user_domain_id (постоянный пользователь, cookie)
|
||||
|
||||
Это адекватная модель *интенсивности во времени*. Претензий к ней нет.
|
||||
|
||||
## Корневой дефект: модель сущностей в `generate_batch()`
|
||||
## Исторический корневой дефект: модель сущностей в `generate_batch()`
|
||||
|
||||
Файл `generator/generator.py`, `generate_batch()` (стр. ~262–330). На каждое
|
||||
событие в батче:
|
||||
До среза от 2026-06-11 файл `generator/generator.py`, `generate_batch()` на
|
||||
каждое событие в батче делал примерно следующее:
|
||||
|
||||
```python
|
||||
base_browser = self.rng.choice(self.dictionary.browser_events) # случайная сид-строка
|
||||
|
||||
Reference in New Issue
Block a user