Neben der Analyse von Daten befassen wir uns im Bereich innovative BI auch mit dem Thema Data Mining. Darunter versteht man im Allgemeinen die systematische Anwendung von statistisch-mathematisch begründeten Methoden zur Mustererkennung eines Datenbestandes.

So kann man damit relativ simpel gleichartige Texte aus einem Datenset erkennen. Ein von uns häufig verwendeter Algorithmus ist TF-IDF (term frequency – inverse document frequency). Mit TF-IDF lässt sich die Relevanz von Wörtern und Phrasen in Texten beurteilen. Über den Vergleich der relevanten Wörter kann man so komplette Dokumente miteinander vergleichen.

Im Folgenden zeigen wir die Berechnung zur TF-IDF, „mathematisch korrekt“ beschrieben:

Die Vorkommenshäufigkeit #(t,D) gibt an, wie oft der Term t im Dokument D vorkommt. Um eine Verzerrung des Ergebnisses in langen Dokumenten zu verhindern, kann man die absolute Vorkommenshäufigkeit #(t,D) normalisieren. Dazu wird #(t,D) durch die maximale Häufigkeit eines Terms in D (wie oft das häufigste Wort vorkommt) geteilt und man erhält die relative Vorkommenshäufigkeit tf(t,D):

    \[tf(t,D) = \frac{\#(t,D)}{max_{t'\inD}\#(t',D).}\]

Die inverse Dokumentenfrequenz idf(t) hängt von der Gesamtmenge aller Dokumente ab:

    \[idf(t)=log \frac{N}{\sum_{D:t\in D}1.}\]

Hierbei ist N die Anzahl aller Dokumente im Datenset und \sum_{D:t\in D}1 die Anzahl der Dokumente, die den Term t beinhalten. Das Gewicht tf.idf(t,d) eines Terms t (also seine Relevanz) im Dokument D ist dann

    \[tf.idf(t,D) = tf(t,D) \cdot idf(t).\]

In Python ist die Umsetzung denkbar einfach

Mit dem vorgefertigten Modul sklearn.feature_extraction.text.TfidfVectorizer genügt der folgende Code:

[TS_EnlighterJS_Snippet_Single code_type=“python“ code_content=“ZnJvbSUyMHNrbGVhcm4uZmVhdHVyZV9leHRyYWN0aW9uLnRleHQlMjBpbXBvcnQlMjBUZmlkZlZlY3Rvcml6ZXIlMEElMEFkb2N1bWVudHMlMjAlM0QlMjBsaXN0X29mX2RvY3VtZW50cyUyMCUyMCUyMCUyMCUyMCUyMyUyMGltcG9ydCUyMGRhdGFzZXQlMjBhcyUyMGElMjBsaXN0JTIwb2YlMjBzdHJpbmdzJTBBdGZpZGZfbWF0cml4JTIwJTNEJTIwVGZpZGZWZWN0b3JpemVyJTI4JTI5LmZpdF90cmFuc2Zvcm0lMjhkb2N1bWVudHMlMjklMEE=“]

Nachfolgend als ausführliches Beispiel

[TS_EnlighterJS_Snippet_Single code_type=“python“ code_content=“ZnJvbSUyMHNrbGVhcm4uZmVhdHVyZV9leHRyYWN0aW9uLnRleHQlMjBpbXBvcnQlMjBUZmlkZlZlY3Rvcml6ZXIlMEElMEElMjMlMjBpbXBvcnQlMjB5b3VyJTIwZGF0YSUyMHNldCUwQWRvY3VtZW50cyUyMCUzRCUyMGxpc3Rfb2ZfZG9jdW1lbnRzJTBBJTBBJTIzJTIwc2V2ZXJhbCUyMG9wdGlvbmFsJTIwcGFyYW1ldGVycyUyMGZvciUyMHRoZSUyMHZlY3Rvcml6ZXIlMjBzZXR0aW5ncyUwQXZlY3Rvcml6ZXIlMjAlM0QlMjBUZmlkZlZlY3Rvcml6ZXIlMjhtaW5fZGYlM0QwLjAxJTJDJTIwbWF4X2ZlYXR1cmVzJTNEMzAwMCUyQyUyMHN0b3Bfd29yZHMlM0QlMjdlbmdsaXNoJTI3JTI5JTBBJTBBJTIzJTIwbGVhcm4lMjB2b2NhYnVsYXJ5JTIwYW5kJTIwaWRmJTJDJTIwcmV0dXJuJTIwdGVybS1kb2N1bWVudCUyMG1hdHJpeCUwQXRmaWRmX21hdHJpeCUyMCUzRCUyMHZlY3Rvcml6ZXIuZml0X3RyYW5zZm9ybSUyOGRvY3VtZW50cyUyOSUwQSUwQSUyMyUyMGFycmF5JTIwbWFwcGluZyUyMGZyb20lMjBmZWF0dXJlJTIwaW50ZWdlciUyMGluZGljZXMlMjB0byUyMGZlYXR1cmUlMjBuYW1lJTBBZmVhdHVyZV9uYW1lcyUyMCUzRCUyMHZlY3Rvcml6ZXIuZ2V0X2ZlYXR1cmVfbmFtZXMlMjglMjklMEElMEElMjMlMjBnZXQlMjB0aGUlMjBpZGYtc2NvcmVzJTBBZGVuc2UlMjAlM0QlMjB0ZmlkZl9tYXRyaXgudG9kZW5zZSUyOCUyOSUwQWRlbnNlbGlzdCUyMCUzRCUyMGRlbnNlLnRvbGlzdCUyOCUyOSUwQSUwQQ==“]

Mithilfe der TF-IDF-Matrix können wir nun einen Klassifizierungsalgorithmus füttern. Dafür eignen sich zum Beispiel Support Vector Machines, Random Forests oder Naive Bayes Algorithmen. Dazu ist es am einfachsten, wenn das Datenset bereits gelabelt ist. Andernfalls kann man einen Clustering Algorithmus verwenden. Dieser untersucht die Datenpunkte auf Ähnlichkeiten und gruppiert sie in sogenannte Cluster.

Zum Vergleichen von Texten gibt es in Python das Modul sklearn.metrics.pairwise.linear_kernel. Mit diesem kann man anhand der TF-IDF-Matrix den Ähnlichkeitswert zweier Dokumente bestimmen. Mathematisch gesehen berechnet man den Cosinus des Winkels zwischen den beiden TF-IDF-Vektoren der Dokumente (je kleiner der Winkel, desto näher ist der Wert an 1, d.h. desto gleichartiger sind die Texte).

[TS_EnlighterJS_Snippet_Single code_type=“python“ code_content=“ZnJvbSUyMHNrbGVhcm4uZmVhdHVyZV9leHRyYWN0aW9uLnRleHQlMjBpbXBvcnQlMjBUZmlkZlZlY3Rvcml6ZXIlMEFmcm9tJTIwc2tsZWFybi5tZXRyaWNzLnBhaXJ3aXNlJTIwaW1wb3J0JTIwbGluZWFyX2tlcm5lbCUwQSUwQWRvY3VtZW50cyUyMCUzRCUyMGxpc3Rfb2ZfZG9jdW1lbnRzJTBBdGZpZGZfbWF0cml4JTIwJTNEJTIwVGZpZGZWZWN0b3JpemVyJTI4JTI5LmZpdF90cmFuc2Zvcm0lMjhkb2N1bWVudHMlMjklMEElMEElMjMlMjBjb21wdXRlJTIwdGhlJTIwJTIyc2ltaWxhcml0eSUyMHNjb3JlJTIyJTIwb2YlMjBvbmUlMjBkb2N1bWVudCUyMGFuZCUyMHRoZSUyMG90aGVyJTIwZG9jdW1lbnRzJTBBY29zaW5lX3NpbWlsYXJpdGllcyUyMCUzRCUyMGxpbmVhcl9rZXJuZWwlMjh0ZmlkZl9tYXRyaXglNUJpbmRleCUzQWluZGV4JTJCMSU1RCUyQyUyMHRmaWRmX21hdHJpeCUyOS5mbGF0dGVuJTI4JTI5JTBBJTBBJTIzJTIwZ2V0JTIwdGhlJTIwZml2ZSUyMG1vc3QlMjBzaW1pbGFyJTIwZG9jdW1lbnRzJTIwYW5kJTIwdGhlaXIlMjBzY29yZXMlMEFyZWxhdGVkX2RvY3NfaW5kaWNlcyUyMCUzRCUyMGNvc2luZV9zaW1pbGFyaXRpZXMuYXJnc29ydCUyOCUyOSU1QiUzQS01JTNBLTElNUQlMEFwcmludCUyOGNvc2luZV9zaW1pbGFyaXRpZXMlNUJyZWxhdGVkX2RvY3NfaW5kaWNlcyU1RCUyOQ==“]

Wir benutzten dies beispielsweise zum Finden und Vergleichen ähnlicher Produkte, anhand deren Beschreibung. Für Neukunden ohne Historie können so bereits nach ersten Klicks in einem Online-Shop verwandte Produkte vorgeschlagen werden. Weitere Anwendungsgebiete der TF-IDF Methode sind unter anderem:

  • Marktanalyse
  • Konkurrenzanalyse
  • Kundenbeziehungsmanagement