9.5 KiB
9.5 KiB
DANO 2025/2026 — исследование FinalTry.exe
Аналитический проект команды FinalTry.exe: исследуем связь пользовательских коммуникаций и заказов, проверяем форму зависимости (тренд, квадратичная регрессия) по общим и категорийным метрикам. Данные лежат в dataset/ds.csv, итог — собранная SQLite, статичные PNG и интерактивные HTML-графики.
Table of Contents
- Quickstart
- Repository Tree
- Repository Structure Explained
- Reproduce the Analysis
- Methodology
- Results and Takeaways
- FAQ (for the jury)
- Notes
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/Savitzky–Golay, плотностные облака; 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
- Подготовить данные: положить
dataset/ds.csv. - Собрать SQLite:
python migrate.py(или вручную 0001 → 0002). Итог:dataset/ds.sqlite. - Базовые графики:
python main_hypot/best_model_and_plots.py→ PNG вmain_hypot/orders_amt_total/. - Общая квадратика:
python main_hypot/quadreg.py→ PNG вmain_hypot/orders_amt_total/. - Категории:
python main_hypot/category_quadreg.py→ PNG/корреляции вmain_hypot/category_analysis/. - Интерактив:
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 или Savitzky–Golay для выявления формы зависимости.
- Квадратичная форма: базовый способ поймать нелинейность и насыщение/спад заказов при росте показов.
- Очистка: фильтрация выбросов по IQR и ограничение диапазонов осей.
Results and Takeaways
- Пайплайн выдаёт: очищенные облака, трендовые линии, квадратичные кривые и метрики AUC/R²/p-values.
- Для total и категорий видны зоны насыщения/редкого спроса, что помогает подобрать лимиты показов.
- Комбинации категорий (например, avia+hotel) позволяют увидеть перекрёстный спрос.
- Плотностные альфы показывают концентрации клиентов и помогают читать облака без шума.
- Корреляционные матрицы подсвечивают связки «показы → клики → заказы» внутри категорий. Бизнес-применение:
- Тестировать потолки показов в сегментах с убывающей отдачей.
- Приоритизировать категории с устойчивым положительным b1/b2.
- Для насыщенных категорий использовать частоту/каппинг или смену креативов.
- Отдельно мониторить avia/hotel-комбинации для выявления сезонности/пересечений спроса.
- Использовать AUC для оценки пригодности скорингов/сегментов на заказ.
FAQ (for the jury)
- Что такое корреляция? Мера линейной связи (-1…1) между двумя величинами.
- Почему корреляция ≠ причинность? Связь может быть опосредована или вызвана третьим фактором; нужны эксперименты/каузальные методы.
- Что означает AUC? Площадь под ROC-кривой: шанс, что модель верно ранжирует случайную пару (позитив/негатив).
- Что означает R²? Доля объяснённой вариации целевой величины моделью.
- Почему binarize orders (0/1)? Для расчёта AUC по факту наличия заказа, независимо от суммы.
- Ограничения исследования? Зависимость от структуры
ds.csv, чувствительность Savitzky–Golay к размеру выборки, отсутствуют продакшн-оптимизации. - Чем отличается avia+hotel? Комбинированная категория для ловли перекрёстного спроса; может показывать насыщение или иной профиль b2.
Notes
- Altair сохранение требует
vl-convert-pythonилиaltair_saver+ node. - Savitzky–Golay окно по умолчанию большое (~501); на малых выборках уменьшайте, иначе будет ошибка.
old_data/— архив, не трогает основной пайплайн.