Utiliser Bayes pour développer un filtre anti-spam Eduquer le filtre antispam

Une méthode naïve

Cette méthode est assez naïve puisqu'elle se base sur un certain nombre de suggestions fausses. Il est alors possible de tromper le filtre en insérant de nombreux mots dont la valeur de spam est très faible afin de fausser le calcul. Afin d'améliorer encore un peu plus notre algorithme, nous pourrions considérer des chaînes de mots plutôt que des mots, permettant de mieux considérer le contexte.

Par exemple, si le mot "viagra" est très souvent contenu dans un spam, le mot "amour" sera (idéalement !) dans un ham. Pourtant "amour avec viagra" ne fait pas de doute sur sa qualité de "mot à spam".

Feed the filter

Il est impossible de connaître par avance les valeurs potentielles de spam de tous les mots que l'on trouvera dans une boîte mail, il va donc falloir éduquer le filtre.

Le principe est donc de constituer une base de données contenant les mots considérés et leur fréquence dans des messages que l'utilisateur aura enregistré comme spams et non spams.

On doit donc enregistrer :

 le mot,
 le nombre de fois ou le mot a été trouvé dans un spam,
 le nombre de fois ou le mot a été trouvé dans un ham,
 le nombre total de spams analysés,
 le nombre total de hams analysés.

On obtient p(foo/spam) (la probabilité que le mot foo soit dans un spam) en divisant le nombre de fois où le mot a été trouvé dans un spam par le nombre de spams analysés. p(foo/ham) s'obtient de la même manière.

Le problème des mots inconnus

Bien souvent, un e-mail contiendra un mot inconnu : soit parce que la base de données n'est pas encore suffisamment complète, soit parce que le mot est mal orthographié. Nous ne connaissons alors pas la probabilité qu'un tel mot soit contenu dans un spam, et pire, notre potentiel de spam Ps devient incalculable et n'a pas de sens (la probabilité que le mot soit dans un spam est nulle... tout comme la probabilité qu'il soit dans un ham !).

La seule solution qui s'offre à nous et d'exclure ce mot de nos calculs et de le compter une fois que le statut du message qui le contient est connu.

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