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