Automatisches Einstellen der Score für SpamAssassin

18.01.2006

Automatisches Einstellen der Score für SpamAssassin

Während des Aufbaus eines institutweiten Spamfiltersystems basierend auf SpamAssassin haben wir ein Set von 77.286 Ham und Spam Mails von acht Benutzern gesammelt, unsere eigene Trainingsmethode entwickelt (welche automatisch Konfigurationsdateien für SpamAssassin erstellt) und haben unsere Methode mit kommerziellen und freien Spamfiltersystemen verglichen, u.a. mit Symantec BrightMail 6. Ein aktuellerer Report stellt diese Arbeit in einen größeren Kontext, fügt neue empirische Resultate hinzu und schlägt eine Methode zur Sammlung von Maildaten vor.

Scripts zum Trainieren von SpamAssassin

Eine der Resultate dieser Forschungen war eine Methode zur Anpassung von SpamAssassin auf eine spezifische Mail-Sammlung, indem angepaßte Konfigurationsdateien erstellt wurden. Im Gegensatz zu sa-learn, welches nur das NaiveBayes Modell trainiert, adaptiert SA-Train.pl zusätzlich die Score-Werte der Regeln via linearer SVM. Die Methode, die hier beschrieben wird, entspricht SA-Train mit Traningsmethodology simple aus den Papers.

  • SA-Collect.pl: sammelt ein Set von aktuellen Mails von einem Ham-Archiv (= gute Mails). Nur Dateien im mbox format oder maildirs (vorausgesetzt jede Mail beginnt mit ^From\ ) werden derzeit unterstützt. Mozilla, Evolution or mutt/pine/elm Basisdateien sollte alle funktionieren.
  • SA-Train.pl: Lernskript. Berechnet eine CV auf den Inputdaten, oder lernt das komplette Modell einmal (default). Im letzteren Fall sind user_prefs and bayes_* Dateien im aktuellen Verzeichnis zu finden. Nicht vergessen den bayes_path in user_prefs anzupassen!. Falls dieses Setting nicht korrekt ist, werden keine BAYES_* Tests in den Mail Headers vorkommen und die Performance wird wesentlich schlechter sein als erwartet (außer für -S).

SA-Train.pl verwendet Algorithm::SVM V0.12 statt dem Perl-Port von WEKA's SMO Algorithmus der vorher verwendet wurde. Es sollte ca. dreimal schneller sein. Es gab auch Optimierungen bezüglich des Speicherbedarf, der jetzt ungefähr ein Drittel vom vorigen Wert beträgt. Bis Algorithm::SVM V0.12 bei CPAN auftaucht, gibt es auch eine lokale Kopie (siehe Downloads).

Bugs, Kommentare und Erweiterungsvorschläge sind willkommen. Falls diese Codes für Forschungszwecke verwendet werden, bitte eines der Papers zitiert - vorzugsweise das IDA Journal-Paper (weiter unten)

Leistung

In der aktuellen Version kann SA-Train auch vereinfachte Trainingsprozeduren verwenden (-S und -B), die wie folgt funktionieren: -S ignoriert das NaiveBayes-Modell und lernt nur den linearen SVM. Dies ähnelt dem Prozess, der für jede neue SpamAssassin-Version verwendet wird, um die Default-Scores zu erhalten. -B gibt fixed Gewichte für die BAYES_* Tests aus und ignoriert alle anderen Tests (d.h. setzt deren Score auf 0), was de facto zu einem reinen NaiveBayes Lerner reduziert (so wie SpamBayes).

Basierend auf meinem Sample von 77.286 Mails mit einer spam/ham Ratio von etwa 1 via fünf-fold Crossvalidierung sind dies die Resultate für die drei Hauptsettings -S, -B und das Default (weder -B nor -S angeben). Alle Werte sind in Prozent (d.h. mit 100 multipliziert)

(default)-S-B
Ham error (FP rate)0.420±0.0471.495±0.1710.089±0.015
Spam error (FN rate)0.423±0.0303.550±0.2322.549±0.276


Eine weitere Sicht auf die Ergebnisse bieten ROC-Kurven. In diesem Fall wurden Ham vs. Spam Error bei allen möglichen Thresholds berechnet. Eine logaritmische Skala ist notwendig, da man sonst keinen Unterschied zwischen den drei Settings sehen würde.

Wie man sieht sind -B und die Default-Einstellung sehr ähnlich. Da -B wesentlich schneller ist, sollte es als erstes probiert werden. Die Default Threshold (required_hits) von 5 reduziert den Ham-Error auf Kosten von mehr Spam Error. Um ähnliche Performance wie das Default zu erreichen, setze die Threshold auf 2.

Eine andere Methode wäre es, das Default Setting mit verschiedenen Komplexitätsparameters für SVM (d.h. -c) zu testen. Verschiedene Thresholds für SVM output - wie hier gezeigt - ist nicht sinnvoll, da dadurch das SVM-Modell nicht länger optimal ist.

Was am schlechtesten funktioniert ist, das Bayes-Modell nicht zu verwenden, d.h. -S. Das ist sehr ähnlich zu dem was die SpamAssassin-Entwickler verwenden um ihre Default-Scores zu berechnen, die auch auf unserem Sample sehr schlecht funktionieren.


Mail Sammlung

Wie sollten Mails an einem Institut gesammelt werden - d.h. wie man ein Modell für eine große Anzahl von Benutzern trainiert.How mails

  • Alle Dateien löschen, wo SpamAssassin automatisch erkannte Spam Mails speichern (sicherheitshalber vorher ein Backup machen, damit keine falsch klassifizierten EMails verloren gehen)
  • Alle Institusangehörige bitte, alle Spam-Mails in separaten Mailboxen zu sammeln.
  • Nach 1-2 Wochen: Alle von SA erkannten EMails und die EMails der Institusangehörigen in eine Mailbox pro Benutzer sammeln. Diese Mailbox extensiv auf falsch klassifizierte EMails überprüfen!
  • Verwende SA-Collect.pl, um die gleiche Anzahl von Ham-Mails zu bekommen. Das garantiert eine Spam-zu-Ham Ration von etwa 1,0. Wiederum diese Mailsbox extensiv auf falsch klassifizierte EMails überprüfen!
  • SA-Train.pl verwenden, mittels -x 2, 5 oder 10 trainieren - je nachdem, wieviel Zeit verfügbar ist. ;-) Anschließend das gesamte Training einmal durchführen (default, -x 0/1). Dies erstellt user_prefs und bayes_* Dateien für SpamAssassin.
  • Es werden zumindest 1.000 Mails benötigt - je mehr, desto besser. Unser SA-Train verwendet ca. 50,000 EMails und bleibt für 6-12 Monate stabil.

Diese Mailsammlungsmethode gibt auszeichnete Resultate, ist weniger aufwendig als inkrementelles Training (keine Überprüfung von zehntausenden Spam-Mails mehr, um das einzelne False Positive zu finden) und der Filter sollte von Anfang an mit den vorausgesagten Fehlerraten lt. CV arbeiten. Menschen sind natürlich nicht perfekt bei dieser Aufgabe: Fehlerraten-Schätzungen gehen von 0,25% zu 1%, also ist alles in dieser Bandbreite kompetitiv.

Mail-Sammlung

Die gesamte Mailsammlung ist aus datenschutzrechtlichen Gründen nicht verfügbar. Allerdings ist ein kleinerer anonymisierter Teil der Sammlung in hinreichend sicherer Form hiermit verfügbar - als Wortvektor der Inhalte, als Resultate von SpamAssassin Regelsets und vollständige Sender-EMailadressen. Siehe downloads (mails-alexsee.zip).