Использование наивного Байесовского классификатора для фильтрации спама — довольно старый и известный способ фильтрации сообщений. В его основе лежит простая идея – на обучающих данных для каждого слова в сообщении вычисляется оценка вероятности того, что письмо с этим словом является спамом и, исходя их этого, для вновь пришедшего письма на основании всех слов, вычисляется его вероятность оказаться спамом. Это модель предполагает серьезное допущение, что вероятность встретить одно слово не зависит от вероятности встретить другое слово в спамном или неспамном сообщении (отсюда и наивность в названии), однако до сих пор такой классификатор может использоваться и показывать хорошие результаты, даже по сравнению с более продвинутыми методами.
Хорошая статья о применении байесовского классификатора, но есть пара замечаний. Несколько спорным выглядит подсчёт вероятностей встречаемости слов в спам и не-спам сообщениях сразу на всем датасете. Таким образом даже используя сглаживание вы допускаете утечку таргета для сообщений из тестового множества в случае редких слов, что в дальнейшем скажется при подсчёте качества модели.
Есть ошибка в функции prob — вместо counts видимо хотели использовать её первый аргумент.
И, пожалуйста, используйте apply или loc вместо iterrows - он производит обертку каждой строки в отдельный Series и за счёт этого медленнее apply минимум в 2 раза.
Оценивать модель через точность хорошая идея, но в этой задаче нам несколько мешает дисбаланс классов - даже если бы модель всегда выдавала 0, мы бы получили 87% точности. Можно считать ROC AUC, который от этих проблем избавлен. Также легко гуглится определение оптимального порога классификации при помощи ROC кривой, если не хочется подбирать наугад.
Спасибо за комментарий! Действительно, полезные советы. Данная статья написана, чтобы скорее отразить общую идею применения такого метода, ее можно продолжать совершенствовать.
А если проверить - есть ли у письма марка? Если есть - то это дорогой спам, а если нет - то точно спам.
Письма с адресов апрувленных владельцем почтового ящика вряд ли будут спамом. Остальные - за борт.
Еще можно присылать один цифровой доллар адресату с тем чтобы если все ок, в ответ этот доллар присылался назад.
А если не ок - сами понимаете.