Un filtre anti-spam bayésien :
Bogofilter
Date de publication : 09/12/07
Par
Raphael Marichez
I. Un aperçu de la théorie bayésienne
II. Bogofilter à Polytechnique.org
III. Généralisations et limites
I. Un aperçu de la théorie bayésienne
Processus d'apprentissage
Tableaux de mots (tokens ou words)
rencontrés associés à :
s(w) taux d'occurrence dans les spams :
nombre de spams contenant w / nombre total de spams
h(w) taux d'occurrence dans les hams :
nombre de hams contenant w / nombre total de hams
“Un email constitué uniquement de 'w' est-il un spam ?”
p(w) = s(w) / ( s(w) + h(w) )
Optimisation de l'algorithme :
Mots rares ou encore inconnus
x : probabilité pour un mot nouveau d'apparaître dans un spam
( = connaissance générale)
s : pondération de la connaissance générale
p(w) : probabilité pour un mot connu d'apparaître dans un spam
n : nombre de mails référençant le mot w
Agrégation des scores
Cf.
Paul Graham :
Gary Robinson :
Wikipedia (en)
II. Bogofilter à Polytechnique.org
Bogofilter :
langage C
nombreuses plates-formes :
Linux, BSD, Solaris, Mac OS X, HP-UX, AIX, ...
S'interface sur Postfix, Sendmail, ...
Postfix :
/etc/postfix/master.cf :
-o content_filter=bogofilter:
bogofilter: unix - n n - 10 pipe
flags=R user=bogofilter argv=/etc/postfix/bin/script_shell.sh -f \
${sender} -- ${recipient}
Attention aux codes de retour d'erreur
/usr/bin/bogofilter -p -e -O msg.$$ || exit $EX_TEMPFAIL
ou : Proxy SMTP (clamsmtp, proxsmtp...)
/etc/bogofilter.cf
- Ajout d'un entête
- .X-Spam-Flag: {No|Unsure|Yes} scores (spamicité) :
0 -> 0.40 ; 0.40 -> 0.75 ; 0.75 -> 1
header_format = %h: %c, tests=bogofilter, spamicity=%p,\
queueID=%Q, IP=%A
Fonction de répartition
Fonction de répartition
Fonction de répartition
III. Généralisations et limites
Erreurs rapportées par les utilisateurs (0.4% de
rapporteurs réguliers)
Boîtes spam@ et nonspam@
Sur 100 messages rapportés en ~10 jours :
spam@ (faux-négatifs) :
contient 85 messages (dont 45 “Unsure”; 40 “No”)
Taux global d'erreur (non détection) : 4%
nonspam@ (faux-positifs) :
contient 15 messages (dont 14 “Unsure”; 1 “Yes”)
Taux global d'erreur (fausse détection) : 0,05 %
Mots rares ou encore inconnus
note de w :
Bogofilter (compile-time par défaut ou run-time) :
s=0.0178 et x=0.520 actuellement
s=0.0100 et x=0.415 anciennes versions
Conditions particulières :
+ : Rapidité
+ : Ensemble homogène d'utilisateurs
- : Langues étrangères
- : Contournements
- : Peu de configuration possible
Une base par utilisateur ?
Couplage à d'autres méthodes ?
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.