Utiliser Bayes pour développer un filtre anti-spam Passer à l'implémentation

Choix des valeurs de probabilité

Nous avons maintenant une bonne base théorique, et c'est suffisant pour proposer un filtre naïf capable de nous donner des valeurs qualifiant le potentiel de spam d'un message. Il nous reste maintenant à choisir des valeurs initiales, et à regarder les limites de ce filtre.

Nous devons réfléchir aux valeurs p(spam) et p(ham), respectivement probabilités qu'un message soit un spam ou non. On peut utiliser les valeurs enregistrées dans notre base : p(spam) correspond au nombre de messages collectés comme spam sur le nombre total de messages analysés. Cependant, ces valeurs seront très certainement incohérentes dans un premier temps (le filtre n'a pas suffisamment appris).

Je suggère de considérer qu'en dessous d'un certain nombre de messages analysés, le filtre sera neutre et considérera que "globalement", la proportions de spams et de ham est identique : p(spam)=p(ham)=0,5.

Nous devrons également choisir la valeur P (entre 0 et 1) à partir de laquelle on considérera que le message analysé est un spam. Plus la valeur sera proche de 0, plus le filtre sera sévère. Un environnement peu spammé peut se contenter d'un seuil à 0,5, sur un formulaire en ligne ou une adresse e-mail de contact, prendre un seuil plus bas (0,3 ou 0,4) sera plus efficace.

Il faut bien comprendre que notre filtre sera parfaitement inutile sans une phase d'apprentissage consistante : nous devons déterminer une base conséquente de mots dont la probabilité de présence dans un spam sera vraiment élevée. Il est toujours possible de commencer avec une liste noire de mots dont la probabilité p(mot/spam) sera fixée à une valeur élevée (0,8-0,9).

Conclusion

De nombreux systèmes anti-spam reposent sur cette technique, même si les formules sont souvent adaptées et pondérées pour être ajustés à la réalité. On pourra, je pense, utiliser la version présentée dans cette article dans un environnement moyennement spammé comme un blog.

Soyons tout de même attentif, lors de l'implémentation, aux performances : notre base de données risque de gonfler très rapidement !

Contenu réalisé par Martin Richard (Martius Web) sous licence Creative Commons.