gadem
This commit is contained in:
368
old data/preanalysis_old_bad/task.md
Normal file
368
old data/preanalysis_old_bad/task.md
Normal file
@@ -0,0 +1,368 @@
|
||||
# План полноценного преданализа датасета «Коммуникации в Городе»
|
||||
|
||||
Основано на описании датасета: есть ежедневные коммуникации с клиентами в экосистеме «Город Т-Банка», активные/пассивные каналы, показы/клики и заказы по категориям (ent, super, transport, shopping, hotel, avia), а также демография и устройство.
|
||||
|
||||
Обозначения:
|
||||
|
||||
- `*_imp_*` — показы (impressions) активных/пассивных каналов по категориям (`ent`, `super`, `transport`, `shopping`, `hotel`, `avia`).
|
||||
- `*_click_*` — клики/касания по тем же категориям.
|
||||
- `orders_amt_*` — число заказов по категориям.
|
||||
- `gender_cd`, `age`, `device_platform_cd` — демография и устройство.
|
||||
|
||||
---
|
||||
|
||||
## 0. Технический скелет проекта
|
||||
|
||||
Файлы/ноутбуки:
|
||||
|
||||
1. `01_load_and_clean.ipynb` — загрузка, чистка, базовые описания.
|
||||
2. `02_univariate_bivariate.ipynb` — распределения и связи признаков.
|
||||
3. `03_time_and_lags.ipynb` — время, лаги, сезонность.
|
||||
4. `04_clients_segmentation.ipynb` — агрегаты по клиенту, сегменты.
|
||||
5. `05_exploratory_models.ipynb` — простые модели как часть EDA.
|
||||
6. `eda_report.md` / `eda_report.ipynb` — итоговый отчёт.
|
||||
|
||||
---
|
||||
|
||||
## 1. Загрузка и структура данных
|
||||
|
||||
### Таблицы/выводы
|
||||
|
||||
1. `df.info()` — список столбцов, типы, количество ненулевых.
|
||||
2. `df.head(5)` — первые строки для визуальной проверки.
|
||||
3. Размерность:
|
||||
- `n_rows`, `n_cols`
|
||||
- `n_unique_clients = df['id'].nunique()`
|
||||
- диапазон дат: `min(business_dt)`, `max(business_dt)`
|
||||
4. Проверка ключа:
|
||||
- таблица: `df.groupby(['id', 'business_dt']).size().value_counts().head()`
|
||||
(показывает, есть ли дубликаты по ключу)
|
||||
5. Среднее число дней на клиента:
|
||||
- `df.groupby('id').size().describe()`
|
||||
|
||||
### Графики
|
||||
|
||||
1. Количество записей по датам:
|
||||
- `bar/line`: X = `business_dt`, Y = `count(*)`
|
||||
- цель: увидеть провалы/пики выгрузки
|
||||
|
||||
---
|
||||
|
||||
## 2. Качество данных и аномалии
|
||||
|
||||
### Таблицы/метрики
|
||||
|
||||
1. Пропуски:
|
||||
- таблица: колонка → количество пропусков → доля пропусков
|
||||
2. Базовый `describe` по числовым:
|
||||
- `df[num_cols].describe().T`
|
||||
3. Доля нулей:
|
||||
- таблица: колонка → доля нулей → min/max → 95-й, 99-й перцентили
|
||||
4. Логические проверки:
|
||||
- все `*_imp_*`, `*_click_*`, `orders_amt_*` должны быть `>= 0`
|
||||
- поиск отрицательных/странных значений
|
||||
5. Возраст:
|
||||
- мин/макс, перцентили (1-й, 99-й), доля мусора (например, `<14` или `>100`)
|
||||
6. Категориальные:
|
||||
- уникальные значения `gender_cd`, `device_platform_cd`
|
||||
- приведение к единому формату (trim, upper, `unknown`)
|
||||
|
||||
### Графики
|
||||
|
||||
1. Boxplot возраста:
|
||||
- Y = `age`
|
||||
- цель: выбросы и мусор
|
||||
2. Barplot пропусков:
|
||||
- X = столбец, Y = доля NaN (только где NaN > 0)
|
||||
|
||||
---
|
||||
|
||||
## 3. Одномерный анализ (univariate)
|
||||
|
||||
### 3.1. Числовые признаки (показы/клики/заказы)
|
||||
|
||||
#### Таблицы
|
||||
|
||||
1. Для каждой группы (`active_imp_*`, `passive_imp_*`, `active_click_*`, `passive_click_*`, `orders_amt_*`):
|
||||
- `count, mean, median, std, min, q25, q75, max, share_zero, p95, p99`
|
||||
2. Агрегаты по всем категориям:
|
||||
- создать `active_imp_total`, `passive_imp_total`, `active_click_total`, `passive_click_total`, `orders_amt_total`
|
||||
- таблица `describe()` для них
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Гистограммы (лог-масштаб или `log1p`) для каждой категории и типа:
|
||||
- `active_imp_ent`, `active_click_ent`, `passive_imp_ent`, `orders_amt_ent`, …
|
||||
2. Boxplot для агрегатов:
|
||||
- `active_imp_total`, `passive_imp_total`, `active_click_total`, `passive_click_total`, `orders_amt_total`
|
||||
|
||||
### 3.2. Категориальные признаки
|
||||
|
||||
#### Таблицы
|
||||
|
||||
1. Распределение `gender_cd`: counts, доли, `unknown`
|
||||
2. Распределение `device_platform_cd`: counts, доли
|
||||
3. Возрастные группы:
|
||||
- `<25`, `25–34`, `35–44`, `45–54`, `55+`
|
||||
- таблица: группа → число клиентов → доля
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Barplot пола: X = `M/F/Unknown`, Y = доля
|
||||
2. Barplot платформ: X = platform, Y = доля
|
||||
3. Гистограмма возраста
|
||||
|
||||
---
|
||||
|
||||
## 4. Время и сезонность
|
||||
|
||||
Создать дневные агрегаты:
|
||||
|
||||
- сумма показов/кликов/заказов по дням
|
||||
- метрики:
|
||||
- `CTR_active = active_click_total / active_imp_total`
|
||||
- `CTR_passive = passive_click_total / passive_imp_total`
|
||||
- `CR_click2order = orders_amt_total / (active_click_total + passive_click_total)`
|
||||
- `CR_imp2order = orders_amt_total / (active_imp_total + passive_imp_total)`
|
||||
- день недели: `day_of_week`
|
||||
|
||||
### Таблицы
|
||||
|
||||
1. `daily.describe()` по дневным агрегатам
|
||||
2. Таблица по дням недели:
|
||||
- `day_of_week` → среднее `impressions, clicks, orders, CTR, CR`
|
||||
|
||||
### Графики
|
||||
|
||||
1. Линейные временные ряды:
|
||||
- `business_dt` vs total impressions
|
||||
- `business_dt` vs total clicks
|
||||
- `business_dt` vs total orders
|
||||
2. Линии CTR/CR во времени (rolling mean 7 дней по желанию):
|
||||
- `active_ctr`, `passive_ctr`, `cr_click2order`
|
||||
3. Сезонность по дням недели:
|
||||
- barplot для `active_ctr`, `passive_ctr`, `cr_click2order`
|
||||
4. (Опционально) календарная heatmap заказов/CTR
|
||||
|
||||
---
|
||||
|
||||
## 5. Парные связи (bivariate)
|
||||
|
||||
### Таблицы
|
||||
|
||||
1. Корреляции Спирмена (на уровне клиента/дня):
|
||||
- между всеми числовыми признаками + `age`
|
||||
2. Для каждой категории:
|
||||
- биннинг показов по квантилям → средний `imp, click, CTR, orders, CR`
|
||||
|
||||
### Графики
|
||||
|
||||
1. Scatter/hexbin «показы → клики»:
|
||||
- `active_imp_*` vs `active_click_*`
|
||||
- `passive_imp_*` vs `passive_click_*`
|
||||
2. Scatter «клики → заказы»:
|
||||
- `*_click_*` vs `orders_amt_*`
|
||||
3. CTR по бинам показов (линия/бар)
|
||||
4. CR по бинам кликов (линия/бар)
|
||||
5. Heatmap корреляций
|
||||
|
||||
---
|
||||
|
||||
## 6. Демография и устройство vs эффективность
|
||||
|
||||
Агрегировать по клиенту:
|
||||
|
||||
- суммы показов/кликов/заказов
|
||||
- CTR/CR на уровне клиента
|
||||
- добавить `gender_cd`, `age_group`, `device_platform_cd`
|
||||
|
||||
### Таблицы
|
||||
|
||||
1. По полу:
|
||||
- средние `impressions, clicks, orders, CTR, CR`
|
||||
2. По возрастным группам:
|
||||
- те же метрики
|
||||
3. По платформам:
|
||||
- те же метрики
|
||||
4. Тесты гипотез (Mann–Whitney / t-test):
|
||||
- разница CTR/CR между группами
|
||||
|
||||
### Графики
|
||||
|
||||
1. Barplot CTR/CR по полу
|
||||
2. Barplot CTR/CR по возрастным группам
|
||||
3. Barplot CTR/CR по платформам
|
||||
4. Boxplot заказов по возрастным группам
|
||||
5. Stacked bar: возраст → доли категорий заказов (наполнение корзины сервисами)
|
||||
|
||||
---
|
||||
|
||||
## 7. Поведение по клиенту и сегментация
|
||||
|
||||
### 7.1. Простые сегменты
|
||||
|
||||
Флаги на уровне клиента:
|
||||
|
||||
- `has_active_comm`, `has_passive_comm`
|
||||
- `has_any_order`
|
||||
- `order_categories_count` (в скольких категориях есть заказ)
|
||||
|
||||
#### Таблицы
|
||||
|
||||
1. Сегменты каналов:
|
||||
- `only_active`, `only_passive`, `both`
|
||||
- доля клиентов, средние заказы, CTR/CR
|
||||
2. Сегменты мультикатегорийности:
|
||||
- `1`, `2`, `3+` категорий заказов
|
||||
- средние коммуникации/заказы, демография
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Barplot по сегментам каналов:
|
||||
- средние заказы, CTR/CR
|
||||
2. Barplot по числу категорий заказов
|
||||
3. Stacked bar: сегменты → пол/возраст (по желанию)
|
||||
|
||||
### 7.2. Кластеризация (расширенный EDA)
|
||||
|
||||
1. Вектор фичей:
|
||||
- суммы по категориям + CTR/CR + доли заказов
|
||||
2. Нормализация
|
||||
3. KMeans / GMM, 3–7 кластеров
|
||||
|
||||
#### Таблицы
|
||||
|
||||
- кластер → размер → средние фичи → краткая интерпретация
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Профили кластеров (bar/radar)
|
||||
2. Scatter PCA/UMAP: цвет = кластер
|
||||
|
||||
---
|
||||
|
||||
## 8. Воронка: показы → клики → заказы
|
||||
|
||||
### Таблицы
|
||||
|
||||
1. Общая воронка:
|
||||
- `channel_type`, `category`, `impressions`, `clicks`, `orders`, `CTR`, `CR_click2order`, `CR_imp2order`
|
||||
2. Воронка по сегментам:
|
||||
- пол/возраст/платформа → те же метрики
|
||||
|
||||
### Графики
|
||||
|
||||
1. Funnel chart active vs passive (общий)
|
||||
2. Barplot CTR по категориям + сравнение active/passive
|
||||
3. Barplot CR по категориям + сравнение active/passive
|
||||
4. Funnel/Bar по возрастным группам
|
||||
|
||||
---
|
||||
|
||||
## 9. Временные лаги между коммуникациями и заказами
|
||||
|
||||
С учётом «поздних покупок» (особенно travel).
|
||||
|
||||
### 9.1. Лаги на дневном уровне
|
||||
|
||||
#### Таблицы
|
||||
|
||||
1. Лаговые признаки `lag1..lag7` для показов/кликов
|
||||
2. Кросс-корреляция:
|
||||
- lag → corr(orders*t, impressions*{t-lag})
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Линия «lag vs корреляция» по:
|
||||
- `hotel`, `avia` (и др. при желании)
|
||||
- active vs passive
|
||||
|
||||
### 9.2. Лаги на клиентском уровне
|
||||
|
||||
#### Таблицы
|
||||
|
||||
1. `first_imp_date`, `first_click_date`, `first_order_date`
|
||||
2. `days_to_order`
|
||||
3. Квантили `days_to_order` по категориям
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Гистограмма/ECDF `days_to_order` по категориям
|
||||
|
||||
---
|
||||
|
||||
## 10. Мультиканальность и «заспамленность»
|
||||
|
||||
### Таблицы
|
||||
|
||||
1. `contact_days`, `avg_impressions_per_contact_day`, `max_impressions_per_day`
|
||||
2. Бины по `avg_impressions_per_contact_day` → средний CTR/CR
|
||||
|
||||
### Графики
|
||||
|
||||
1. Гистограмма `avg_impressions_per_contact_day`
|
||||
2. Линия/бар: CTR/CR vs уровень спама
|
||||
|
||||
---
|
||||
|
||||
## 11. Простые модели как часть EDA
|
||||
|
||||
### 11.1. Бинарная модель «есть заказ / нет заказа»
|
||||
|
||||
Target:
|
||||
|
||||
- `has_any_order`
|
||||
|
||||
Features:
|
||||
|
||||
- суммы показов/кликов по типам и категориям
|
||||
- CTR/CR
|
||||
- демография и платформа
|
||||
|
||||
#### Таблицы
|
||||
|
||||
1. Логистическая регрессия:
|
||||
- коэффы, p-value, odds ratio
|
||||
2. Feature importance из дерева/лесов
|
||||
|
||||
#### Графики
|
||||
|
||||
1. Barplot важностей
|
||||
2. (Опционально) partial dependence для 2–3 ключевых фичей
|
||||
|
||||
---
|
||||
|
||||
## 12. Гипотезы и статтесты
|
||||
|
||||
### Примеры гипотез
|
||||
|
||||
1. `CTR_active > CTR_passive`
|
||||
2. CR различается между категориями сервисов
|
||||
3. CTR/CR различаются по полу/возрасту/платформе
|
||||
4. «заспамленность» снижает CTR/CR после порога
|
||||
|
||||
### Таблица гипотез
|
||||
|
||||
- гипотеза, H0/H1, тест, p-value, вывод, бизнес-интерпретация
|
||||
|
||||
Графики для поддержки — использовать из разделов 4–10 (барчики/боксплоты).
|
||||
|
||||
---
|
||||
|
||||
## 13. Итоговая документация
|
||||
|
||||
1. Резюме выводов:
|
||||
- качество данных
|
||||
- эффективность каналов/категорий
|
||||
- сегменты, где коммуникации лучше/хуже работают
|
||||
- лаги (как быстро покупают после контактов)
|
||||
- признаки «усталости» от коммуникаций
|
||||
2. Список проблем данных и принятых решений по чистке
|
||||
3. Список инсайтов для бизнеса
|
||||
4. Список фичей для будущих моделей
|
||||
5. Следующие шаги:
|
||||
- подготовка ML-пайплайна
|
||||
- список A/B-гипотез
|
||||
- какие данные добрать (если нужно)
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user