A plan for spam: detectar spam con filtrado bayesiano

Noviembre 27th, 2005

Hace ya bastante tiempo que se proponen soluciones para la detección del spam, pero una de las que más repercusión ha tenido ha sido la propuesta de Paul Graham A plan for Spam. En ella propone utilizar métodos estadísticos para calcular la probabilidad de que un mensaje sea spam o no.

Para poder utilizar estos métodos, en primer lugar es necesario tener un conjunto de mensajes de ejemplo, tanto de spam como de correo ordinario (que él denomina ham, jamón, en contraposición a spam, que además de correo basura también es una carne en lata). Estos mensajes deberán ser trozeados en tokens, trozos de texto, habitualmente palabras. Esta partición del texto es muy importante, ya que dependiendo de como la hagamos el algoritmo funcionará mejor o peor.

Una vez partido el texto en tokens determinaremos la probabilidad de que un email que contenga ese token sea spam, mediante la siguiente fórmula (código Lisp):

(let ((g (* 2 (or (gethash word good) 0)))
      (b (or (gethash word bad) 0)))
   (unless (< (+ g b) 5)
     (max .01
          (min .99 (float (/ (min 1 (/ b nbad))
                             (+ (min 1 (/ g ngood))   
                                (min 1 (/ b nbad)))))))))

Mmmm, la cosa parece que se complica. No vamos a preocuparnos demasiado de esta fórmula y pasamos a ver como calcula si un correo es spam o no. Cuando llega un correo nuevo, coge los 15 tokens más interesantes (lo que tienen una probabilidad más alejada de 0.5) y guarda esas probabilidades en una lista llamada probs.

(let ((prod (apply #'* probs)))
  (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) 
                                         (- 1 x))
                                     probs)))))

Si esta fórmula da como resultado un valor mayor de 0.9 entonces consideraremos que ese correo es spam, sino lo consideraremos como ham.

Thunderbird utiliza este mismo algoritmo, aunque ligeramente modificado, para clasificar el correo recibido. Veremos en un próximo post como funciona.

Guardado en Spam | Comentarios desactivados en A plan for spam: detectar spam con filtrado bayesiano

Los comentarios están cerrados.