Machine learning, come individuare lo spam grazie alla Naive Bayes Classification

Con un classificatore basato sulle regole baiesiane è possibile insegnare alla macchina a riconoscere le email spazzatura da quelle legittime

Pubblicato il 18 Feb 2020

reinforcement learning

La Naive Bayes Classification (NBC) è una tecnica di machine learning che permette di classificare oggetti, ad esempio documenti di testo, in due o più classi. Al classificatore nella fase di training (apprendimento) viene dato in pasto un set di training (una serie di testi) la cui classe di appartenenza è definita (nel caso in cui il documento sia una email, se si tratta di spam oppure no).

Un caso reale: un filtro antispam

Useremo uno “spam filter” (un software in grado di capire se una email è spam) per presentare l’idea del Naive Bayes Classificator. Le classi di appartenenza sono 2: spam (junk email) o ham (messaggio legittimo). Le parole nel messaggio rappresentano il numero di variabili caratteristiche che il modello analizzerà, quindi la lunghezza del messaggio email rappresenta il numero di variabili caratteristiche del modello. Ovvero, ogni parola avrà una certa probabilità di essere contenuta in un messaggio di spam. Più alta è questa probabilità, più è facile che il messaggio sia spam.

Ecco due messaggi di posta, cerchiamo di capire, intuitivamente, se sono spam o no:

Prima email

Ciao Gabriele, come va?

A che punto siamo con il progetto di marketing del farmaco XYZ? E come va la la fase di test del farmaco KXZ?

A presto

Marco

Seconda Email

Ultima occasione!

Hai vinto un premio di 1000 euro, ritiralo cliccando su www.premionuovo.it!

A occhio, un essere umano (nella maggior parte dei casi) capisce che la seconda email è spam: ma come fa a saperlo un programma di filtraggio?

Prima operazione: stimare i parametri

Per iniziare a capire come funziona un NBC, partiamo da un assunzione: il 50% delle email in arrivo sono spam, il restante 50% sono ham (mail legittime). Nella realtà probabilmente lo spam è molto di più (si parla di 90%) ma per l’esempio che vogliamo fare va più che bene.

Per avere un rapporto di probabilità riferita alle singole parole che appaiono nelle email, dobbiamo sapere quante volte una data parola appare in messaggi di spam e quante volte appare in messaggi legittimi.

Ad esempio la parola “Milione” appare 156 volte in un messaggio di spam e 98 volte in un messaggio legittimo, considerando un training set definito a priori, contenente complessivamente 95.791 parole diverse nei messaggi di spam e 306.498 parole nei messaggi legittimi.

Quindi abbiamo:

  • 50% messaggi di spam e 50% legittimi
  • la parola “Milione” appare 156 volte nei messaggi di spam
  • le parole in messaggi di spam sono 95.791
  • la parola “Milione” appare 98 volte nei messaggi legittimi
  • le parole in messaggi legittimi sono 306.498

Tenendo conto di questo training set, assumiamo di calcolare le occorrenze delle seguenti parole:

parolaoccorrenze in spamoccorrenze legittime
milione15698
dollari29119
adclick510
conferenza012
totale95.791306.438

Possiamo ora calcolare la probabilità che una parola in una email di spam sia “milione”:

156/95791 ovvero circa 1/614. D’altra parte la probabilità che una parola in una email legittima sia “milione” è 98 su 306.438 ovvero circa 1 su 3127.

Questo, qualitativamente, vuol dire che è più probabile trovare la parola milione in una email di spam che non in una email legittima.

Più precisamente, il rapporto di probabilità è: (1/614) / (1/3127) = 3127/614 = 5,1 (arrotondato al primo decimale).

Usando la logica di cui sopra, possiamo calcolare il rapporto di probabilità spam/legittima per tutte le altre parole:

parolarapporto di probabilità
milione5,1
dollari0,8
adclick53,2
conferenza0,3

Fatto questo, diventa molto più semplice calcolare se una email è spam oppure no.

Primo esempio

Ipotizziamo di avere un messaggio che contiene solo la parola “milione”. Va filtrato? Possiamo deciderlo calcolando la probabilità che sia spam. Essendo il rapporto spam email contro email legittime di 1:1 (50% e 50%), conta solo il rapporto di probabilità ovvero 5,1 il che indica che ogni 5,1 messaggi di spam ce n’è uno legittimo, ovvero ogni 51 di spam ce ne sono 10 buoni, ovvero ogni 61 messaggi 10 sono buoni, ovvero solo il 16,4% dei messaggi contenenti la parola “milione” è buono. Per cui il filtro tenderebbe a filtrare l’email classificandola come spam, in base a quanto sopra.

Secondo esempio

Ipotizziamo di avere una email che contiene tutte le parole in tabella. Sarà spam o no l’email risultante?

Partiamo sempre dal rapporto spam:non spam di 1:1.

Questo permette di moltiplicare 1 * 5,1 * 0,8 * 53,2 * 0,3 = 65,1168.

Ovvero per ogni 65,1 messaggi di spam contenenti tutte queste parole, ce n’è uno non di spam, ovvero per ogni 651 messaggi ce ne sono 10 buoni, quindi la probabilità di un messaggio buono con questa sequenza di parole è: (10/661) = 1,5%.

Conclusioni

Ora sappiamo come funziona un NBC, una tecnica molto potente usata nel machine learning e basata sulla probabilità per classificare email di spam o email legittime basandosi sulle parole che vi sono contenute.

Il ragionamento basato su probabilità è fondamentale per il machine learning, perché permette di gestione l’incertezza, incertezza che è tipica del mondo reale e analogico. Senza la probabilità non sarebbe possibile utilizzare il machine learning per classificare e prendere decisioni. Del resto nemmeno l’essere umano potrebbe decidere in molti casi in cui, consciamente o meno, si comporta in maniera istintiva come un NBC, basandosi su una probabilità derivante dall’esperienza.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati

Articolo 1 di 4