# План полноценного преданализа датасета «Коммуникации в Городе» Основано на описании датасета: есть ежедневные коммуникации с клиентами в экосистеме «Город Т-Банка», активные/пассивные каналы, показы/клики и заказы по категориям (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-гипотез - какие данные добрать (если нужно) ---