Bentornati su Collacultura, il giornale che vi fa sembrare interessanti anche se parlate di algoritmi. Oggi, insieme a Paolo De Donato (collaboratore di MeetScience), ci addentriamo in uno degli enigmi più fastidiosi dell’era digitale: le mail spam. La domanda è: come fanno i nostri computer a capire se una mail è spam? 

Ricorda, il nostro cpmputer è scemo. Fa solo cose basilari!

È sempre colpa della probabilità

I computer sfruttano decine di algoritmi, ognuno con le sue fisse, i suoi pregi e i suoi limiti, ma tutti pronti a classificare le mail come se fossero vittime di Dexter Morgan. 

Al centro di questi programmini c’è lei: la probabilità. Una scienza tanto nobile quanto pericolosa: perché a noi ludopatici dell’informazione basta leggere “alta probabilità” per sentirci già vincitori del Superenalotto. Per questo ora ti guidiamo in una mini-panoramica degli algoritmi più utilizzati e alla fine approfondiremo il nostro preferito. Si, abbiamo un preferito!

La probabilità è un diavoletto

La nostra bellissima lista dei filtri anti-spam

  • Filtri basati su regole: Vecchia scuola. Qui niente IA, solo un insieme di regole tipo: “Se la mail contiene ‘VINCI ORA’ → Spam”. Funziona? Sì, ma solo finché il truffatore non scrive “V1NC1 0RA”
  • Black list: Altro metodo diretto: se il mittente o l’indirizzo IP è nella lista nera, la mail non passa. Funziona bene contro i soliti noti, ma… occhio! Se mandi troppi inviti a un evento su Zoom, potresti finirci anche tu.
  • Filtri Bayesiani: Qui entra in gioco la probabilità. Il filtro confronta le parole di una mail con quelle di mail già catalogate come spam o legittime. Tipo: se “crypto” appare nel 95% delle mail truffa, allora una nuova mail che la contiene… campanello d’allarme. È un algoritmo che impara col tempo. Come tua nonna con WhatsApp, ma più veloce.
  • Reti Neurali e Machine Learning: La nuova frontiera. Si usano decine di variabili, dalle parole ai link, fino alla struttura HTML della mail. Le reti neurali sono in grado di cogliere pattern sottili e camuffamenti creativi. Sembra perfetto? Sì. Ma costa. Serve potenza di calcolo, dati e server: non proprio alla portata del tuo vecchio laptop del liceo.

Ma qual è il nostro preferito

Quello che ci serve è un programmino a cui diamo in pasto ogni mail che riceviamo e per ognuna di esse ci dica se appartiene al gruppo SPAM o a quello NO SPAM. Questi programmini li chiamiamo classificatori proprio perché ci aiutano a classificare degli oggetti. Che fantasia.

Bene – dirai – creiamo un classificatore che identifichi tutte le mail spam e abbiamo risolto il problema una volta per tutte. Peccato che un classificatore che non sbaglia mai è impossibile da creare. Ogni classificatore ha un suo grado di affidabilità, che possiamo leggere come una probabilità che il risultato sia corretto:

  • Se vale 1, allora bingo: certezza assoluta (tipo “il lunedì fa schifo”)
  • Se vale 0, hai praticamente tirato a caso

Nella realtà, i classificatori lavorano sempre tra questi due estremi: non possono garantire la perfezione, ma possono avvicinarsi molto.

Per un classificatore con solo due classi (SPAM e NO SPAM) non è difficile vedere che l’affidabilità, nella pratica, varia solo tra 0.5 ed 1, poiché se un classificatore ha affidabilità prossima allo 0 allora “invertendo” la classificazione data dal programma l’affidabilità diventa magicamente vicina ad 1 e siamo tutti felici. In questa sede considereremo un classificatore molto molto semplice e intuitivo, il cosiddetto classificatore naïf, il nostro preferito.

Come funziona il classificatore

Lui fa una cosa semplicissima: analizza la frequenza di certe parole all’interno del messaggio e, in base a quelle, decide se la mail è spam oppure no. E già qui… partiamo un po’ maluccio.

Perché, diciamolo, chiunque abbia mai scritto un tema alle medie sa che l’ordine delle parole conta eccome. Non tenerne conto è come valutare un romanzo solo contando quante volte compare la parola “amore”: sì, può dire qualcosa, ma non tutto. Quindi sì: il nostro naïf classifier è un po’ ingenuo. Eppure c’è del metodo: parole come AFFARONE, SCONTISSIMI, SUPEROFFERTA, VINCI ORA non compaiono quasi mai in una mail seria.

La mail spam che tutti vorrebbero

Insomma, guardare solo alle frequenze non è poi così idiota. Funziona abbastanza bene, almeno per dare un primo filtro. Poi certo, se siete tipi temerari, potete sempre lanciarvi nel meraviglioso mondo degli algoritmi avanzati. Ma noi restiamo qui, con il nostro piccolo classificatore naïf. Un po’ limitato, sì, ma onesto. Come il bar sotto casa.

Il nostro amichetto lavora così: prende come input una cosa semplice: quante volte compaiono certe parole sospette in una mail. ​: sono parole come “offerta”, “gratis”, “vinci”, “crypto”, insomma, quelle che fanno scattare subito l’istinto di autodifesa. Per ogni parola \( p_i \), chiamiamo \( n_i \) il numero di volte in cui compare nella mail. Il nostro classificatore, quindi, lavora su una n-pla di interi del tipo:

\( (n_1, n_2, \ldots, n_n) \)

e restituisce un verdetto secco: SPAM oppure NO SPAM.

Come impara a classificare?

Beh, lo addestriamo: gli diamo in pasto un mucchio di mail che sappiamo già essere spam o non spam e per ogni parola \(p_i\) e per ogni numero \(n_i\) determiniamo le seguenti probabilità condizionate:

\( S_{i,n} = P(p_i = n \mid \text{SPAM}) \) ovvero il rapporto tra le mail spam in cui compare la parola pi compare n volte e il numero totale di mail spam

\( NS_{i,n} = P(p_i = n \mid \text{NO SPAM}) \) stessa  cosa di prima, ma al contrario

Inoltre, calcoliamo la probabilità generale che una mail sia spam o meno. 

\( S = P(\text{SPAM}) \)

\( NS = P(\text{NO SPAM}) = \frac{\text{numero di email NO SPAM}}{\text{totale email considerate}} \)

Queste sono probabilità condizionate, perché rispondono alla domanda:
“Data una certa informazione (tipo che la mail è spam), qual è la probabilità che la parola ‘crypto’ compaia 3 volte?”

E, udite udite, più grande e rappresentativo è il campione che usiamo per addestrare il classificatore (cioè, più abbiamo mail vere e non tutte prese dal gruppo Facebook “Offerte Pazze 2007”), più le nostre stime si avvicinano alla probabilità “teorica”. 

Da queste probabilità teoriche è possibile utilizzare il teorema di Bayes per stabilire la probabilità che un messaggio sia spam sapendo quante volte compaiono certe parole:

\( P(\text{SPAM} \mid p_1=n_1, p_2=n_2, p_3=n_3, \dots, p_n=n_n) = \frac{P(p_1=n_1, p_2=n_2, \dots, p_n=n_n \mid \text{SPAM}) \times P(\text{SPAM})}{P(p_1=n_1, p_2=n_2, \dots, p_n=n_n)} \)

Tranquilli: sembra brutta ma non lo è e soprattutto funziona!

Tutto bello … ma c’è un problema

Per usare questa formula, dovremmo calcolare la probabilità che tutte quelle parole compaiano esattamente \( (n_1, n_2, \ldots, n_n) \) volte insieme. Ma questo è un incubo combinatorio. Quindi facciamo una cosa orrenda, un sacrilegio, un insulto a ogni linguista vivente: assumiamo che le parole siano indipendenti tra loro. Cioè: assumiamo che il fatto che in una mail compaia “caldo” non influisca sul fatto che ci sia anche “sole”, o “sudore”…
Un’assurdità, lo so. Le parole stanno insieme per un motivo, e il contesto conta. Ma se facciamo finta di niente, otteniamo una formula molto più semplice:

\( P(p_1 = n_1, \ldots, p_n = n_n \mid SPAM) = P(p_1 = n_1 \mid SPAM) \cdot \ldots \cdot P(p_n = n_n \mid SPAM) \)

che possiamo riscrivere come:

\( S_{1n_1} \cdot S_{2n_2} \cdot \ldots \cdot S_{nn_n} \cdot S \)

e quindi tutta la formula di prima diventa confrontabile con quella per il NO SPAM.
Il classificatore darà come output “SPAM” se:

\( S_{1n_1} \cdot \ldots \cdot S_{nn_n} \cdot S > NS_{1n_1} \cdot \ldots \cdot NS_{nn_n} \cdot NS \)

Eccolo lì, il nostro algoritmo. Pronto per giudicare. Un po’ ingenuo, un po’ spietato, un po’ troppo fiducioso nella matematica.

Conclusioni!

Alla fine, diciamocelo: abbiamo fatto delle assunzioni fortissime. E il nostro approccio naïf si basa su parole chiave prese una per una, come se ogni termine vivesse isolato dal resto.
Ma il linguaggio non funziona così. Uno spammer con un minimo di astuzia può tranquillamente aggirare il nostro sistema: basta evitare parole sospette e puntare tutto su perifrasi eleganti, tipo “opportunità imperdibile riservata a pochi”, e il classificatore si fa fregare come uno zio su WhatsApp. Eppure… c’è un motivo se lo amiamo.

Fonti mi dicono che Serianni sia morto dopo aver letto questo articolo

E quindi? Che si fa? Si passa alle reti neurali

Anche no.
A meno che tu non abbia a disposizione server, GPU, fondi europei e uno stagista di Stanford, le reti neurali non sono proprio a portata di mano. La verità è che il trucco sta nel mescolare. Non c’è un algoritmo perfetto, ma un bel cocktail di algoritmi intelligenti, ognuno con i suoi punti forti, può fare la differenza. Tipo: il naïf è bravo a leggere i segnali evidenti, il machine learning a cogliere pattern più sottili, le blacklist a dire “questo mittente è già noto alle forze dell’ordine”, e così via. Insieme, questi sistemi si coprono le spalle. Proprio come una buona squadra di calcetto: il difensore rude, il regista elegante, l’attaccante che spara a caso ma segna.

Gatti e multiversi: interpretare la fisica

Tutta la fisica è interpretabile? Oggi parliamo di fisica classica,…

Tazze, ciambelle e topologia

Dalle tazze che diventano ciambelle alle cariche elettriche conservate, la…

Decifrare Alan Turing: tra mito e realtà

In occasione del compleanno di Alan Turing, cogliamo l’opportunità per fare…

Perché allattano solo le femmine?

Ho un dubbio che mi assilla: perché solo le femmine allattano? Facciamo un…

BAMBINI DA LABORATORIO

He Jankui, un biofisico cinese, ha sperimentato la modifica genetica sugli…

Sophie Germain: la “Mulan” di Gauss

Il 30 aprile festeggiamo il compleanno di Gauss: quale occasione migliore per…

Perché non riusciamo a sconfiggere l’HIV?

I virus non sono tutti uguali, ed alcuni di loro possono essere molto…

Ho la testa tra le quadriche

Uno splendido viaggio matematico nel mondo delle quadriche in pieno spirito…

Evo: giocare a scacchi con la genetica

L’IA evolve rapidamente: Evo 2 analizza il DNA, prevedendo mutazioni genetiche,…

Tu sai studiare la Matematica?

Molti studenti imparano formule matematiche come fossero filastrocche. Testiamo…

IL PI GRECO (NON) È UNA COSTANTE

II pi greco non vale sempre 3,14... Esistessero altre geometrie che influenzano…

Er compleanno de Steve Jobs

In una classe di 23 persone la probabilità che due festeggino il compleanno lo…

Chi taglia i capelli al barbiere?

Le domande esistenziali sono tante, ma la più importante è: "Chi taglia i…

Equazioni di Maxwell: arte contemporanea

Cosa accomuna le equazioni di Maxwell e l'arte astratta? Entrambe sempre più…

Un robot per amico: l’AI e le sue creature domestiche

L'AI riempie le mura domestiche nelle vesti di "coinquilina". Che tipo di…

SMS: bei tempi… o forse no

Non facciamoci ingannare dalla nostalgia: gli SMS sono uno strumento…

Safety Tutor: un motivo (in più) per odiare la matematica

Dietro le multe per eccesso di velocità si nasconde il teorema di Lagrange. Un…

Smentire Omero con la fisica

Il fisico irlandese Samuel Haughton ha studiato il modo più efficace per…

Gratta e Vinci: come diventare poveri

I Gratta e Vinci sono croce e delizia di molti italiani. Ma davvero ti…

Autori