Perspektiv-Wechsel mit Process Mining

Data Scientists verbringen einen Großteil ihres Tages mit explorativer Analyse. In der 2015 Data Science Salary Survey[1] gaben 46% der Befragten an, ein bis drei Stunden pro Tag auf das Zusammenfassen, Visualisieren und Verstehen von Daten zu verwenden, mehr noch als auf die Datensäuberung und Datenaufbereitung.

Process Mining konzentriert sich auf die Analyse von Prozessen[2], und ist insbesondere für die explorative Analyse von prozessbezogenen Daten ein hervorragendes Werkzeug. Wenn sich Ihr Data-Science-Projekt auf Geschäfts- oder IT-Prozesse bezieht, dann müssen Sie diese Prozesse erst erforschen und genau verstehen, bevor Sie sinnvoll Machine-Learning Algorithmen trainieren oder statistische Analysen fahren können.

Mit Process Mining können Sie eine Prozess-Sicht auf die Daten einnehmen. Die konkrete Prozess-Sicht ergibt sich aus den folgenden drei Parametern:

  • Case ID: Die gewählte Vorgangsnummer bestimmt den Umfang des Prozesses und verbindet die Schritte einer einzelne Prozessinstanz von Anfang bis Ende (z.B. eine Kundennummer, Bestellnummer oder Patienten-ID)
  • Activity: Der Aktivitätsname bestimmt die Arbeitsschritte, die in der Prozesssicht dargestellt werden (z.B. „Bestellung empfangen“ oder „Röntgenuntersuchung durchgeführt“).
  • Timestamp: Ein oder mehrere Zeitstempel pro Arbeitsschritt (z.B. vom Start und vom Ende der Röntgenuntersuchung) werden zur Berechnung der Prozessabfolge und zum Ableiten von parallelen Prozessschritten herangezogen.

Wenn Sie einen Datensatz mit Process Mining analysieren, dann bestimmen Sie zu Beginn der Analyse, welche Spalten in den Daten der Case ID, dem Aktivitätsnamen und den Timestamps entsprechen. Beim Import der Daten in das Process Mining Tool können Sie diese Parameter dann in der Konfiguration einstellen.

Beim Importieren einer CSV-Datei in die Process Mining Software Disco können Sie für jede Spalte in ihrem Datensatz auswählen, wie diese interpretiert werden soll.[a] In dem folgenden abgebildeten Beispiel eines Einkaufsprozesses sind die Case ID-Spalte (die Bestellnummer) als Case ID, die Start- und Complete-Timestamps als Timestamp und die Activity-Spalte als Activity eingestellt. Als Ergebnis produziert die Process Mining Software vollautomatisch eine grafische Darstellung des tatsächlichen Einkaufsprozesses auf Basis der historischen Daten. Der Prozess kann jetzt faktenbasiert weiter analysiert werden.

aFür die Open-Source-Software ProM arbeitet man oft über XML-Formate wie XES oder MXML, die diese Konfiguration abbilden.

In der Regel ergibt sich die erste Prozesssicht – und die daraus abzuleitende Import-Konfiguration – aus der Aufgabenstellung und dem Prozessverständnis.

Allerdings ist vielen Process-Mining-Neulingen noch nicht bewusst, dass eine große Stärke von Process Mining als exploratives Analyse-Werkzeug gerade darin besteht, dass man schnell und flexibel verschiedene Sichten auf den Prozess einnehmen kann. Die oben genannten Parameter funktionieren wie eine Linse, mit der Sie Prozesssichten aus verschiedenen Blickwinkeln einstellen können.

Hier sind drei Beispiele:

1. Anderer Aktivitäts-Fokus

Für den obigen Einkaufsprozess können wir z.B. den Fokus auch auf den organisatorischen Übergabefluss richten, indem wir als Activity die Role-Spalte (die Funktion oder Abteilung des Mitarbeiters) einstellen.

Somit kann der gleiche Prozess (und sogar der gleiche Datensatz) nun aus der organisationalen Perspektive analysiert werden. Ping-Pong-Verhalten und erhöhte Wartezeiten bei der Übergabe von Vorgängen zwischen Abteilungen können sichtbar gemacht und adressiert werden.

2. Kombinierte Aktivität

Anstatt den Fokus zu wechseln können wir auch verschiedene Dimensionen kombinieren, um ein detaillierteres Bild von dem Prozess zu bekommen.

Wenn Sie sich den folgenden Callcenter-Prozess anschauen, dann würden Sie vermutlich zunächst die Spalte ‘Operation’ als Aktivitätsname einstellen. Als Ergebnis sehen wir den folgenden Prozess mit sechs verschiedenen Prozessschritten, die u.a. das Annehmen von eingehenden Kundenanrufen (‚Inbound Call’) und interne Aktivitäten (‚Handle Case’) repräsentieren.

Jetzt stellen Sie sich vor, dass Sie den Prozess gern genauer analysieren würden. Sie möchten gern sehen, wie oft eingehende Anrufe von dem First-Level Support im Callcenter an die Spezialisten im Backoffice weitergeleitet werden. Tatsächlich sind diese Informationen in den Daten enthalten. Das Attribut ‚Agent Position’ gibt an, ob die Aktivität im First-Level Support (als ‘FL’ vermerkt) oder im Backoffice (als ‘BL’ vermerkt) stattgefunden hat.

Um die ‚Agent Position’ in die Aktivitätssicht mitzunehmen, können wir einfach sowohl die Spalte ‘Operation’ als auch die Spalte ‘Agent Position’ als Aktivitätsnamen einstellen. Die Inhalte der beiden Spalten werden nun zusammengefasst (konkateniert).

Als Ergebnis bekommen wir eine detailliertere Sicht auf den Prozess. Wir sehen z.B., dass im First-Level Support angenommene Anrufe 152 mal an das Backoffice zur weiteren Verarbeitung übergeben wurden.

3. Alternativer Case-Fokus

Zuletzt können wir für den gleichen Callcenter-Prozess in Frage stellen, ob die als Vorgangsnummer gewählte Service-Request-ID des CRM-Systems die gewünschte Prozesssicht bietet. Immerhin gibt es auch eine Kundennummer und für ‚Customer 3’ sind mindestens drei verschiedene Service-Anfragen vermerkt (Case 3, Case 12 und Case 14).

Was ist, wenn diese drei Anfragen zusammenhängen und sich die Service-Mitarbeiter nur nicht die Mühe gemacht haben, den bestehenden Case im System zu suchen und wieder zu öffnen? Das Ergebnis wäre eine verminderte Kundenzufriedenheit, weil der ‚Customer 3’  bei jedem Anruf erneut seine Problembeschreibung abgeben muss.

Das Ergebnis wäre außerdem eine geschönte ‚First Call Resolution Rate’: Die ‚First Call Resolution Rate’ ist eine typische Prozesskennzahl in Callcentern, in der gemessen wird, wie oft ein Kundenproblem im ersten Anruf gelöst werden konnte.

ProcessMining-Fig-5

Genau das ist in dem Kundenservice-Prozess eines Internet-Unternehmens passiert[3]. In einem Process-Mining-Projekt wurde zunächst der Kontaktaufnahmeprozess (über Telefon, Internet, E-Mail oder Chat) über die Service ID als Vorgangsnummer analysiert. In dieser Sicht ergab sich eine beeindruckende ‚First Contact Resolution Rate’ von 98%. Unter 21.304 eingehenden Anrufen gab es scheinbar nur 540 Wiederholungsanrufe.

ProcessMining-Fig-6

Dann fiel den Analysten auf, dass alle Service-Anfragen immer ziemlich schnell geschlossen und so gut wie nie wieder geöffnet wurden. Um den Prozess aus Kundenperspektive zu analysieren, verwendeten sie dann die Kundennummer als Case ID. Somit wurden alle Anrufe eines Kunden in dem Zeitraum zu einem Vorgang zusammengefasst und die Wiederholungsanrufe wurden sichtbar.

ProcessMining-Fig-7

Die ‚First Contact Resolution Rate’ betrug in Wirklichkeit nur 82%. Nur 17.065 Fälle wurden in Wirklichkeit von einem eingehenden Anruf gestartet. Über 3000 waren  Wiederholungsanrufe, die aber als neue Serviceanfragen im System (und im Performance-Report!) gezählt wurden.

Fazit

Process Mining ermöglicht es Ihnen eine Prozessperspektive auf Ihre Daten einzunehmen. Darüber hinaus lohnt es sich, verschiedene Sichten auf den Prozess zu betrachten. Halten Sie Ausschau nach anderen Aktivitäts-Perspektiven, möglichen Kombinationen von Feldern und neuen Sichtweisen darauf, was einen Vorgang im Prozess ausmacht.

Sie können verschiedene Blickwinkel einnehmen, um verschiedene Fragen zu beantworten. Oft ergeben erst verschiedene Sichten zusammen ein Gesamtbild auf den Prozess.

Möchten Sie die in diesem Artikel vorgestellten Perspektiv-Wechsel einmal selbst genauer erforschen? Sie können die verwendeten Beispiel-Dateien herunterladen (Zip-Verzeichnis)  und direkt mit der frei verfügbaren Demo-Version unserer Process Mining Software Disco analysieren.

Quellen

[1] 2015 Data Science Salary Survey (von Oreilly.com, PDF)

[2] Komplexe Abläufe verständlich dargestellt mit Process Mining (hier im Data Science Blog)

[3] You Need To Be Careful How You Measure Your Processes (fluxicon.com)

KNN: Vorwärtspass

Wenn die Gewichte eines künstlichen neuronalen Netzwerkes trainiert sind, kann es verwendet werden, um Vorhersagen über eine am Eingang angelegte Beobachtung zu treffen. Hierzu werden Schicht für Schicht, in einem sogenannten Vorwärtspass (Forward-Pass), die Aktivierungen der einzelnen Neuronen ermittelt, bis ein Ergebnis an der Ausgabeschicht anliegt. Der ganze Prozess hat zwar einen eigenen Namen (Vorwärtspass), ist aber im Endeffekt nur ein iteratives durchführen von mehreren logistischen Regressionen und entspricht dem Vorgehen aus dem Artikel „KNN: künstliche Neuronen“.

Anwendungsbeispiel

Im folgenden Beispiel verwenden wir die Wahrheitstabelle von einem X-OR Logikgatter (siehe Abbildungen unten links) als Ground Truth Data. Ziel ist es, den Ausgangwert Y, für einen beliebig anliegenden Eingangsvektor [X1, X2] vorherzusagen. Die Aufgabe ist recht komplex, so dass eine einfache lineare oder logistische Regression keine zufriedenstellende Lösung finden wird. Die zum Einsatz kommende  Netzwerkstruktur ist ein 2-schichtiges Feedforward Netzwerk mit zwei Eingangsneuronen, einer verborgenen Schicht und einem Ausgangsneuron.

XOR Wahrheitstabelle

X1 X2 Y = X1 ⊻ X2
0 0 0
0 1 1
1 0 1
1 1 0

 

Da das Netzwerk wie anfänglich erwähnt, bereits trainiert ist, gebe ich die Gewichte (Theta) vor. Werden die Werte als Matrix dargestellt, können mit Hilfe der linearen Algebra die Aktivierungswahrscheinlichkeiten aller Neuronen einer Schicht auf einmal ausgerechnet werden.

Theta 1

θ11 =  2,7 θ12 =   3,1
θ13 =  5,6 θ14 = -6
θ15 = -5,4 θ16 =  6,2
Theta 2

θ21 =  9,6
θ22 = -6,6
θ23 = -6,5

Programmcode

Für die eigentlichen Berechnungen verwenden wir die Programmiersprache Octave oder MATLAB. Octave ist eine kostenlose alternative zu MATLAB. Wobei es nicht notwendig ist irgendetwas zu installieren, da es auch eine Online Variante von MATLAB/Octave gibt:
http://www.tutorialspoint.com/execute_matlab_online.php

 %--------------------- Daten -----------------------
 X = [0 0;       		% Eingangsdaten
      0 1;
      1 0;
      1 1] 
     
 Y = [0;1;1;0] 			% erwartete XOR Ausgangsdaten


 theta1 = [2.7, 3.1; 	% antrainierte Gewichte der ersten Schicht
           5.6,  -6;
          -5.4, 6.2]
         
 theta2 = [9.6;			% antrainierte Gewichte der zweiten Schicht
          -6.6;
          -6.5]

 m = length(X)			% Anzahl der Eingangsdaten


 %--------------------- Vorwärtspass -----------------------
 V = X					% anlegen der Eingangsdaten an die Eingangsschicht

 % 1. berechne die Aktivierungen der verborgenen Schicht
 V = [ones(m,1) V]		% hinzufügen der Bias Units  (sind immer 1)
 Zv = V * theta1			% Summe aus den Eingangswerten multipliziert mit deren Gewichten
 H = 1 ./ (1 .+ e.^-Zv)	% anwenden der Sigmoid Funktion auf die Aktivierungsstärke Zv

 % 2. berechne die Aktivierungen der Ausgangsschicht
 H = [ones(m,1) H]		% hinzufügen der Bias Units an die verborgene Schicht
 Zh = H * theta2			% Produkt aus den Aktivierungen der Neuronen in H und Theta2
 O = 1 ./ (1 .+ e.^-Zh)	% Vorhersage von dem Netzwerk

 % 3. berechne die Vorhersageungenauigkeit
 loss = (O .- Y) .^ 2 	% quadratischer Fehler von der Vorhersage und der Zielvorgabe Y
 mse = sum(loss) / m		% durchschnittlicher quadratischer Fehler aller Vorhersagen

Ein paar Sätze zu den verwendeten Befehlen. Der Punkt vor manchen Operationen gibt an, dass die Operation Elementweise durchzuführen ist (wichtig bei der Sigmoid Funktion). Die Methode ones(M,N) erzeugt eine MxN große Matrix gefüllt mit den Werten 1. Wir erzeugen damit einen Spaltenvektor der unseren Bias Units entspricht und den wir anschließend an eine vorhandene Matrix horizontal anfügen.

Wird das Programm ausgeführt schreibt es unter anderem die Werte von der Ausgabeschicht O (Output Layer) auf die Konsole. Da wir alle XOR Variationen auf einmal ausgerechnet haben, erhalten wir auch vier Vorhersagen. Verglichen mit der Zielvorgaben Y sind die Werte von O sehr vielversprechend (ähnlich).

X1 X2 Y O
0 0 0 0.057099
0 1 1 0.936134
1 0 1 0.934786
1 1 0 0.050952

 

Komplexe Netzwerke

Hätte das Netzwerk noch weitere verborgene Schichten, müssen Teile des Programmcodes wiederholt ausgeführt werden. Grundsätzlich sind drei Befehle pro Schicht notwendig:

H1 = [ones(m,1) H1]			% hinzufügen der Bias Units an die verborgene Schicht
Zh1 = H1 * theta2			% Produkt aus den Aktivierungen der Neuronen in H1 und Theta2
H2 = 1 ./ (1 .+ e.^-Zh1)		% Aktivierungswahrscheinlichkeiten für die nächste verborgene Schicht

Im nächsten Artikel schauen wir uns das Training solcher Netzwerke an.

Text Mining mit R

R ist nicht nur ein mächtiges Werkzeug zur Analyse strukturierter Daten, sondern eignet sich durchaus auch für erste Analysen von Daten, die lediglich in textueller und somit unstrukturierter Form vorliegen. Im Folgenden zeige ich, welche typischen Vorverarbeitungs- und Analyseschritte auf Textdaten leicht durchzuführen sind. Um uns das Leben etwas leichter zu machen, verwenden wir dafür die eine oder andere zusätzliche R-Library.

Die gezeigten Schritte zeigen natürlich nur einen kleinen Ausschnitt dessen, was man mit Textdaten machen kann. Der Link zum kompletten R-Code (.RMD) findet sich am Ende des Artikels.

Sentimentanalyse

Wir verwenden das Anwendungsgebiet der Sentimentanalyse für diese Demonstration. Mittels der Sentimentanalyse versucht man, Stimmungen zu analysieren. Im Prinzip geht es darum, zu erkennen, ob ein Autor mit einer Aussage eine positive oder negative Stimmung oder Meinung ausdrückt. Je nach Anwendung werden auch neutrale Aussagen betrachtet.

Daten einlesen

Datenquelle: ‘From Group to Individual Labels using Deep Features’, Kotzias et. al,. KDD 2015

Die Daten liegen als cvs vor: Die erste Spalte enhält jeweils einen englischen Satz, gefolgt von einem Tab, gefolgt von einer 0 für negatives Sentiment und einer 1 für positives Sentiment. Nicht alle Sätze in den vorgegebenen Daten sind vorklassifiziert.

Wir lesen 3 Dateien ein, fügen eine Spalte mit der Angabe der Quelle hinzu und teilen die Daten dann in zwei Datensätze auf. Der Datensatz labelled enthält alle vorklassifizierten Sätze während alle anderen Sätze in unlabelled gespeichert werden.

## 'readSentiment' liest csv ein, benennt die Spalten und konvertiert die Spalte 'sentiment' zu einem Faktor 
amazon <-readSentiment("amazon_cells_labelled.txt")
amazon$source <- "amazon"
imdb <-readSentiment("imdb_labelled.txt")
imdb$source <- "imdb"
yelp <-readSentiment("yelp_labelled.txt")
yelp$source <- "yelp"

allText <- rbindlist(list(amazon, imdb, yelp), use.names=TRUE)
allText$source <- as.factor(allText$source)

unlabelled <- allText[is.na(allText$sentiment), ]
labelled <- allText[!is.na(allText$sentiment), ]

Wir haben nun 3000 vorklassifizierte Sätze, die entweder ein positives oder ein negatives Sentiment ausdrücken:

text               sentiment 	source    
Length:3000        0:1500    	amazon:1000  
Class :character   1:1500    	imdb  :1000  
Mode  :character             	yelp  :1000

Textkorpus anlegen

Zuerst konvertieren wir den Datensatz in einen Korpus der R-Package tm:

library(tm)
corpus <- Corpus(DataframeSource(data.frame(labelled$text)))
# meta data an Korpus anfügen:
meta(corpus, tag = "sentiment", type="indexed") <- labelled$sentiment
meta(corpus, tag = "source", type="indexed") <- labelled$source

myTDM  <- TermDocumentMatrix(corpus, control = list(minWordLength = 1))

## verschieden Möglichkeiten, den Korpus bzw die TermDocumentMatrix zu inspizieren:
#inspect(corpus[5:10])
#meta(corpus[1:10])
#inspect(myTDM[25:30, 1])
# Indices aller Dokumente, die das Wort "good" enthalten:
idxWithGood <- unlist(lapply(corpus, function(t) {grepl("good", as.character(t))}))
# Indices aller Dokumente mit negativem Sentiment, die das Wort "good" enthalten:
negIdsWithGood <- idxWithGood &  meta(corpus, "sentiment") == '0'

Wir können uns nun einen Eindruck über die Texte verschaffen, bevor wir erste Vorverarbeitungs- und Säuberungsschritte durchführen:

  • Fünf Dokumente mit negativem Sentiment, die das Wort “good” enthalten: Not a good bargain., Not a good item.. It worked for a while then started having problems in my auto reverse tape player., Not good when wearing a hat or sunglasses., If you are looking for a good quality Motorola Headset keep looking, this isn’t it., However, BT headsets are currently not good for real time games like first-person shooters since the audio delay messes me up.
  • Liste der meist verwendeten Worte im Text: all, and, are, but, film, for, from, good, great, had, have, it’s, just, like, movie, not, one, phone, that, the, this, very, was, were, with, you
  • Anzahl der Worte, die nur einmal verwendet werden: 4820, wie z.B.: ‘film’, ‘ive, ’must’, ‘so, ’stagey’, ’titta
  • Histogramm mit Wortfrequenzen:

Plotten wir, wie oft die häufigsten Worte verwendet werden:

Vorverarbeitung

Es ist leicht zu erkennen, dass sogenannte Stoppworte wie z.B. “the”, “that” und “you” die Statistiken dominieren. Der Informationsgehalt solcher Stopp- oder Füllworte ist oft gering und daher werden sie oft vom Korpus entfernt. Allerdings sollte man dabei Vorsicht walten lassen: not ist zwar ein Stoppwort, könnte aber z.B. bei der Sentimentanalyse durchaus von Bedeutung sein.

Ein paar rudimentäre Vorverarbeitungen:

Wir konvertieren den gesamten Text zu Kleinbuchstaben und entfernen die Stoppworte unter Verwendung der mitgelieferten R-Stoppwortliste für Englisch (stopwords(“english”)). Eine weitere Standardoperation ist Stemming, das wir heute auslassen. Zusätzlich entfernen wir alle Sonderzeichen und Zahlen und behalten nur die Buchstaben a bis z:

replaceSpecialChars <- function(d) {
  ## normalerweise würde man nicht alle Sonderzeichen entfernen
  gsub("[^a-z]", " ", d)
}
# tolower ist eine built-in function
corpus <- tm_map(corpus, content_transformer(tolower)) 
# replaceSpecialChars ist eine selbst geschriebene Funktion:
corpus <- tm_map(corpus, content_transformer(replaceSpecialChars))
corpus <- tm_map(corpus, stripWhitespace)
englishStopWordsWithoutNot <- stopwords("en")[ - which(stopwords("en") %in% "not")]
corpus <- tm_map(corpus, removeWords, englishStopWordsWithoutNot)
## corpus <- tm_map(corpus, stemDocument, language="english")

myTDM.without.stop.words <- TermDocumentMatrix(corpus, 
                                      control = list(minWordLength = 1))

 

Schlagwortwolke bzw Tag Cloud

Schließlich erzeugen wir eine Tag-Cloud aller Worte, die mindestens 25 mal im Text verwendet werden. Tag-Clouds eignen sich hervorragend zur visuellen Inspektion von Texten, allerdings lassen sich daraus nur bedingt direkte Handlungsanweisungen ableiten:

wordfreq <- findFreqTerms(myTDM.without.stop.words, lowfreq=25)
termFrequency <- rowSums(as.matrix(myTDM.without.stop.words[wordfreq,])) 
# eine Alternative ist 'tagcloud'
library(wordcloud)
wordcloud(words=names(termFrequency),freq=termFrequency,min.freq=5,max.words=50,random.order=F,colors="red")

schlagwortwolke

Word-Assoziationen

Wir können uns für bestimmte Worte anzeigen lassen, wie oft sie gemeinsam mit anderen Worten im gleichen Text verwendet werden:

  • Worte, die häufig gemeinsam mit movie verwendet werden:
findAssocs(myTDM.without.stop.words, "movie", 0.13)
## $movie
##   beginning        duet fascinating        june       angel   astronaut 
##        0.17        0.15        0.15        0.15        0.14        0.14 
##         bec       coach     columbo   considers     curtain       dodge 
##        0.14        0.14        0.14        0.14        0.14        0.14 
##     edition   endearing    funniest    girolamo         hes         ive 
##        0.14        0.14        0.14        0.14        0.14        0.14 
##     latched         lid      makers     peaking     planned  restrained 
##        0.14        0.14        0.14        0.14        0.14        0.14 
##       scamp     shelves     stratus       titta        ussr      vision 
##        0.14        0.14        0.14        0.14        0.14        0.14 
##       yelps 
##        0.14
  • Worte, die häufig gemeinsam mit product verwendet werden:
findAssocs(myTDM.without.stop.words, "product", 0.12)
## $product
##        allot     avoiding        beats   cellphones       center 
##         0.13         0.13         0.13         0.13         0.13 
##      clearer   contacting       copier       dollar    equipment 
##         0.13         0.13         0.13         0.13         0.13 
##      fingers      greater      humming        ideal      learned 
##         0.13         0.13         0.13         0.13         0.13 
##       lesson        motor        murky   negatively          oem 
##         0.13         0.13         0.13         0.13         0.13 
##     official       online       owning         pens    petroleum 
##         0.13         0.13         0.13         0.13         0.13 
##     planning      related replacementr    sensitive     shipment 
##         0.13         0.13         0.13         0.13         0.13 
##        steer      voltage        waaay        whose    worthless 
##         0.13         0.13         0.13         0.13         0.13

 

Text-Mining

Wir erzeugen einen Entscheidungsbaum zur Vorhersage des Sentiments. Entscheidungsbäume sind nicht unbedingt das Werkzeug der Wahl für Text-Mining aber für einen ersten Eindruck lassen sie sich bei kleinen Datensätzen durchaus gewinnbringend einsetzen:

trainingData <- data.frame(as.matrix(myDTM))
trainingData$sentiment <- labelled$sentiment
trainingData$source <- labelled$source

formula <- sentiment ~ . 

if (rerun) {
  tree <- rpart(formula, data = trainingData)
  save(tree, file=sprintf("%s-tree.RData", prefix))
} else {
  load(file=sprintf("c:/tmp/%s-tree.RData", prefix))
}

myPredictTree(tree)

 

##          isPosSentiment
## sentiment FALSE TRUE
##         0  1393  107
##         1   780  720

Eine Fehlerrate von über 50% auf den Trainingsdaten für positive Sentiments ist natürlich nicht berauschend und daher testen wir zum Schluß noch Support Vector Machines:

library(e1071)
  if (rerun) {
    svmModel <- svm(formula, data = trainingData)
    save(svmModel, file=sprintf("%s-svm.RData", prefix))
  } else {
    load(file=sprintf("c:/tmp/%s-svm.RData", prefix))
  }

myPredictSVM <- function(model) {
  predictions <- predict(model, trainingData)

  trainPerf <- data.frame(trainingData$sentiment, predictions, trainingData$source)
  names(trainPerf) <- c("sentiment", "isPosSentiment", "source")
  
  with(trainPerf, {
    table(sentiment, isPosSentiment, deparse.level = 2)
  })
  
}
myPredictSVM(svmModel)
##          isPosSentiment
## sentiment    FALSE 	TRUE
##         0 	1456   	  44
##         1   	  23 	1477

Die Ergebnisse sehen deutlich besser aus, müssten aber natürlich noch auf unabhängigen Daten verifiziert werden, um z. B. ein Overfittung zu vermeiden.

Download-Link zum kompletten R-Code für dieses Text-Mining-Beispiel: https://www.data-science-blog.com/download/textMiningTeaser.rmd

Wahrscheinlichkeitesrechnung – Grundstein für Predictive Analytics

Die Wahrscheinlichkeitsrechnung behandelt die Gesetzmäßigkeiten  des (von außen betrachtet) zufälligen Vorkommens bestimmter Ereignisse aus einer vorgegebenen Ereignismenge. Die mathematische Statistik fasst diese Wahrscheinlichkeitsrechnung zur Stochastik zusammen, der Mathematik des Zufalls

Mit diesem Artikel – zu der ich eine Serie plane – möchte ich den Einstieg in Predictive Analytics wagen, zugegebenermaßen ein Themengebiet, in dem man sich sehr schnell verlieren und den Wald vor lauter Bäumen nicht mehr findet. Also belassen wir es erstmal bei einem sanften Einstieg…

Klassische Definition der Wahrscheinlichkeit

Das klassische Verständnis der Wahrscheinlichkeit geht von endlich vielen Ausgängen (Ereignisse) aus, bei denen alle Ausgänge gleich wahrscheinlich sind. Die dafür erdachten Zufallsexperimente wurden von dem französischen Mathematiker Pierre Simon Lapplace (1749 – 1827) zum ersten Mal nachvollziehbar beschrieben. Diese Zufallsexperimente werden daher auch Laplace-Experimente genannt.

Bei einem Laplace Experiment gilt:

Ereignismenge Omega = {omega_1,omega_2,omega_3,…omega_s}
Wahrscheinlichkeit p(w_j)=frac{1}{s}=frac{1}{|Omega|}
(j=1,2,3,…s)

Die Ergebnismenge, das ist die Menge aller möglichen Ereignisse, wird in der Regel mit einem Omega (Omega) gekennzeichnet, ein beliebiges Einzelereignis hingegen als omega (kleines Omega).

Eine typische Laplace-Wahrscheinlichkeitsfrage ist ein bevorstehender Würfelwurf. Wie groß ist die Wahrscheinlichkeit, mit einem echten (unverfälschten) Würfel eine gerade Zahl zu würfeln?

Mit Omega={1,2,3,4,5,6} und A={2,4,6} folgt P(A)=frac{|A|}{|Omega|}=frac{3}{6}=0,5.

Axiomatische Definition der Wahrscheinlichkeit

Jeder Wahrscheinlichkeitsbegriff muss auf denselben äußeren Bedingungen beruhenden Zufallsexperimenten beliebig oft wiederholbar sein. Die axiomatische Definition der Wahrscheinlichkeit P(A) eines Ereignisses A berücksichtigt Axiome. Axiome sind nicht beweisbare Grundpostulate, darunter fallen Gegebenheiten, die gewissermaßen unverstanden sind und deren Vorkommen und Bedeutung in der Regel empirisch belegt werden müssen.
Die Definition der axiomatischen Wahrscheinlichkeit stammt vom russischen Mathematiker Andrej Nikollajewitsch Kolmogorov (1903 – 1987).

In der Realität gibt es keine perfekte Zufälligkeit, denn jedes Ergebnis ist von ganz bestimmten Faktoren abhängig. Auf den Würfelwurf bezogen, hängt das gewürfelte Ergebnis von unüberschaubar vielen Faktoren ab. Wären diese alle bekannt, könnte das Ergebnis exakt berechnet und somit mit einer Sicherheit vorhergesagt werden. Da dafür jedoch in der Praxis unbestimmbar viele Faktoren eine Rolle spielen (beispielsweise die genaue Beschaffenheit des Würfels in Form, Gewicht, Materialwiderstand, der genaue Winkel, die Fallgeschwindigkeit, die Ausgangsposition der Hand und des Würfels) können wir das Ergebnis nur schätzen, indem die Beschreibung des Vorgangs vereinfacht wird. Nur diese Vereinfachung macht es uns möglich, Vorhersagen zu treffen, die dann jedoch nur eine Wahrscheinlichkeit darstellen und somit mit einer Unsicherheit verbunden sind.

In der abstrakten Welt des perfekten Zufalls gäbe es die gleiche Chance, eine “4” zu würfeln, wie jeweils alle anderen Ziffern.

Mit Omega={1,2,3,4,5,6} und A={4} folgt P(A)=frac{|A|}{|Omega|}=frac{1}{6}=0,167.

Das Ergebnis eines Wurfes des Würfels ist in der Realität auch von der Beschaffenheit des Würfels abhängig. Angenommen, der Würfel hat auf Seite der Ziffer “4” bei allen vier Kanten eine Abrundung, die ein Umkippen auf eine andere Seite begünstigen, so bedeutet dies:

  • Die Ziffer “4” hat vier abgerundete Kanten, die Wahrscheinlichkeit eine “4” zu würfeln sinkt stark
  • Die Ziffern “1”, “3”, “5”, “6” haben jeweils eine abgerundete Kante (Berühungskante zur “4”) sinkt
  • Die Ziffer “2” liegt der “4” gegenüber, hat somit keine Berührungskante und keine Abrundung, so steigt ihre Chance gewürfelt zu werden

Nun könnte sich nach einer empirischen Untersuchung mit einer ausreichenden Stichprobe folgende Wahrscheinlichkeit ergeben:

  • p(4) = 0,1
  • p(1) = p(3) = p(5) = p(6) = 0,15
  • p(2) = 0,3
  • P(Omega) = 1,0

Durch die Analyse der bisherigen Wurf-Historie und der Betrachtung der Beschaffenheit der Kanten des Würfels können wir uns somit weit realistischere Wahrscheinlichkeiten über die Wurfergebnisse ermitteln. Wie hoch wäre nun die Wahrscheinlichkeit, nach einem Wurf eine gerade Zahl zu würfeln?

Mit Omega={1,2,3,4,5,6} und A={2,4,6} folgt P(A)=p(2)+p(4)+p(6)=0,55.

Die Abschätzung von Pi mit Apache Spark

Auf den Berliner Data Science/Big Data/Data Analytics/…-Meetups auf denen ich in letzter Zeit des Öfteren zugegen war, tauchte immer wieder der Begriff Spark auf. Ich wollte wissen was es hiermit auf sich hat. Nachdem ich Spark 1.5.1 lokal auf meinem Mac installiert hatte, fing ich an Wörter in frei verfügbaren Texten zu zählen. Da es mir aber zu aufwändig schien, extrem lange Texte im Internet zu suchen und ich ein Gefühl für die Leistungsfähigkeit von Spark bekommen wollte, widmete ich mich einem skalierbaren Problem: der Abschätzung von Pi mit der Monte Carlo-Methode.

 1000 Zufallspunkte lokal auf Mac

spark-scala-interface-pi-example

Dies war wie zu erwarten keine Herausforderung für meine Hardware. Was passiert bei 10^6/ 10^7/ 10^8/ 10^9… Zufallspunkten?

dataset-spark-pi-example-1

An dieser Stelle stieß ich auf ein “Integer-Problem“. Weil 3*10^9 > 2^31 – 1, kann in diesem Fall nicht mehr der Datentyp Integer verwendet werden, sondern man müsste „long Integer“ (64 bit) nehmen. Was mich nun jedoch viel mehr interessierte als mit Zufallspunkten > 2^31 – 1  zu experimentieren, war eine Spark-Installation auf AWS und die entsprechenden Berechnungszeiten. Ich installierte Spark 1.5.0 (auf Hadoop 2.6.0 YARN) auf einem AWS-Cluster (2 Core/1 Master x m3.xlarge). Zu meiner Überraschung ergab sich Folgendes:

dataset-spark-pi-example-2

Warum war mein Mac schneller als ein AWS-Cluster? Eine m3.xlarge-Instanz hat 4 Kerne und 15 GB Arbeitsspeicher, mein Mac ziemlich genau die Hälfte… Gut, dann probieren wir das Ganze mal mit einem 4 Core/1 Master x m3.xlarge-Cluster.

dataset-spark-pi-example-3

Es ergibt sich kein signifikanter Unterschied. Erst die Verwendung von einem 3 Core/1 Master x r3.2xlarge-Cluster brachte eine Beschleunigung. Wo ist der Flaschenhals? Um Netzwerkeffekte zu prüfen, habe ich schließlich eine 0 Core/1 Master-AWS-Installation getestet.

dataset-spark-pi-example-4

Dieser letzte Test skalierte zu meinen vorherigen Tests auf dem AWS-System, und er wies darauf hin, dass der Flaschenhals kein Netzwerkeffekt war.

Bei heise Developer fand ich einen sehr interessanten Artikel, welcher sich dem Thema „optimale Konfiguration der virtualisierten Cloud-Hardware für den jeweiligen Anwendungsfall finden“ widmet: Benchmarking Spark: Wie sich unterschiedliche Hardware-Parameter auf Big-Data-Anwendungen auswirken

Für heute belasse ich es bei dem vorgestellten Experiment.

To be continued…,

Daten in Formation bringen

Bei den vielfach stattfindenden Diskussionen um und über den Begriff Big Data scheint es eine Notwendigkeit zu sein, Daten und Informationen gegeneinander abzugrenzen. Auf Berthold Brecht geht folgendes Zitat zurück: „Ein Begriff ist ein Griff, mit denen man Dinge bewegen kann“. Folgt man dieser Aussage, so kann man leicht die falschen Dinge bewegen, wenn man die Begriffe nicht im Griff hat.
Eine mögliche Herangehensweise zur Unterscheidung der Begriffe Daten und Informationen liefert dabei die Semiotik (Zeichentheorie), welche in Syntax, Semantik und Pragmatik untergliedert werden kann:

Unter Syntax (altgr.: Ordnung, Reihenfolge) versteht man im Allgemeinen Regeln, welche es erlauben, elementare Zeichen zu neuen, zusammengesetzten Zeichen, Worten und Wortgruppen zu kombinieren. Daten sind tendenziell diesem Bereich zuzuordnen.

Beispiel:    10:30    24    Essen

Die Semantik (griech.: bezeichnen, zum Zeichen gehörend, auch Bedeutungslehre) indes beschäftigt sich mit Beziehungen und Bedeutung von Zeichen (Kontext). Regeln der Zusammensetzung aus der Syntax stehen demnach den Interpretationsregeln der Semantik gegenüber. Mit anderen Worten, der Kontext (Bezugsrahmen), in welchem die Zeichen verwendet werden, bestimmt deren Bedeutung. Ludwig Wittgenstein (1889 – 1951) verglich Worte mit Schachfiguren und postulierte, dass die Verwendung eines Wortes dessen Bedeutung bestimmt.

Beispiel:    10:30 Uhr    24 Grad Celcius    Stadt Essen

Pragmatik wiederum beschäftigt sich mit dem Gebrauch von Worten und somit der Verwendung von Sprache in spezifischen Situationen. Bei Informationen stehen dabei Handlungsorientierung sowie subjektiver Nutzen im Vordergrund. Informationen reduzieren Unsicherheit beim Empfänger, sie bereiten eine Entscheidung vor.

Beispiel: Auf Grund der Temperatur in der Stadt Essen um 10:30 Uhr benötige ich keine Jacke

Abbildung 1 Daten versus Informationen, eigene Darstellung

Abbildung 1 Daten versus Informationen, eigene Darstellung

Fazit:

(Big) Daten sind eine notwendige, aber keine hinreichende Bedingung für die Bildung von entscheidungsrelevanten Informationen. In anderen Worten, Daten sind vergleichbar mit Ziegelsteinen. Wenn man aus Ziegelsteinen (Daten) kein Haus (Kontext, Informationen) baut, sind es bloß Ziegelsteine. Man kann Informationen wiederum als Rohstoff interpretieren, aus welchem Entscheidungen hergestellt werden (können).

Wie lernen Maschinen?

Machine Learning ist eines der am häufigsten verwendeten Buzzwords im Data-Science- und Big-Data-Bereich. Aber lernen Maschinen eigentlich und wenn ja, wie? In den meisten Fällen lautet die Antwort: Maschinen lernen nicht, sie optimieren. Fällt der Begriff Machine Learning oder Maschinelles Lernen, so denken viele sicherlich zuerst an bekannte “Lern”-Algorithmen wie Lineare Regression, Logistische Regression, Neuronale Netze oder Support Vector Machines. Die meisten dieser Algorithmen – wir beschränken uns hier vorerst auf den Bereich des Supervised Learning – sind aber nur Anwendungen einer anderen, grundlegenderen Theorie – der mathematischen Optimierung. Alle hier angesprochenen Algorithmen stellen dem Anwender eine bestimmte Ziel- oder Kostenfunktion zur Verfügung, aus der sich i.a. der Name der Methode ableitet und für die im Rahmen des Lernens ein Minimum oder Optimum gefunden werden soll. Ein großer Teil des Geheimnisses und die eigentliche Stärke der Machine-Learning-Algorithmen liegt nun darin, dass dieser Minimierungsprozess effizient durchgeführt werden kann. Wir wollen im Folgenden kurz erklären, wie dies in etwa funktioniert. In einem späteren Blogpost gehen wir dann genauer auf das Thema der Effizienz eingehen. Read more

Die üblichen Verdächtigen – 8 häufige Fehler in der Datenanalyse

Das eine vorab: eine Liste der meist begangenen Fehler in der Datenanalyse wird in jedem Fall immer eine subjektive Einschätzung des gefragten Experten bleiben und unterscheidet sich je nach Branche, Analyse-Schwerpunkt und Berufserfahrung des Analysten. Trotzdem finden sich einige Missverständnisse über viele Anwendungsbereiche der Datenanalyse hinweg immer wieder. Die folgende Liste gibt einen Überblick über die acht am häufigsten begangenen Fehler in der angewandten Datenanalyse von denen ich behaupte, dass sie universell sind.

  1. Statistische Signifikanz versus Relevanz

Die Idee der statistischen Signifikanz wird oft missverstanden und deswegen fälschlicherweise mit statistisch belegter Relevanz gleichgesetzt. Beide messen jedoch sehr unterschiedliche Dinge. Statistische Signifikanz ist ein Maß der Gewissheit, welches die Zufälligkeit von Variation berücksichtigt. „Statistisch signifikant“ bedeutet also, dass es unwahrscheinlich ist, dass ein bestimmtes Phänomen nur zufällig auftritt. „Statistisch nicht signifikant“ bedeutet, dass neben der zufälligen Variation keine systematische bewiesen werden konnte. Wichtig: dies bedeutet nicht, dass es keine Effekte gibt, sondern, dass diese nicht belegt werden konnten. Statistische Signifikanz lässt sich mit ausreichend vielen Beobachtungen allerdings auch für sehr kleine Unterschiede belegen. Generell gilt: je größer die Stichprobe, desto kleiner werden die Unterschiede, welche als statistisch signifikant getestet werden. Deswegen unterscheidet sich die statistische Relevanz von der statistischen Signifikanz.

Statistische Relevanz misst hingegen die Effektstärke eines Unterschiedes. Die Größe eines Unterschiedes wird dazu in Relation zur Streuung der Daten gesetzt und ist damit unabhängig von der Stichprobengröße. Je größer die Varianz der Zufallsvariablen, desto kleiner wird die Effektstärke.

  1. Korrelation versus Kausalität

Wird eine hohe Korrelation zwischen zwei Größen festgestellt, so wird oft geschlussfolgert, dass eine der beiden Größen die andere bestimmt. In Wahrheit können auch komplexe statistische und ökonometrische Modelle keine Kausalität beweisen. Dies gilt sogar, wenn die Modellierung einer theoretischen Grundlage folgt, denn auch die kann falsch sein. Regelmäßig lehnen sich Forscher und Analysten aus dem Fenster, indem sie Wirkungen behaupten, welche eine genaue Prüfung nicht aushalten. Standardfragen, die als Automatismus einer jeden Analyse folgen sollte, welche behauptet Effekte gefunden zu haben sind: Welche Rolle spielen unbeobachtete Heterogenitäten, umgekehrte Kausalität und Messfehler in den Variablen für das Schätzergebnis? Erst wenn diese drei Quellen von Endogenität kontrolliert werden und außerdem davon ausgegangen werden kann, dass die Stichprobe die Grundgesamtheit repräsentiert, kann ein kausaler Zusammenhang angenommen und quantifiziert werden.

  1. Unbeobachtete Einflussfaktoren

Nicht messbare und deswegen nicht erhobene Einflüsse verzerren die geschätzten Parameter der kontrollierbaren Faktoren, sofern letztere mit den unbeobachteten im Zusammenhang stehen. In anderen Worten: der geschätzte Effekt wird fälschlicherweise der beobachteten Größe zugeschrieben, wenn eigentlich eine dritte, nicht beobachtete Größe die Zielgröße bedingt und gleichzeitig mit der beobachteten Größe korreliert. Das Lehrbeispiel
für Verzerrungen durch unbeobachtete Größen ist die Lohngleichung – eine Gleichung die seit nunmehr 60 Jahren intensiv beforscht wird. Die Schwierigkeit bei der Quantifizierung des Effektes von Ausbildung liegt darin, dass die Entlohnung nicht nur über Alter, Berufserfahrung, Ausbildung und den anderen Kontrollvariablen variiert, sondern auch durch das unterschiedlich ausgeprägte Interesse an einem lukrativen Erwerb und die Fähigkeit des Einzelnen, diesen zu erlangen. Die Herausforderung: es gibt keinen statistischen Test, welche eine Fehlspezifikation durch unbeobachtete Größen angibt. Unabdingbar ist deswegen ein tiefgehendes Verständnis des Analyseproblems. Dieses befähigt den Analysten Hypothesen zu formulieren, welche unbeobachteten Größen über eine Korrelation mit dem getesteten Regressor im Fehlerterm ihr Unwesen treiben. Um Evidenz für die Hypothesen zu schaffen, müssen smarte Schätzdesigns oder ausreichend gute Instrumente identifiziert werden.statistische-verzerrung

  1. Selektionsverzerrung

Eine Selektionsverzerrung liegt vor, wenn Beobachtungen nicht für jedes Individuum vorliegen oder von der Analyse ausgeschlossen werden. Die Grundvoraussetzung für jeden statistischen Hypothesentest ist die Annahme einer Zufallsstichprobe, so dass die Zielpopulation repräsentativ abgebildet ist. In der Praxis ergeben sich allerdings oft Situationen, in denen bestimmte Merkmale nur für eine Gruppe, aber nicht für eine zweite beobachtet werden können. Beispielsweise kann der Effekt einer gesundheitsfördernden Maßnahme eines Großbetriebes für die gesamte Belegschaft nicht durch die freiwillige Teilnahme einiger Mitarbeiter gemessen werden. Es muss explizit dafür kontrolliert werden, welche Unterschiede zwischen Mitarbeitern bestehen, welche das Angebot freiwillig in Anspruch nehmen im Vergleich zu denen, die es nicht annehmen. Eine Gefahr der Über- oder Unterschätzung der Effekte besteht generell immer dann, wenn über die Beschaffenheit der Stichprobe im Vergleich zur Grundgesamtheit nicht nachgedacht wird. Auf Basis einer nicht repräsentativen Stichprobe werden dann fälschlicherweise Generalisierungen formuliert werden, welche zu falschen Handlungsempfehlungen führen können.

  1. Überanpassung und hohe Schätzervarianz

Überanpassung passiert, wenn der Analyst „zu viel“ von den Daten will. Wird das Model überstrapaziert, so erklären die Kontrollvariablen nicht nur die Zielgröße sondern auch das weiße Rauschen, also die Zufallsfehler. Die Anzahl der Regressoren im Verhältnis zur Anzahl der Beobachtungen ist in solch einer Spezifikation übertrieben. Das Problem: zu wenig Freiheitsgrade und das vermehrte Auftreten von Multikollinearität führen zu einer hohen Varianz in der Verteilung der Schätzer. Ein Schätzergebnis einer Spezifikation mit einer hohen Schätzervarianz kann also Schätzergebnisse produzieren, welche vom wahren Wert weiter entfernt sind als ein verzerrter Schätzer. Tatsächlich ist ein „falsches“ meistens ein Hinweis auf Multikollinearität.verlorene-effizienz-statistisches-modell

Oft macht es Sinn, die Spezifikation anzupassen, indem man die korrelierten Regressoren ins Verhältnis zueinander zu setzt. In der Praxis geht es immer darum, einen Kompromiss aus Verzerrung und Varianz zu finden. Das Kriterium hierfür ist die Minimierung des mittleren quadratischen Fehlers. Um zu überprüfen, ob der Analyst über das Ziel hinausgeschossen ist, gibt es zudem verschiedene Validierungsmethoden, welche je nach Methode einen bestimmten Anteil oder sogar keine Daten „verschwenden“, um das Modell zu überprüfen.kompromiss-quadratischer-fehler-statistisches-modell

  1. Fehlende Datenpunkte

Beobachtungen mit fehlenden Datenpunkten werden in der Praxis aus der Analyse in den meisten Fällen ausgeschlossen, einfach deswegen, weil das am schnellsten geht. Bevor das gemacht wird, sollte allerdings immer die Frage vorangestellt werden, wieso diese Datenpunkte fehlen. Fehlen sie zufällig, so führt der Ausschluss der Beobachtungen zu keinen unterschiedlichen Ergebnissen. Fehlen sie allerdings systematisch, beispielsweise wenn Personen mit bestimmten Merkmalen spezifische Daten lieber zurückhalten, so ergeben sich daraus Herausforderungen. Es sollte dann darum gehen, diese gesamte Verteilung zu ermitteln. Ist unklar, ob die Daten zufällig oder systematisch fehlen, so sollte sich der Analyst im Zweifel dieser Frage annehmen. Es müssen dann Informationen identifiziert werden, welche helfen die fehlenden Daten zu imputieren.

  1. Ausreißer

Ausreißer werden in vielen Anwendungen mit standardisierten Verfahren identifiziert und aus dem Datensatz entfernt. Dabei lohnt es sich in vielen Fällen, die Daten ernst zu nehmen. Die Voraussetzung hierfür: die Datenpunkte müssen legitim sein. Problemlos ausschließen lassen sich Datenpunkte, welche durch Eingabefehler und bewusste Falschmeldung erzeugt wurden. Legitime Datenpunkte sind hingegen “echte” Werte. Die Einbeziehung von Ausreißern kann mitunter einen inhaltlichen Beitrag zur Analyse leisten, da auch sie einen Teil der Population im Ganzen sind. Problematisch wird die Beibehaltung von Ausreißern, wenn durch sie Zusammenhänge identifizierbar werden, die auf den Rest der Population nicht zutreffen. Mögliche Verfahren, welche Ausreißer mit dem Rest der Beobachtungen versöhnen, sind Transformationen der Daten oder die Anwendung robuster Schätzverfahren. Beide Ansätze spielen mit einer stärkeren Gewichtung der mittleren Verteilung. Außerdem kann beispielsweise in Regressionen überprüft werden, inwieweit etwa ein nicht-linearer Fit die Ausreißer besser in die Schätzung aufnimmt.

  1. Spezifizierung versus Modellierung

Allzu oft werden komplizierte statistische Modelle gebaut, bevor überprüft wurde, was ein einfaches Modell leisten kann. Bevor jedoch komplexe Modelle gestrickt werden, sollte zuerst an der Spezifikation des Modells gearbeitet werden. Kleine Anpassungen wie die Inklusion verbesserter Variablen, die Berücksichtigung von Interaktionen und nicht-linearen Effekten bringen uns in manchen Fällen der Wahrheit näher als ein aufwendiges Modell und sollten in jedem Fall ausgereizt werden, bevor ein aufwendigeres Modell gewählt wird. Je einfacher das Modell, desto einfacher ist es in der Regel auch die Kontrolle darüber zu behalten. In jedem Fall sollten die gewählten Spezifikationen immer durch Sensitivitätsanalysen unterstützt werden. Unterschiede in der Variablendefinition und der Selektion der Daten, sollten sowohl getestet als auch berichtet werden. Einen guten Grund, das Modell zu wechseln hat der Analyst dann, wenn daraus ersichtlich wird, dass Annahmen des einfachen Modells verletzt werden und dieses deswegen keine validen Ergebnisse produziert.

Interview – Bedeutung von Data Science für Deutschland

Klaas Wilhelm Bollhoefer ist Chief Data Scientist bei The unbelievable Machine Company (*um), einem Full-Service Dienstleister für Cloud Computing und Big Data aus Berlin. Er übersetzt Business-Anforderungen in kundenspezifische Big Data Lösungen und agiert an der Schnittstelle von Business, IT, Künstlicher Intelligenz und Design. Er ist Community Manager diverser Fachgruppen sowie Mitglied in Beiräten und Jurys zahlreicheklaas-bollhoefer-web-fotor internationaler Big Data Veranstaltungen. Vor seiner Tätigkeit als Chief Data Scientist hatte Herr Bollhöfer bei Pixelpark den Bereich “Beratung und Konzeption” aus der Taufe gehoben und über mehrere Jahre verantwortet, sowie selbständig als strategischer Berater gearbeitet. Er hat Medientechnik, Visual Communication und Philosophie in Köln und Melbourne studiert, hielt Lehraufträge zu Project Governance & Social Data an der TU Berlin, HTW Berlin, der Uni Siegen und der FH Köln inne und schreibt ab und an für diverse Fachpublikationen.

Data Science Blog: Herr Bollhoefer, welcher Weg hat Sie ins Data Science von The unbelievable Machine (*um) geführt?

Bollhoefer: Das war alles andere als eine gradlinige Geschichte. Ich kannte Ravin Mehta, Gründer und Geschäftsführer von *um noch von der Pixelpark AG, bei der ich von 2000 bis 2009 in verschiedenen Positionen tätig war. Das nächste was Ravin vorhatte, nachdem er in den Cloud-Markt mit *um sehr erfolgreich eingestiegen war, war Big Data. Als ich ihn fragte, was Big Data denn genau sei, meinte er, dass wüsste (damals) noch niemand so genau!

Das war vor etwa vier Jahren und es war die Chance für mich, in dieses neue Thema einzusteigen und zudem eine tolle Gelegenheit – denn eigentlich bin ich ja Ingenieur – für mich, Mathematik wieder aufzufrischen. Ich war der erste Mitarbeiter für Data Science bei *um, habe das Dienstleistungsportfolio maßgeblich mitaufgebaut und konnte mich daher als Chief Data Scientist positionieren. Ich bin allerdings kein Spezialist, sondern Generalist über alles, was man dem Data Science so zuschreiben kann.

Data Science Blog: Welche Branchen profitieren durch Big Data und Data Science gegenwärtig und in naher Zukunft am meisten?

Bollhoefer: Branchen, die schon seit längerer Zeit direkt von Big Data und Data Science profitieren, sind die sogenannten Digital Pure Player, also vorwiegend junge Unternehmen, deren Geschäftsmodelle rein auf digitaler Kommunikation aufbauen sowie eCommerce-Unternehmen. Unter den Fachbereichen profitieren vor allem das Marketing und unter den Geschäftsmodellen ganz besonders das Advertising von Big Data Analytics. Der Begriff Customer Analytics ist längst etabliert.

Zu den Newcomern gehören die Branchen, auf die Deutschland besonders stolz ist: Sowohl die OEMs, als auch die größeren Zulieferer der Automobilbranche setzen mittlerweile vermehrt auf Big Data Analytics, wobei das Supply Chain Management mit Blick auf Logistik und Warenwirtschaft aktuell ganz klar im Vordergrund steht. Es ist hier für uns bereits viel Bewegung spürbar, aber noch lange nicht das Maximum ausgeschöpft. Zumindest ist für viele dieser Unternehmen der Einstieg gefunden.

Auch aus der klassischen Produktion entsteht im Kontext von Industrie 4.0 gerade Nachfrage nach Data Science, wenn auch etwas langsamer als erhofft. Die Potenziale durch die Vernetzung von Produktionsmaschinen sind noch nicht annähernd ausgeschöpft.

Branchen, die meiner Erfahrung nach noch nicht genügend aktiv geworden sind, sind die Chemie- und Pharma-Industrie. Auch Banken und Versicherungen, die ja nicht mit realen Werten, sondern nur mit Daten arbeiten, stehen – abgesehen von einigen Ausnahmen – überraschenderweise noch nicht in den Startlöchern, trotz großer Potenziale.

Data Science Blog: Und welche Branchen sehen Sie durch diese neuen Methoden und Technologien bedroht?

Bollhoefer: Eigentlich mag ich keine Bedrohungsszenarien durch Big Data skizzieren, denn diese führen nur dazu, dass sich Entscheider noch mehr vor dem Thema verschließen und genau dieses Verschließen stellt die eigentliche Bedrohung dar.

Die Chance sollte im Fokus stehen. Die deutsche Industrie, der produzierende Mittelstand, hat mit Big Data und Analytics die Möglichkeit, Fertigungs- und Prozessketten sehr viel weiter zu flexibilisieren und zu optimieren. Die Industrie 4.0 Initiative der deutschen Bundesregierung setzt hier ein ganz wichtiges Zeichen.

Es ist aber auch vollkommen klar, dass die deutsche Automobilindustrie – so wie sie heute existiert – massiv durch Google und Apple und deren Bestrebungen zum vernetzten und autonomen Fahrzeug bedroht ist. Es wird in absehbarer Zeit neue Wettbewerber geben, die klassische Gesamtkonzepte hinterfragen, sie neu und auch anders denken, als wir es heute kennen. Mobilität ist eines dieser Gesamtkonzepte.

Wenn die Kunden darauf anspringen, wird es existenzbedrohend für deutsche Unternehmen. Das ist aber nicht nur durch Big Data getrieben, sondern generell durch immer zügigere Technologiesprünge wie beispielsweise mehr Rechenpower, Batteriekapazität und Vernetzungstechnik.

Data Science Blog: Trotz der vielen Einflüsse von Big Data auf unsere Gesellschaft und Wirtschaft scheint die Berufsbezeichnung Data Scientist nur wenigen ein Begriff zu sein. Wird Data Science als Disziplin in Deutschland noch unterschätzt?

Bollhoefer: Ich denke nicht, dass dieses Berufsbild noch so unbekannt ist. Es ist vollkommen klar, dass es kein Wald- und Wiesen-Job ist, aber großen Unternehmen und Start-Ups ist heute schon sehr bewusst, dass Data Science ein wichtiges Themenfeld ist, ohne das keine Wettbewerbsfähigkeit mehr möglich wäre. Auch sind Profile bereits gut definiert, was ein Data Scientist ist und was man als solcher können sollte.

Data Science Blog: Kleinere Mittelständler haben von Data Science allerdings noch nicht viel gehört, ist das Thema für solche Unternehmen überhaupt von Bedeutung?

Bollhoefer: Kleinere Mittelständler kennen es noch nicht, aber Data Science ist für viele Unternehmen auch kleinerer Größen interessant. Die Werkzeuge, mit denen Data Science betrieben werden kann, sind immer einfacher zu bedienen. Auch Cloud-Lösungen machen diese innovativen Analysen für kleine Unternehmen erschwinglich, so sinkt die Hürde, mit seinen Daten viele der möglichen Potenziale zu realisieren.

Je leistungsfähiger die Werkzeuge werden, desto eher können auch kleinere Unternehmen von diesem Trend profitieren. Die Entwicklung, die gerade stattfindet sorgt für keine Not im Mittelstand, die entsprechenden Entscheider und Geschäftsführer sollten sich jedoch laufend über aktuelle Technologien und Möglichkeiten informieren.

Das ist zumindest meine Einschätzung, die sich jedoch genauso wie die aktuellen Technologien hin und wieder der Situation anpassen muss.

Data Science Blog: Ihre Gruppe Data Science Germany auf Xing.com hat bereits 1.240 Mitglieder und als KeyNote-Speaker sind Sie ebenfalls einer der Frontmänner in Deutschland für Big Data. Was können wir in Deutschland tun, um nicht den Anschluss zu verlieren oder gar auf Augenhöhe des Silicon Valley zu kommen?

Bollhoefer: Nur irgendwelche Gruppen oder Meetups zu organisieren hilft dem Standort Deutschland nicht weiter, auch wenn die Kommunikation untereinander sehr wichtig ist.

In Anbetracht der neuen Möglichkeiten, die wir insbesondere mit Machine Learning eröffnet bekommen, mit den neuen mathematischen Modellen und Technologien, wird sich in Zukunft vieles ändern, das ist vielen Leuten aber noch weitgehend unbekannt. Wir müssen massiv dafür sorgen, dass Transparenz geschaffen wird durch Lehre und Ausbildung.

Es ist jetzt ein enorm wichtiger Zeitpunkt, bei dem sich jedes größere Unternehmen auf eine krasse Lernphase einlassen sollte. Was verbirgt sich hinter künstlicher Intelligenz? Wie funktioniert Machine Learning und Predictive Analytics? Erst wenn das richtig verstanden ist, dann kann die Projektion auf eigene Geschäftsmodelle erfolgen.

Bisher suchten alle nach einem Referenz-Use-Case in der eigenen Branche, den man dann einfach eins zu eins übernehmen kann. Es wird dabei vielfach vergessen, dass diejenigen, die die ersten Schritte bereits gemacht haben, dann schon sehr viel weiter sind als die Nachahmer. Die US-Amerikaner machen es uns vor, sie tun es einfach und lernen daraus. Sie tun es schnell, sie scheitern schnell, erlangen aber auch schnell Erfolge. Dank dieses Mentalitätsaspektes sind sie uns teilweise weit voraus.

Dieser Vorsprung ist nur sehr schwer aufzuholen, da es an der Mentalitätskultur liegt. Eine andere Lern- und Fehlerkultur würde uns sehr gut tun, die kann man aber nicht herbeireden, die muss man entwickeln durch Anreize von der Politik. Industrie 4.0 ist daher eine gute Initiative, denn daran hängen Förderprogramme und Forschungsmotivationen. Das nimmt die Unternehmer aber nicht aus der Verantwortung, in dieser Sache am Ball zu bleiben.

Data Science Blog: Wie sieht der Arbeitsalltag als Data Scientist nach dem morgendlichen Café bis zum Feierabend aus?

Bollhoefer: Höchst unterschiedlich, denn Data Science umfasst vielfältige Tätigkeiten.

Der Berufsalltag findet überwiegend am Computer statt, denn heutzutage heißt Data Science vor allem Programmieren. Als Data Scientist setzten wir mit Programmierung Use Cases um, dabei nutzen wir meistens Python oder R, es können aber auch andere Programmiersprachen eingesetzt werden.

Viele Tätigkeiten verlangen Kreativität, Stift und Zettel sowie viel Austausch mit Kollegen. Nur wenige Arbeitsschritte lassen sich fest planen, iteratives bzw. agiles Vorgehen ist notwendig.

Kernaufgabe und Höhepunkt unserer Arbeit sind die Messung von Qualitätskriterien sowie das Trainieren und Optimieren mathematischer Modelle. Das sogenannte Feature-Engineering, also das Herausarbeiten relevanter Features (individuelle messbare Eigenschaften eines Objektes oder eines Sachverhaltes) bildet die dafür notwendige Basis und macht in der Praxis häufig bis zu 80% unserer Arbeitszeit aus.

Data Science Blog: Data Science ist Analyse-Arbeit und es geht viel um Generierung und Vermittlung von Wissen. Sind gute Data Scientists Ihrer Erfahrung nach tendenziell eher kommunikative Beratertypen oder introvertierte Nerds?

Bollhoefer: Im Idealfall sollte ein Data Scientist in gewisser Weise beides sein, also fifty/fifty. Das ist zumindest das, was es eigentlich bräuchte, auch wenn solche Leute nur schwer zu finden sind.
Den idealen Data Scientist gibt es wohl eher nicht, dafür arbeiten wir in Teams. Data Science ist Teamsport. Am erfolgreichsten sind Teams mit eben diesen Mindsets der kommunikativen Beratertypen mit Überzeugungsfähigkeit und den autodidaktischen Nerds mit viel tiefgehendem Wissen in Mathematik und Informatik.

Data Science Blog: Für alle Studenten, die demnächst ihren Bachelor, beispielsweise in Informatik, Mathematik oder Wirtschaftslehre, abgeschlossen haben, was würden sie diesen jungen Damen und Herren raten, wie sie gute Data Scientists werden können?

Bollhoefer: Wer operativ schnell tätig werden möchte, sollte auf den Master verzichten, denn wie die Nachfrage nach Data Science in drei Jahren aussehen wird, weiß niemand. Es ist ganz wichtig, jetzt zu starten und nicht in drei Jahren.

Der Weg ist zurzeit über Kontakte am leichtesten. Wer die nicht hat, kann diese schnell aufbauen, dazu einfach ein paar der vielen Meetups besuchen, über Social Media in der Szene netzwerken, sich Vorträge anhören und dadurch auch gleichzeitig in Erfahrung bringen, wie Data Scientists denken, arbeiten und was das typische Jobprofil ausmacht. Um der Thematik, den Tools und Methoden näher zu kommen, gibt es Kurse bei Coursera, Udacity, Kaggle Competitions, so kann man selber mal praxisnahe Probleme lösen. Zwei oder drei Zertifikate von diesen Anlaufstellen helfen bei der Jobsuche weiter.

KNN: Natur als Vorbild – Biologische Neuronen

Bisher ist die genaue Funktionsweise des Gehirns bei der Verarbeitung sensorischer Informationen nicht bekannt. Neue Erkenntnisse im Bereich der Neurowissenschaften liefern jedoch einen Einblick über grundlegende Prinzipien wie das Gehirn von Säugetieren sensorische Informationen repräsentiert. Einer der wichtigsten Punkte ist dabei die Erkenntnis, dass der Neocortex, einem ankommenden Signal erlaubt ein komplexes Netzwerk von Neuronen zu durchlaufen, wodurch es zu einer abstrakten Repräsentation des ursprünglichen Eingabesignals kommt. Auch ist das Gehirn in der Lage die Leitfähigkeit der Verbindungen zwischen den Neuronen zu modifizieren, was sich auf eine Änderung der Abbildungsvorschrift auswirkt. Beobachtungen können dadurch noch besser getrennt und effizienter repräsentiert werden. Die Entdeckung dieses Verhaltens motivierte die Entstehung des Forschungszweiges Deep Machine Learning, welcher sich darauf fokussiert Modelle zu entwickeln, die ähnliche Charakteristiken wie der Neocortex aufweisen.

Das Eingabesignal durchläuft das Netzwerk bis zu einer Ausgabeschicht. Das Resultat dieser nicht linearen Transformation lässt sich dann beispielsweise mit einem Klassifizierungsalgorithmus auswerten. Die praktischen Anwendungen solcher Algorithmen sind sehr vielfältig. Deep Machine Learning Algorithmen liefern zurzeit die besten Ergebnisse zu vielen Problemen in Anwendungsdomänen wie Bilderkennung, Spracherkennung und der Verarbeitung natürlicher Sprache. Mit Hilfe dieser Algorithmen wurden beispielsweise neue elementare Teilchen gefunden, entdeckte Galaxien noch besser klassifiziert und Auswirkungen von Mutationen innerhalb von DNA vorhergesagt.

Das Neuron

Das Neuron ist die Basis-Recheneinheit des Gehirns. Ungefähr 86 Milliarden solcher Neuronen befinden sich im menschlichen Nervensystem, welche durch ca. 10^15 Synapsen miteinander vermascht sind. In Abbildung unten links wird eine Schemazeichnung eines biologischen Neurons dargestellt. Dieses besteht unter Anderem aus Dendriten, dem Zellkörper, der den Zellkern beinhaltet und einem Axon. Die Dendriten gehen aus dem Zellkörper hervor und sind über Synapsen mit sensorischen Zellen oder Axonen anderer Neuronen verbunden. Ihre Aufgabe ist die Aufnahme von ankommenden Signalen in Form von elektrischen Spannungsänderungen und der Transport dieser in den Zellkörper des Neurons, der Recheneinheit einer Nervenzelle. Dort angekommen entscheiden bestimmte Faktoren, ob ein Aktionspotential anhand einer Schwellwertfunktion ausgelöst wird oder nicht. Ist dies der Fall leitet das Neuron elektrische Energie über sein Axon an weitere angeschlossene Dendriten anderer Neuronen weiter.

Neuronen
Das biologische Neuron diente als Inspiration für das Software-Neuron. Beim mathematischen Modell eines Software-Neurons (Künstliches Neuron eines KNN) wird davon ausgegangen, dass die verschiedenen Dendriten unterschiedlich stark ausgeprägt sind und ein Signal daher auch verschieden stark gewichtet in den Zellkörper übertragen wird. Jedes Dendrit enthält demnach einen Faktor(θi), der das Signal(xi) vor dem Eintreffen in den Zellkörper skaliert (θixi). Diese Faktoren werden auch als Gewichte bezeichnet. Im Zellkörper selbst werden die Signale die von unterschiedlichen Neuronen stammen aufsummiert bis schließlich ein fester Bias-Wert(b) auf das Ergebnis der Summation aufaddiert wird. Anschließend bestimmt eine nicht-lineare Aktivierungsfunktion über den finalen Ausgangswert des Neurons.

Bildquelle: Wikipedia

Ähnliche Artikel: