Jede Person mit einem Emailaccount wird bereits Erfahrungen mit Spam gemacht haben. Entweder man soll einem hilflosen Prinzen aus einer finanziellen Krise helfen oder ist nur einen Klick davon entfernt ein neues Handy zu gewinnen. Die Ideen hinter Spamnachrichten sind endlos und können nach und nach richtig nervig werden, wenn sie öfters erscheinen.
Eine Abhilfe ist dabei der Spamfilter, welcher hinterlistige Nachrichten entdeckt und diese anschließend in den Spamordner verbannt. Doch wie genau entscheidet der Filter eigentlich, welche Nachrichten Spam sind und welche nicht? Genau diese Antwort soll dieser Beitrag liefern, in der ein Klassifizierungsalgorithmus, genauer gesagt ein Naive Bayes Klassifizierer, eingesetzt wird, um Spam Emails zu detektierten (siehe AIAV Video Multinomial Naive Bayes Classifier).
Der Naive Bayes beruht auf dem Bayes Theorem, das Wahrscheinlichkeiten bezogen auf Ereignisse berechnet. Um die Berechnung dahinter näher zu erläutern, betrachten wir eine Anzahl an normalen (gewünschten) Emails und eine Anzahl an falschen (Spam) Emails. Für unser Beispiel nehmen wir einen Datensatz mit zehn normalen Emails und vier Spam Emails, wie in der folgenden Abbildung dargestellt.
Abbildung 1: Naive Bayes Klassifizierung. Aus einem Set von normalen Emails und Spam Emails werden die einzelnen Wörter entnommen und gezählt
Der erste Schritt ist die Betrachtung der einzelnen Emails. Genauer gesagt die Zählung der einzelnen Wörter innerhalb einer Email. Dabei werden die Wörter der normalen Emails von den Wörtern der Spam Emails getrennt gespeichert. Eine mögliche Ansammlung der Wörter wird in Abbildung 1 gezeigt. Um nun einen Filter zu gestalten, muss berechnet werden, wie hoch die Wahrscheinlichkeit ist, dass sich ein bestimmtes Wort in einer Email oder in einer Spam Email befindet.
Als Beispiel könnte berechnet werden, mit welcher Wahrscheinlichkeit das Wort Hallo in einer normalen Email vorkommt. Mathematisch ausgedrückt:
Dies kann für jedes einzelne Wort durchführt werden:
Genau gleich können wir auch die Wahrscheinlichkeiten des Wortes Hallo innerhalb einer Spam Email berechnen:
Dies kann wieder für jedes einzelne Wort durchführt werden:
Wird eine neue Email empfangen, so nehmen wir in erster Linie an, dass es sich um eine normale Email handelt. Die Wahrscheinlichkeit dafür kann wie folgt berechnet werden:
Diese Wahrscheinlichkeit wird a-priori-Wahrscheinlichkeit genannt und stellt unsere Anfangswahrscheinlichkeit dar. Nehmen wir an, in der empfangenen Email kommen die Wörter Hallo und Termin vor. Damit können wir bestimmen, wie hoch die Wahrscheinlichkeit ist, dass es sich bei dieser Email um eine normale Email handelt. Dazu multiplizieren wir zu unserem Priori die einzelnen Wahrscheinlichkeiten der Wörter.
Analog dazu können wir die Wahrscheinlichkeit berechnen, dass es sich um eine Spam Email mit diesen Wörtern handelt.
Vergleicht man die beiden Ergebnisse 0,049 für eine normale Email und 0,003 für eine Spam Email, so kann man schnell erkennen, dass der Filter diese Email als normal einstufen würde, da der Wert deutlich höher ist.
Nachdem die Mathematik hinter diesem Filter beschrieben wurde, wird eine mögliche Implementierung gezeigt. Dabei wurde der Datensatz "spam_ham_dataset" verwendet, welcher eine große Anzahl an englischen Emails und Spam Emails beinhaltet. Von den insgesamt 5170 Emails sind 1500 als Spam Emails klassifiziert. Zusätzlich wurden zum Trainieren des Filters 4652 Emails verwendet, woraus 518 Emails zum Testen verwendet werden können. Die Anzahl der Spam Emails im Test- und Trainingsset wird dabei immer variiert und zufällig bestimmt.
Das Ergebnis wird über eine Konfusion Matrix ausgegeben, in der links oben die Anzahl an richtig erkannten, normalen Emails und rechts oben die falsch klassifizierten normalen Emails aufgezählt werden. Unten links werden die fehlerhaften Spam Emails und rechts unten die richtig erkannten Spam Emails angegeben.
Tabelle 1: Konfusion Matrix Naive Bayes Klassifizierer
Konfusion Matrix | Erkannt als normale Email | Erkannt als Spam Email |
Normale Emails | 367 | 50 |
Spam Emails | 0 | 101 |
Somit wurden von den 518 Emails alle Spam Emails gefunden und keine Spam Email als normale Email klassifiziert. Jedoch wurden 50 normale Emails als Spam Emails klassifiziert. Daraus ergibt sich eine Genauigkeit von 90,35%.
Somit zeigt sich, dass ein Naive Bayes für die Spamfilterung durchaus einsetzbar ist. Jedoch weist der Klassifizierer auch große Nachteile auf. Durch die mathematische Herleitung, wie auch oben beschrieben, wird ersichtlich, dass er die einzelnen Wörter unabhängig voneinander betrachtet. Und das kann zu einem Problem werden, da in der deutschen Sprache Grammatik eine wichtige Rolle spielt. Als Beispiel könnten wir die Wörter Sehr und geehrte in Betracht ziehen. Diese werden in normalen Emails sehr oft verwendet. Der oben beschriebene Klassifizierer betrachtet die beiden Wörter zwar, aber unabhängig voneinander. Somit wurde die Zusammenstellung Sehr geehrte genau die gleiche Wahrscheinlichkeit bekommen wie die Zusammenstellung Geehrte sehr, was aber nur bedingt Sinn macht. Aus diesem Grund wird der Naive Bayes Klassifizierer häufig auch als „schlechter Klassifizierer“ bezeichnet. Nichtsdestotrotz zeigt sich dieser Spamfilter als eine solide Option, um etwas weniger Spam Emails zu Gesicht zu bekommen.
Comments