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

Что такое жесткий отказ электронной почты?

Эта терминология широко используется в маркетинге и относится к возвращенным сообщениям электронной почты, которые возникают, когда сообщение электронной почты отклоняется почтовым сервером.

Есть два основных типа отскока:

  • Жесткий возврат: указывает на постоянную причину недоставки. Например: получателя электронной почты не существует; доменное имя не существует или почтовый сервер заблокировал доставку.
  • Мягкий возврат: указывает на временную причину недоставки. Например: почтовый ящик заполнен; почтовый сервер получателя не работает или размер сообщения электронной почты слишком велик.

Жесткие отказы могут стать большой проблемой для компаний, которым необходимо поддерживать хорошую репутацию в сфере доставки электронной почты, поскольку это может повлиять на скорость доставки. В более критических сценариях это может вызвать блокировку IP-адреса отправителя.

Целью этой серии статей является выявление нежелательных писем с использованием методов машинного обучения.

Набор данных

Набор данных содержит следующие переменные:

  • электронная почта: получатель электронной почты
  • flgHardBounce: флаг, указывающий, является ли получатель жестким отказом (1 = жесткий отказ).
  • regDate: дата регистрации пользователя. Он может сказать нам, сколько лет регистрации
  • BirthDate: дата рождения получателя.

Может быть сложно построить хороший классификатор с этими исходными переменными, поэтому нам нужно разработать некоторые функции, чтобы извлечь больше информации.

Функциональная инженерия

Во-первых, я создал ряд вспомогательных функций, которые помогут повторно использовать код в этой серии статей. Их можно найти ниже.

После импорта набора данных я понял, что у меня есть некоторые недостающие значения в моей прогнозируемой переменной, затем я решил удалить отсутствующие вхождения.

Двигаясь дальше, мне пришлось преобразовать некоторые столбцы, чтобы гарантировать правильный тип данных. Этот фрагмент кода создает новые столбцы фрейма данных с преобразованными типами данных.

В приведенном ниже фрагменте кода я создаю переменную monthsSinceRegDate, в которой будет храниться количество месяцев с даты регистрации.

В столбце age (ниже) будет храниться возраст, рассчитанный с помощью переменной BirthDate.

Пришло время извлечь некоторую информацию из сообщения электронной почты. Во-первых, давайте извлечем домен и его части (например, .com и .br).

Давайте создадим некоторые переменные, используя пользователей электронной почты. В приведенном ниже фрагменте я создаю переменные:

  • percNumbersInEmailUser: процент номеров в электронной почте пользователя.
  • hasNumberInEmailUser: пустышка, указывающая, есть ли в имени пользователя числа.
  • emailUserCharQty: количество символов в электронном письме пользователя.

Наконец, я сохраню фрейм данных с новыми переменными в файле CSV. Таким образом, я могу использовать это в следующем разделе.

Исследовательский анализ

Теперь, когда у нас есть несколько новых функций, давайте посмотрим, насколько они подходят для нашей цели - классифицировать электронные письма на жесткие отказы или не на жесткие отказы.

Далее краткое изложение того, что нам сообщает исследовательский анализ.

  • monthsSinceRegDate: для жестких отказов регистрируется больше времени, чем для наблюдений без жестких отказов;
  • возраст: распределение кажется одинаковым между наблюдениями жесткого и не жесткого отскока. Наблюдений возрастом около 40 лет очень много;
  • percNumbersInEmailUser: распределение кажется таким же, но в наблюдениях жесткого отказов есть наблюдения, в которых имя пользователя состоит из 100% чисел;
  • emailDomain_cat: у gmail.com меньше жестких отказов по сравнению с другими категориями. Категория «Остальные» содержит большую часть наблюдений за резким отскоком;
  • emailUserCharQty: распределение, кажется, одинаковое между наблюдениями жесткого и не жесткого отказов.

В следующей статье мы обучим алгоритм машинного обучения на основе этих переменных. Увидимся :)