Очистка и трансформация данных: фильтрация, сортировка, агрегация

Данный материал носит информационно-обучающий характер и не является юридической или финансовой консультацией. Применение полученных знаний на практике требует соблюдения законодательства и этических норм. Ответственность за любые действия, предпринятые на основе информации из курса, лежит на вас.

Мы загрузили данные из внешних источников и изучили структуру DataFrame. Теперь переходим к подготовке данных. В антифроде это критический этап: если в модель или отчет попадут «грязные» данные, выводы будут ошибочными.

Почему «грязные» данные опасны

Для исследователя очистка данных — это поиск аномалий. Мошенники маскируют активность, создавая технический шум или оставляя подозрительные пустоты в логах.

Трансформация данных превращает сырые логи в полезные признаки (фичи). Например, из точного времени транзакции можно выделить час совершения покупки. Это поможет обнаружить ночные всплески активности, нехарактерные для обычных клиентов.

Обработка пропущенных значений

Пропуски в данных (NaN — Not a Number) часто служат уликой. Например, отсутствие device_id может означать, что злоумышленник использует скрипт, который не передает параметры железа.

Обработка пропущенных значений в Pandas выполняется тремя основными способами:

  1. Поиск: определить масштаб проблемы.
  2. Заполнение: подставить нейтральное значение.
  3. Удаление: исключить записи (используйте осторожно).
# Считаем количество пропусков в каждом столбце
print(df.isnull().sum())

# Заполняем пропуски в device_id значением 'unknown'
df['device_id'] = df['device_id'].fillna('unknown')

# Удаляем строки только там, где нет критически важного user_id
df = df.dropna(subset=['user_id'])

Фильтрация и поиск аномалий

Чтобы выделить подозрительные сегменты, мы используем фильтрацию. В Pandas вместо SQL-оператора WHERE применяется логическая индексация или метод query().

Как показано в Сравнении 1, правильная фильтрация позволяет отсечь легитимный трафик и сфокусироваться на зоне риска.

Ищем «бонус-хантеров» — тех, кто покупает только при 100% скидке по промокоду.

# Вариант 1: Логическая индексация
bonus_hunters = df[(df['payment_amount'] == 0) & (df['promo_applied'] == True)]

# Вариант 2: Метод query (код читается как предложение)
suspicious_ips = df.query('failed_logins > 5 and country == "RU"')

Агрегация: выявление серийных атак

Мошенничество редко бывает единичным. Обычно это серия действий с одного устройства или на один адрес. Чтобы увидеть закономерность, используйте группировку groupby.

При анализе сумм транзакций лучше использовать медиану (median), а не среднее арифметическое (mean). Среднее значение легко искажается единичными экстремально крупными операциями, а медиана показывает реальную картину.

Выявляем «фермы аккаунтов» — устройства, с которых заходили в разные учетные записи.

# Группируем по ID устройства и считаем уникальных пользователей
device_stats = df.groupby('device_id')['user_id'].nunique().reset_index()

# Переименовываем столбцы и сортируем по убыванию
device_stats.columns = ['device_id', 'unique_users_count']
top_fraud_devices = device_stats.sort_values(by='unique_users_count', ascending=False)

Особенности работы с методами Pandas

Помните: большинство методов (dropna, fillna, sort_values) по умолчанию возвращают копию данных, а не меняют исходный объект.

Ошибка: Ожидать, что данные отсортируются в текущей переменной.

df.sort_values(by='timestamp') # Изменения не сохранятся в df

Правильно: Перезаписать переменную.

df = df.sort_values(by='timestamp')

Практическое упражнение

Используйте датафрейм df_orders и выполните задачи:

  1. Найдите строки, где отсутствует ip_address, и заполните их значением 127.0.0.1.
  2. Отфильтруйте транзакции, совершенные ночью (столбец is_night равен True), где сумма превышает 50 000 рублей.
  3. Сгруппируйте данные по card_hash, посчитайте количество транзакций для каждой карты и выведите топ-5 самых активных.

Мы научились очищать данные и находить признаки групповых атак. В следующей теме мы разберем, как из разрозненных параметров устройства собирается цифровой отпечаток (fingerprint). Это позволит идентифицировать мошенника, даже если он сменил аккаунт и IP.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram