Files
dano2025/README.md
2025-12-16 02:32:18 +03:00

10 KiB
Raw Blame History

DANO 2025/2026 — исследование FinalTry.exe

Аналитический проект команды FinalTry.exe: исследуем связь пользовательских коммуникаций и заказов, проверяем форму зависимости (тренд, квадратичная регрессия) по общим и категорийным метрикам. Данные лежат в dataset/ds.csv, итог — собранная SQLite, статичные PNG и интерактивные HTML-графики.

Table of Contents

Quickstart

# 1) создать окружение
python -m venv .venv
source .venv/bin/activate  # win: .venv\Scripts\activate

# 2) установить зависимости
pip install pandas numpy scipy statsmodels scikit-learn matplotlib seaborn altair vl-convert-python
# альтернатива для Altair: pip install altair_saver && установка node

# 3) подготовить данные
cp <your-ds.csv> dataset/ds.csv
python migrate.py  # соберёт dataset/ds.sqlite

# 4) запустить ключевые скрипты
python main_hypot/best_model_and_plots.py   # базовые облака/тренды (PNG)
python main_hypot/quadreg.py                # общая квадратика (PNG)
python main_hypot/category_quadreg.py       # категории: корреляции + квадратика (PNG)
python main_hypot/new_plots.py              # интерактивные HTML-графики
python new_divided_scatters.py              # интерактив: активные/пассивные/общие

Repository Tree

.
├── dataset/                # вход: ds.csv; выход: ds.sqlite
├── migrations/             # шаги подготовки данных (0001, 0002)
├── migrate.py              # исполнитель миграций
├── preanalysis/            # EDA-утилиты (нормализация, агрегаты)
├── main_hypot/             # основной пайплайн графиков/регрессий
│   ├── best_model_and_plots.py
│   ├── category_quadreg.py
│   ├── quadreg.py
│   └── new_plots.py
├── new_divided_scatters.py # интерактивные облака по типам показов
├── old_data/               # архив ранних скриптов/данных (не в основном пайплайне)
└── README.md

Repository Structure Explained (folder + file guide)

  • dataset/
    • ds.csv — входной CSV (кладёте сами).
    • ds.sqlite — результат миграций, таблица communications, источник для всех скриптов.
  • migrations/
    • 0001_csv_to_sqlite.py — читает CSV чанками, нормализует дату, пишет таблицу, создаёт индексы.
    • 0002_cap_orders_to_one.py — каппинг заказов: все значения >1 приводятся к 1 по дневным категориям.
  • migrate.py — менеджер миграций (--list, --force, настраиваемые пути); обновляет migrations_state.json.
  • preanalysis/
    • eda_utils.py — нормализация пола/платформы, возрастные группы, суммарные метрики, флаги, агрегации по дням и клиентам.
  • main_hypot/
    • best_model_and_plots.py — загрузка клиентов из SQLite, фильтр выбросов, тренды LOWESS/SavitzkyGolay, плотностные облака; PNG в main_hypot/orders_amt_total/.
    • quadreg.py — накладывает квадратичную регрессию на общий график заказов; вывод в ту же папку.
    • category_quadreg.py — агрегации по категориям/комбо, корреляции и квадратичные регрессии; PNG в main_hypot/category_analysis/.
    • new_plots.py — интерактивные Altair-графики (total + категории); HTML в main_hypot/new_plots/.
  • new_divided_scatters.py — интерактивные облака активных/пассивных/общих показов; HTML в new_plots/final_result/.
  • old_data/ — архив ранних скриптов/данных, не участвует в текущем пайплайне.

Reproduce the Analysis

  1. Подготовить данные: положить dataset/ds.csv.
  2. Собрать SQLite: python migrate.py (или вручную 0001 → 0002). Итог: dataset/ds.sqlite.
  3. Базовые графики: python main_hypot/best_model_and_plots.py → PNG в main_hypot/orders_amt_total/.
  4. Общая квадратика: python main_hypot/quadreg.py → PNG в main_hypot/orders_amt_total/.
  5. Категории: python main_hypot/category_quadreg.py → PNG/корреляции в main_hypot/category_analysis/.
  6. Интерактив:
    • python main_hypot/new_plots.py → HTML в main_hypot/new_plots/;
    • python new_divided_scatters.py → HTML в new_plots/final_result/.
      Все скрипты читают dataset/ds.sqlite; без него упадут.

Methodology

  • Модели/метрики: AUC для вероятности заказа, R² по тренду, p-value и коэффициенты b1/b2 квадратичной регрессии y ~ 1 + x + x².
  • Тренды: сглаживание LOWESS или SavitzkyGolay для выявления формы зависимости.
  • Квадратичная форма: базовый способ поймать нелинейность и насыщение/спад заказов при росте показов.
  • Очистка: фильтрация выбросов по IQR и ограничение диапазонов осей.

Hypotheses

  • H0: заказы не зависят от среднего числа показов.
  • H1: больше показов → больше заказов (монотонный рост).
  • H_add: для некоторых категорий (например, avia/hotel) при высоких показах эффект насыщается или разворачивается вниз (негативный b2).
    Проверка: визуальные тренды, квадратичная регрессия, AUC/R² и значимость коэффициентов.

Results and Takeaways

  • Пайплайн выдаёт: очищенные облака, трендовые линии, квадратичные кривые и метрики AUC/R²/p-values.
  • Для total и категорий видны зоны насыщения/редкого спроса, что помогает подобрать лимиты показов.
  • Комбинации категорий (например, avia+hotel) позволяют увидеть перекрёстный спрос.
  • Плотностные альфы показывают концентрации клиентов и помогают читать облака без шума.
  • Корреляционные матрицы подсвечивают связки «показы → клики → заказы» внутри категорий. Бизнес-применение:
  1. Тестировать потолки показов в сегментах с убывающей отдачей.
  2. Приоритизировать категории с устойчивым положительным b1/b2.
  3. Для насыщенных категорий использовать частоту/каппинг или смену креативов.
  4. Отдельно мониторить avia/hotel-комбинации для выявления сезонности/пересечений спроса.
  5. Использовать AUC для оценки пригодности скорингов/сегментов на заказ.

FAQ (for the jury)

  • Что такое корреляция? Мера линейной связи (-1…1) между двумя величинами.
  • Почему корреляция ≠ причинность? Связь может быть опосредована или вызвана третьим фактором; нужны эксперименты/каузальные методы.
  • Что означает AUC? Площадь под ROC-кривой: шанс, что модель верно ранжирует случайную пару (позитив/негатив).
  • Что означает R²? Доля объяснённой вариации целевой величины моделью.
  • Почему binarize orders (0/1)? Для расчёта AUC по факту наличия заказа, независимо от суммы.
  • Ограничения исследования? Зависимость от структуры ds.csv, чувствительность SavitzkyGolay к размеру выборки, отсутствуют продакшн-оптимизации.
  • Чем отличается avia+hotel? Комбинированная категория для ловли перекрёстного спроса; может показывать насыщение или иной профиль b2.

Notes

  • Altair сохранение требует vl-convert-python или altair_saver + node.
  • SavitzkyGolay окно по умолчанию большое (~501); на малых выборках уменьшайте, иначе будет ошибка.
  • old_data/ — архив, не трогает основной пайплайн.