Datengetriebene Personas mit Assoziationsregeln

Über Personas habe ich mich ja schon an anderer Stelle ausgelassen, in diesem Artikel geht es um die datengetriebene Generierung von Personas. Ich halte mich an die Definition des Persona-Erfinders Cooper und sehe eine Persona als Prototyp für eine Gruppe von Nutzern. Dies kann auch fürs Marketing interessant sein, denn schließlich lässt dich damit eine bedürfnis- und erfahrungsorientierte Kommunikation zum Beispiel auf einer Webseite erstellen. Personas sind keine Zielgruppen, aber dazu an anderer Stelle mehr. „Datengetriebene Personas mit Assoziationsregeln“ weiterlesen

Machine Learning: Association Rules

Association rules sind ein Machine Learning-basierter Ansatz zum Mining von Relationen in Daten. Die Market Basket Analysis verwendet zum Beispiel Association Rule Mining, um Produkte zu identifizieren, die häufig zusammen gekauft werden (“Co-Occurrence” als Assoziation). Wir können Association Rules Mining als Data Mining betrachten und damit als Teil von Data Science. Association Rules werden aber nicht nur für Warenkörbe verwendet, sondern für viele verschiedene Transaktions-Daten, zum Beispiel auch für Web Usage Mining. Häufig werden im Association Rule Mining große Datenmengen untersucht, wobei die einzelnen Observationen nur wenig Daten enthalten (“sparse data“).

Metriken

Das Ergebnis von Association Rules Mining wird in Regeln ausgegeben, die folgendermaßen aussehen:

  • Regel
  • Support
  • Confidence
  • Lift

Eine Regel geht von einer Richtung in eine andere, also [Item1] => [Item2].

RStudio-Server updaten

Die AMIs von Louis Aslett sind nützlich, um kurz mal einen RStudio-Server auf einer AWS EC2-Instanz zu starten. Allerdings enthalten diese AMIs nicht immer die aktuelle Version von R oder RStudio. Diese beiden Befehle helfen, sowohl R als auch RStudio upzudaten:

sudo apt-get install gdebi-core
wget https://download2.rstudio.org/rstudio-server-1.1.442-amd64.deb
sudo gdebi rstudio-server-1.1.442-amd64.deb

echo "deb http://cran.stat.ucla.edu/bin/linux/ubuntu `lsb_release -sc`/" | sudo tee --append /etc/apt/sources.list.d/cran.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo apt update
apt list --upgradable

Das Tidyverse

Wie im einleitenden Abschnitt über R beschrieben existieren viele Erweiterungen für R, manche davon erleichtern oder zumindest modifizieren die Arbeit mit R grundlegend. Eine davon ist das so genannte tidyverse, manchmal auch nach seinem Autor Hadley Wickham als Hadleyverse bezeichnet. Hadley Wickham ist einer der Protagonisten von RStudio und hat außerdem eine unglaublich gute sowie kostenlose Einführung in das Thema Data Science mit R geschrieben. DasTidyverse enthält mehrere Libraries:

  • ggplot2: Erweiterte Plotting-Möglichkeiten
  • dplyr: Eine beliebte Bibliothek zur Daten-Manipulation, die im Kurs ausführlicher besprochen wird
  • tidyr: Zum “Aufräumen” von Daten
  • readr: Zum Einlesen von Daten
  • purrr: Erweiterung der Funktionalen Programmierung in R
  • tibble: Eine moderne Version der Dataframes; wenn Sie das tidyverse laden, dann werden aus Ihren Dataframes automatisch Tibbles
  • stringr: Library zur Bearbeitung von Strings
  • forcats: Library zur Lösung von Problemen mit Factors

Im Kurs werden nicht alle Pakete behandelt. Es ist möglich, dass auch nur einzelne Libraries installiert werden, mit library(tidyverse) werden alle Libraries auf einmal installiert.

dplyr

Im Kurs werden wir uns vor allem mit dplyr beschäftigen (das wird wie dieplair ausgesprochen). Eine wunderbare Einführung gibt der Meister himself hier (bitte beachten, dass hier ein anderes Pipe-Symbol verwendet wird, siehe weiter unten):

dplyr verwendet 5 Haupt-Verben, mit denen grundlegende Befehle ausgeführt werden.

  • select: Zum Auswählen von Variablen
  • filter: Zum Auswählen von Zeilen
  • mutate: Zum Erzeugen von neuen Variablen/Spalten oder auch zum Verändern dieser
  • summarize: Ergebnisse berechnen (im Video sagt Hadley, dass zu einer Zeile reduziert wird, aber man kann auch mehrere Zeilen als Ergebnis haben)
  • arrange: Zum Sortieren von Zeilen

Ein weiterer wichtiger Punkt ist die so genannte Pipe. Unter UNIX sind Pipes ein beliebtes Mittel, um die Ausgabe aus einer Funktion als Input für eine andere Funktion zu nutzen, z.B.

grep '2018' bericht.csv | wc -l

In diesem Beispiel wird in der Datei bericht.csv nach allen Zeilen gesucht, in denen der String 2018 vorkommt.  Die Ausgabe wären dann genau diese Zeilen. Mit dem Operator | wird diese Ausgabe in den nächsten Befehl geleitet. wc -l zählt die Zeilen. Wir erfahren also mit diesem Befehl, wie viele Zeilen den String 2018 enthalten. Pipes sind ein sehr effizientes Mittel unter UNIX.

In dplyr wird anstatt des | der Operator %>% verwendet (früher %.% wie oben im Video zu sehen). Schauen wir uns ein Beispiel an, hierfür nehmen wir den Datensatz, der im Kurs zur Verfügung gestellt wird.

gadata %>%
filter(dimension2 == "pageview") %>%
group_by(pagePath) %>%
summarize(n = n()) %>%
arrange(desc(n))

Zunächst einmal “werfen” wir den ganzen Datensatz auf die nächste Funktion filter, die dann die Zeilen auswirft, die in der benutzerdefinierten Dimension 2 “pageview” enthält; wir wollen nur die Pageviews sehen.

Im nächsten Schritt gruppieren wir Zeilen; dies ist kein Standardverb wie oben beschrieben, aber äußerst nützlich. Es erfordert allerdings, einmal “um die Ecke” zu denken. In unserem Datensatz haben wir ja verschiedene Nutzer, die sich die Seiten auf der Homepage ansehen. Nicht jeder Nutzer wird jede Seite sehen, manche sehen dieselbe Seite, andere sehen sich andere Seiten an. group_by(pagePath) sagt ungefähr so etwas wie “gruppiere mir doch mal alle unterschiedlichen pagePaths, und dann gehen wir in den folgenden Schritten jede Gruppe einmal durch”. Da wir im nächsten Schritt summieren, passiert also folgendes: Für jede Seite bilde eine Gruppe, und dann zählen wir jede Gruppe einmal durch, also wie viele Elemente in der Gruppe sind, oder in diesem Fall wie häufig diese Seite vorkommt also aufgerufen wird. Einigermaßen verständlich wird das in diesem Video erklärt:

in summarize verwenden wir die Funktion n(), die alles zusammenzählt und schreiben das Ergebnis in die Variable n (wir hätten auch m oder y nehmen können). Im letzten Schritt wird das Ergebnis von summarize auf arrange geworfen, wo wir nichts anderes tun als n absteigend (desc) zu sortieren. Das Ergebnis ist eine Tabelle:

Diese wenigen Verben helfen uns also, Datensätze zu filtern, sortieren und zu manipulieren. Der besondere Vorteil von dyplr ist hier, dass es eine etwas einfachere Herangehensweise an R bietet.

gadata %>%
filter(!grepl("/amp/",pagePath)) %>%
filter(!grepl("\\?",pagePath)) %>%
mutate(dimension3 = as.numeric(dimension3)) %>%
group_by(dimension1,pagePath) %>%
mutate(time_spent = round((max(dimension3)-min(dimension3))/1000)) %>%
mutate(time_spent = round(time_spent/60),4) %>%
select(dimension1,pagePath,time_spent) %>%
unique() %>%
ungroup() %>%
select(pagePath,time_spent)

Das Ergebnis sieht wie folgt aus (hier habe ich Kommentare zu den Code-Zeilen hinzugefügt):

Daten-Analyse mit R

Nicht alle Fragestellungen können mit den Bordmitteln von Google Analytics, Adobe Analytics und anderen Lösungen gelöst werden. In solchen Fällen werden die Rohdaten aus den jeweiligen Systemen geladen und dann weiter verarbeitet. Ein anderer Grund für die Abfrage von Daten über Application Programming Interfaces (APIs) anstatt von graphischen Benutzerschnittstellen (GUIs) ist die Automatisierbarkeit der Erstellung von Reports. Diese beiden Use Cases werden am Beispiel von R gezeigt.

R ist eine Umgebung zur statistischen Datenverarbeitung und sowohl eine Sprache als auch die Umgebung selbst. Für die Nerds unter uns ist die Sprache R der Nachfolger von S. R kann kostenlos von der Webseite des R-Projekts heruntergeladen werden. Zusätzlich kann RStudio installiert werden, eine etwas bequemere Entwicklungsumgebung, die vor allem Studenten einfacher finden 🙂 Wichtig: Es muss zunächst R installiert werden, dann RStudio.

R oder Python?

Warum R und nicht Python? Es ist kein “Entweder-oder”, denn auch wenn die Python-Jünger sagen, dass Python alles könne, so ist Python zunächst einmal eine allgemeine Programmiersprache, keine Sprache, die sich auf Statistik fokussiert. Natürlich existieren viele Erweiterungen für Python, aber genau das ist der Punkt: Es sind Erweiterungen und keine grundsätzlichen Bestandteile wie bei R. Demgegenüber steht R: R hat so gut wie alles in der Standardinstallation, was man für die einfache Arbeit in der Statistik benötigt, es ist halt genau dafür ausgelegt. Aber auch R kann erweitert werden. Und auch für R existieren viele Libraries, die Funktionen nachrüsten, die Python eventuell schon mit Bordmitteln beherrscht. Libraries sind sozusagen Kollektionen von Routinen, die die Funktionen einer Programmiersprache erweitern. Mit Python und R kann man zum Beispiel mit Bordmitteln keine Webseite crawlen, das geht nur mit den zusätzlichen Libraries. In R werden Libraries auch packages oder Pakete genannt.

Manches kann Python mit seinen Erweiterungen einfach besser, zum Beispiel ist BeautifulSoup momentan noch ein viel besserer Web Scraper als Rvest es ist. Das Gute ist, dass sich beide Sprachen in RStudio wunderbar kombinieren lassen. Dazu später mehr. Ein großer Vorteil ist, dass R von Statistikern für Statistiker entwickelt wurde, also genau deren Bedürfnisse im Blick hatten. Manche bösen Zungen behaupten allerdings auch, dass dies der große Nachteil von R ist. Wiederum andere sagen, dass R süchtig macht und ungesund ist:

Using R is a bit akin to smoking. The beginning is difficult, one may get headaches and even gag the first few times. But in the long run,it becomes pleasurable and even addictive. Yet, deep down, for those willing to be honest, there is something not fully healthy in it.” (Francois Pinard)

Natürlich stimmt das nicht 🙂 Unternehmen wir also die ersten Schritte mit R und RStudio.

 

Sistrix Traffic versus Google AdWords Keyword Planner

Wer hier öfter mitliest, der weiß, dass Sistrix eines meiner absoluten Lieblings-Tools ist (ich verlinke mal ganz dreist als bestes SEO Tool), allein schon wegen der schlanken API, dem absolut liebenswürdigen Johannes mit seinen wirklich schlauen Blog-Posts sowie der Unaufgeregtheit, mit der die Toolbox immer wieder überzeugt. Natürlich sind auch alle anderen Tools klasse, aber Sistrix ist sowas wie meine erste große Tool-Liebe, die man nicht aus seinem SEO-Gedächtnis verbannen kann oder will. Und auch wenn die folgenden Daten eventuell am Lack kratzen könnten, eine richtige Delle haben sie in meiner Sistrix-Präferenz nicht verursacht.  „Sistrix Traffic versus Google AdWords Keyword Planner“ weiterlesen

Data Science meets SEO, Teil 5

Der letzte Teil dieser Serie über Suchmaschinenoptimierung/SEO und Data Science auf Basis meines Vortrags bei der SEO Campixx. Die Daten und den Code habe ich via Knit in ein HTML-Dokument überführt, das mein Notebook inklusive Daten nachvollziehbar macht. In dem Notebook sind auch ein paar mehr Untersuchungen drin, allerdings habe ich alles auf Englisch dokumentiert, da dies nicht nur für Deutsche interessant ist. Wer also alle Ergebnisse in einem Dokument lesen möchte (ohne die TF/IDF, WDF/IDF oder Stemming-Beispiele), schaut sich bitte das Data Science & SEO Notebook an. Speed und andere Faktoren sind in den vorherigen Teilen zu lesen. „Data Science meets SEO, Teil 5“ weiterlesen

Data Science meets SEO, Teil 3

In den ersten beiden Teilen ging es darum, was Data Science überhaupt ist und warum WDF/IDF-Werte sehr wahrscheinlich wenig mit dem zu tun haben, was bei Google unter der Motorhaube passiert. In diesem Teil geht es einen Schritt weiter, wir schauen nämlich, ob es Korrelationen zwischen Ranking Signalen und der Position gibt. Im Vortrag hatte ich das am Beispiel einer Suchanfrage gezeigt und angesichts der zur Verfügung stehenden Zeit auch eher kurz abgehandelt. Hier kann ich in die Tiefe gehen. Wir schauen uns hierbei allerdings erst einmal nur jedes einzelne Rankingsignal in Bezug auf die Positon an, nicht die eventuell vorhandene Wirkung der Rankingsignale untereinander. „Data Science meets SEO, Teil 3“ weiterlesen