DATA / BI — ВОСПРОИЗВОДИМАЯ АНАЛИТИКА

Все входные данные синтетические, seed=124. Это учебные агрегаты,
а не выгрузка реальной компании. Денежные значения — USD.

Запуск из распакованного архива:
python3 analytics/run_analysis.py

Требуется Python 3, внешних зависимостей нет. Скрипт не использует сеть.
Пути определяются по местоположению скрипта; рабочая папка не важна.
В results/ заново создаются portfolio.sqlite, CSV/JSON результатов
и validation.json — протокол 24 проверок. База заменяется только после
прохождения проверок. Для изменения SQL редактируйте файлы sql/ и повторите запуск.

Структура модели
- Продажи: дата × канал × категория; 1 647 строк.
  fact_sales_daily связан с dim_date, dim_channel и dim_category.
  Каждая сессия относится к одной категории входной страницы.
- Продукт: 54 строки регистраций (когорта × канал) и 486 наблюдений
  удержания (когорта × канал × возраст недели). Знаменатель регистрантов
  нельзя суммировать повторно по всем возрастам.
- Операции: дата × регион; 364 строки. Маршрут связан с регионом.
  demand = delivered + unserved, delivered <= capacity, late <= delivered.
- Деньги хранятся в целых центах. Доли — отношения сумм.

Фиксированные области расчёта результатов
Продажи и операции: сентябрь 2026, все каналы / регионы.
Продукт: 18 когорт с 1 июня по 28 сентября 2026; данные до 4 октября
включительно. Для W4 зрелы 14 когорт. Незрелые недели имеют NULL.
Сценарии: рост спроса / мощности 0/0, 10/0, 10/15, 50/15, -20/50 (%).
Каждая строка округляется до целого. Дополнительная мощность стоит
$2.50 за дневную единицу. Это условная модель, не прогноз и не ROI.

Запросы SQL параметризованы. Сохранённые параметры видны в run_analysis.py.
00_schema.sql — измерения, факты, ограничения и представления;
01–07 — метрики и сценарии; 08 — качество; 09–11 — извлечение строк.
Веб-дашборды используют извлечённые строки и считают фильтры в браузере.
SQLite — локальная аналитическая модель, не сервер, подключённый к сайту.

Дополнительный режим для полной авторской рабочей папки:
python3 analytics/run_analysis.py --sync-dashboards
Обновляет соседние <проект>/src/data.json только при совпадении исходных
значений; сохраняет идентичность и порядок строк. В статическом архиве
этих исходников нет: используйте обычный запуск без --sync-dashboards.
После синхронизации нужны завершение buildStatus и сборка приложений
по их AGENTS.md. Runtime и защищённые файлы не редактируются.

Проверки: первичные/внешние ключи, CHECK-ограничения, зерно, зрелость,
нулевые сценарии, пять независимых сверок сценариев, денежные суммы,
корректный знаменатель удержания и полное совпадение 2 497 входных строк.
Генератор исходного демо доступен в source-tools/prepare_portfolio.py
в полной рабочей папке; canonical inputs/ — фиксированные снимки для SQL.

Ограничения: нет сырых транзакций, затрат на рекламу, пользовательских
событий и случайного эксперимента. Нельзя делать выводы о CAC/LTV,
причинности, реальном эффекте для клиента или точности прогноза.
Код и кейсы подготовлены с помощью Codex; интерфейс использует
стандартный runtime Data Analytics. Собственный вклад в портфолио
следует описывать по фактически выполненной и понятой вами работе.
