Executando verificação de segurança...
19

A Plan fo Spam | Explicando de forma simples como Paul Graham revolucionou o filtro de e-mails usando matemática

A Plan for Spam é um artigo escrito por Paul Graham, em 2002, que revolucionou o combate a spam usando conceitos matemáticos. Ele introduziu uma abordagem baseada em probabilidade, utilizando a teoria bayesiana. O objetivo é ajudar um programa de e-mail a identificar se uma mensagem é spam ou não com base em palavras e padrões encontrados no texto.

Neste artigo, explicarei de forma simples como funciona essa teoria e mostrarei exemplos práticos.


O que é Spam e Como o Reconhecemos?

Spam são aquelas mensagens de e-mail indesejadas, geralmente propagandas ou até golpes. Paul Graham percebeu que é possível prever se um e-mail é spam observando as palavras nele. Por exemplo:

  • Palavras como "desconto", "grátis" e "clique aqui" aparecem muito em spams.
  • Palavras como "projeto", "trabalho" e "anexo" são mais comuns em e-mails normais.

Mas como o computador "aprende" a diferenciar essas palavras? É aí que entra a matemática!


A Matemática por Trás do Combate ao Spam

Graham usou a teoria de Bayes, que calcula a probabilidade de algo acontecer com base em eventos anteriores. Aqui está a fórmula:

P(S|W) = \frac{P(W|S) \cdot P(S)}{P(W|S) \cdot P(S) + P(W|H) \cdot P(H)}

O que cada parte significa:

  1. (P(S|W)): A probabilidade de um e-mail ser spam dado que contém uma palavra (W).
  2. (P(W|S)): A probabilidade de a palavra (W) aparecer em e-mails de spam.
  3. (P(S)): A probabilidade de qualquer e-mail ser spam.
  4. (P(W|H)): A probabilidade de a palavra (W) aparecer em e-mails legítimos (não spam).
  5. (P(H)): A probabilidade de qualquer e-mail ser legítimo.

Como funciona?

  • O programa analisa um grande número de e-mails anteriores para calcular (P(W|S)) e (P(W|H)).
  • Com esses dados, ele aplica a fórmula para calcular (P(S|W)), ou seja, quão provável é que um e-mail com a palavra (W) seja spam.

Exemplo Prático

Imagine que estamos treinando o programa com o seguinte conjunto de e-mails:

  • 100 e-mails, sendo 60 spams e 40 legítimos.
  • A palavra "desconto" aparece em 30 e-mails de spam e 5 e-mails legítimos.

Agora vamos calcular:

  1. Probabilidade da palavra em spams ((P(W|S))):
P(W|S) = \frac{\text{Nº de spams com “desconto”}}{\text{Total de spams}} = \frac{30}{60} = 0,5
  1. Probabilidade da palavra em e-mails legítimos ((P(W|H))):
P(W|H) = \frac{\text{Nº de legítimos com “desconto”}}{\text{Total de legítimos}} = \frac{5}{40} = 0,125
  1. Probabilidade de ser spam ((P(S))) e legítimo ((P(H))):
P(S) = \frac{\text{Total de spams}}{\text{Total de e-mails}} = \frac{60}{100} = 0,6
P(H) = \frac{\text{Total de legítimos}}{\text{Total de e-mails}} = \frac{40}{100} = 0,4

Agora aplicamos à fórmula de Bayes:

P(S|W) = \frac{P(W|S) \cdot P(S)}{P(W|S) \cdot P(S) + P(W|H) \cdot P(H)}

Substituímos os valores:

P(S|W) = \frac{0,5 \cdot 0,6}{0,5 \cdot 0,6 + 0,125 \cdot 0,4}

Calculando o denominador:

0,5 \cdot 0,6 = 0,3 \quad \text{e} \quad 0,125 \cdot 0,4 = 0,05

Logo:

P(S|W) = \frac{0,3}{0,3 + 0,05} = \frac{0,3}{0,35} \approx 0,857

Resultado:

A probabilidade de um e-mail contendo a palavra "desconto" ser spam é 85,7%.


Como Isso é Usado na Prática?

Os filtros de spam analisam cada palavra do e-mail e fazem esse cálculo para várias palavras. Eles combinam as probabilidades para decidir se o e-mail é spam ou não.

  • Se a probabilidade combinada for alta (ex.: acima de 90%), o e-mail é marcado como spam.
  • Se for baixa, o e-mail é considerado legítimo.

Conclusão

Paul Graham mostrou como usar a matemática para resolver um problema prático. Hoje, quase todos os filtros de e-mail usam alguma versão dessa ideia para proteger você de spams. Entender isso não é só útil para aprender sobre probabilidade, mas também para ver como a matemática pode fazer parte do nosso dia a dia.

Carregando publicação patrocinada...
4

Uma dica, no tabnews temos suporte a formatação mathjax (que é um subconjunto do latex) para expressar fórmulas.

Se tu colocar assim:

$$P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)}$$

Você consegue representar o teorema de bayes

P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)}


PS: Uma outra curiosidade sobre a implementação de Graham e o Teorema de Bayes é que ele é auto-alimentado. Ou seja você sempre pode inferir novas informações a partir de informações antigas aumentando a confiabilidade no sistema conforme o tempo passa

0