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:

from sklearn.feature_extraction.text import TfidfVectorizer

documents = list_of_documents     # import dataset as a list of strings
tfidf_matrix = TfidfVectorizer().fit_transform(documents)

Nachfolgend als ausführliches Beispiel

from sklearn.feature_extraction.text import TfidfVectorizer

# import your data set
documents = list_of_documents

# several optional parameters for the vectorizer settings
vectorizer = TfidfVectorizer(min_df=0.01, max_features=3000, stop_words='english')

# learn vocabulary and idf, return term-document matrix
tfidf_matrix = vectorizer.fit_transform(documents)

# array mapping from feature integer indices to feature name
feature_names = vectorizer.get_feature_names()

# get the idf-scores
dense = tfidf_matrix.todense()
denselist = dense.tolist()

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).

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel

documents = list_of_documents
tfidf_matrix = TfidfVectorizer().fit_transform(documents)

# compute the "similarity score" of one document and the other documents
cosine_similarities = linear_kernel(tfidf_matrix[index:index+1], tfidf_matrix).flatten()

# get the five most similar documents and their scores
related_docs_indices = cosine_similarities.argsort()[:-5:-1]
print(cosine_similarities[related_docs_indices])

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