Files
dano2025/preanalysis/task.md
2025-12-12 20:19:59 +03:00

13 KiB
Raw Blame History

План полноценного преданализа датасета «Коммуникации в Городе»

Основано на описании датасета: есть ежедневные коммуникации с клиентами в экосистеме «Город Т-Банка», активные/пассивные каналы, показы/клики и заказы по категориям (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, 2534, 3544, 4554, 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. Тесты гипотез (MannWhitney / 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, 37 кластеров

Таблицы

  • кластер → размер → средние фичи → краткая интерпретация

Графики

  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(orderst, 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 для 23 ключевых фичей

12. Гипотезы и статтесты

Примеры гипотез

  1. CTR_active > CTR_passive
  2. CR различается между категориями сервисов
  3. CTR/CR различаются по полу/возрасту/платформе
  4. «заспамленность» снижает CTR/CR после порога

Таблица гипотез

  • гипотеза, H0/H1, тест, p-value, вывод, бизнес-интерпретация

Графики для поддержки — использовать из разделов 410 (барчики/боксплоты).


13. Итоговая документация

  1. Резюме выводов:
    • качество данных
    • эффективность каналов/категорий
    • сегменты, где коммуникации лучше/хуже работают
    • лаги (как быстро покупают после контактов)
    • признаки «усталости» от коммуникаций
  2. Список проблем данных и принятых решений по чистке
  3. Список инсайтов для бизнеса
  4. Список фичей для будущих моделей
  5. Следующие шаги:
    • подготовка ML-пайплайна
    • список A/B-гипотез
    • какие данные добрать (если нужно)