Наивный Байесовский классификатор для фильтрации спама

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

1010

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

1
Автор

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