Эта серия статей призвана показать, как определять электронные письма с жестким отказом с помощью методов машинного обучения. В части 1 мы рассмотрим разработку функций и исследовательский анализ.
Что такое жесткий отказ электронной почты?
Эта терминология широко используется в маркетинге и относится к возвращенным сообщениям электронной почты, которые возникают, когда сообщение электронной почты отклоняется почтовым сервером.
Есть два основных типа отскока:
- Жесткий возврат: указывает на постоянную причину недоставки. Например: получателя электронной почты не существует; доменное имя не существует или почтовый сервер заблокировал доставку.
- Мягкий возврат: указывает на временную причину недоставки. Например: почтовый ящик заполнен; почтовый сервер получателя не работает или размер сообщения электронной почты слишком велик.
Жесткие отказы могут стать большой проблемой для компаний, которым необходимо поддерживать хорошую репутацию в сфере доставки электронной почты, поскольку это может повлиять на скорость доставки. В более критических сценариях это может вызвать блокировку IP-адреса отправителя.
Целью этой серии статей является выявление нежелательных писем с использованием методов машинного обучения.
Набор данных
Набор данных содержит следующие переменные:
- электронная почта: получатель электронной почты
- flgHardBounce: флаг, указывающий, является ли получатель жестким отказом (1 = жесткий отказ).
- regDate: дата регистрации пользователя. Он может сказать нам, сколько лет регистрации
- BirthDate: дата рождения получателя.
Может быть сложно построить хороший классификатор с этими исходными переменными, поэтому нам нужно разработать некоторые функции, чтобы извлечь больше информации.
Функциональная инженерия
Во-первых, я создал ряд вспомогательных функций, которые помогут повторно использовать код в этой серии статей. Их можно найти ниже.
После импорта набора данных я понял, что у меня есть некоторые недостающие значения в моей прогнозируемой переменной, затем я решил удалить отсутствующие вхождения.
Двигаясь дальше, мне пришлось преобразовать некоторые столбцы, чтобы гарантировать правильный тип данных. Этот фрагмент кода создает новые столбцы фрейма данных с преобразованными типами данных.
В приведенном ниже фрагменте кода я создаю переменную monthsSinceRegDate, в которой будет храниться количество месяцев с даты регистрации.
В столбце age (ниже) будет храниться возраст, рассчитанный с помощью переменной BirthDate.
Пришло время извлечь некоторую информацию из сообщения электронной почты. Во-первых, давайте извлечем домен и его части (например, .com и .br).
Давайте создадим некоторые переменные, используя пользователей электронной почты. В приведенном ниже фрагменте я создаю переменные:
- percNumbersInEmailUser: процент номеров в электронной почте пользователя.
- hasNumberInEmailUser: пустышка, указывающая, есть ли в имени пользователя числа.
- emailUserCharQty: количество символов в электронном письме пользователя.
Наконец, я сохраню фрейм данных с новыми переменными в файле CSV. Таким образом, я могу использовать это в следующем разделе.
Исследовательский анализ
Теперь, когда у нас есть несколько новых функций, давайте посмотрим, насколько они подходят для нашей цели - классифицировать электронные письма на жесткие отказы или не на жесткие отказы.
Далее краткое изложение того, что нам сообщает исследовательский анализ.
- monthsSinceRegDate: для жестких отказов регистрируется больше времени, чем для наблюдений без жестких отказов;
- возраст: распределение кажется одинаковым между наблюдениями жесткого и не жесткого отскока. Наблюдений возрастом около 40 лет очень много;
- percNumbersInEmailUser: распределение кажется таким же, но в наблюдениях жесткого отказов есть наблюдения, в которых имя пользователя состоит из 100% чисел;
- emailDomain_cat: у gmail.com меньше жестких отказов по сравнению с другими категориями. Категория «Остальные» содержит большую часть наблюдений за резким отскоком;
- emailUserCharQty: распределение, кажется, одинаковое между наблюдениями жесткого и не жесткого отказов.
В следующей статье мы обучим алгоритм машинного обучения на основе этих переменных. Увидимся :)