Skip navigation.
Sushi Knights

¿Qué es un filtro bayesiano de spam?

::

Estoy harto/aburrido/hastiado del spam en sus múltiples formas. En mi trabajo normalmente recibo alrededor de 20 spam diarios, luego de todos los filtros, tanto a nivel de servidor como de cliente. Eso no es mucho ... pero en nuestro sitio Web personal generado con Joomla, a partir de un componente muy conocido y utilizado de recepción de comentarios para artículos (AkoComment, de Arthur Konze), recibimos alrededor de 100 spam diarios... durante harto tiempo estuve probando varios componentes con filtros de distintos tipos contra el spam (ninguno funcionando adecuadamente por motivos diversos) hasta que decidí hacer un componente propio, con filtro bayesiano :)

El tema del spam es serio. De hecho, el ministerio donde trabajo es responsable de un decreto (el famoso "decreto supremo 93") que obliga a los servicios públicos a realizar ciertas tareas en pos de disminuir la cantidad de spam que llega a los servidores públicos. A nivel institucional y nacional provoca disminución de la eficiencia de los servidores, inversión en "appliances" (firewalls, IDS's y otros aparatos específicamente dedicados y adaptados para filtrar), etc., todo lo que obviamente reduda en baja de la productividad y en pérdida (relativa) de recursos.

Un filtro bayesiano funciona de la siguiente forma: cada vez que se recibe un email/mensaje/comentario, y se declara (a través de una acción explícita del usuario) que éste es spam, se observa la frecuencia relativa de cada una de las palabras del mensaje, y se calcula su probabilidad de ocurrencia, dado el hecho de que el mensaje es considerado spam. Se hace exactamente lo mismo con los mensajes que (a partir de una declaración del usuario) son considerados como no spam.

Luego, cuando ya tenemos "entrenado" a nuestro filtro con muchas palabras de spams y de no-spams, cada vez que llega un nuevo mensaje podemos pedirle que calcule la probabilidad de que éste sea spam. Eso se logra:

  • Calculando la probabilidad de que el mensaje sea un spam, dado que contiene una palabra determinada (por ejemplo, "viagra"); esto se repite para cada una de las palabras del mensaje,
  • Combinando las probabilidades anteriores en una sola.

Así, llegaremos a calcular la probabilidad de que el mensaje sea spam. A esta cifra se le llama "spamicidad": cuando esta cifra supera (por ejemplo) el 90%, estamos en la práctica seguros de que estamos frente a un spam.

¿Qué ventajas tiene un filtro bayesiano? Entre otras, las siguientes:

  • Puede ser entrenado para cada caso particular. Los mensajes que cada uno de nosotros recibimos son distintos, provienen de distintas personas, y por tanto los filtros se comportan de manera distinta en cada caso (lo que es efectivo para mí, no necesariamente lo será para ti); la gracia de un filtro bayesiano es que se adapta a cada situación,
  • Una vez entrenado, posee muy pocos "falsos positivos": esto es porque a diferencia de otros filtros, ataca la esencia del problema del spam: el contenido del mensaje.

Finalmente, dos referencias:

  • Un excelente artículo (fue clave para mí) donde se describe en la práctica cómo implementar un filtro bayesiano, y
  • El link a TmComent v1.0, mi componente de filtro bayesiano para comentarios en Joomla :)

En artículo original de Paul Graham

Has visto el proyecto al que Graham hace referencia en el artículo original sobre filtro bayesiano de Spam:
http://crm114.sourceforge.net/

me parece ... mmh ... avanzado.

Saludos

Muy bueno

Imagen de Mechón Barsa

Gran post. Un excelente artículo introductorio para conocer este tipo de filtros.

Spreading the Barsiness...
Barseo del Software