Predictive Analytics im Marketing 2: R wie Recommender Algorithmus

Um Voraussagen treffen zu können ist eine der wichtigsten Techniken „Pattern“ – also Muster – in Daten erkennen zu können. Diese Muster haben Ihren Ursprung natürlich im Verhalten von Beobachtungssubjekten und in sich aus bestimmten Mustern ergebenden Folgen für ein beobachtetes Gesamtsystem.

Die Kernfrage

Die Kernfrage ist immer: Was wird oder soll unter welchen Voraussetzungen passieren. Nach der Mustererkennung, die letztlich noch zum Data Mining gehört, muss auf der Basis der gefundenen Zusammenhänge ein Prognosemodell erarbeitet werden.

Die totalen „Qual Engines“ der Statistik Studentinnen, vor allem in den WISO Fakultäten, sind relativ bekannt:  SPSS und Stata. Eine neuere Generation ist stark am praktischen Einsatz im Unternehmensumfeld orientiert: etwa das  SAS Institute, oder die gesamte IBM Analytics Produktgruppe.

R das freie Universaltool

Diese Tools sind jedoch nicht wirklich günstig, schon garnicht für kleinere und mittlere Projekte – und hier kommt  R ins Spiel. Irgendwie wird R heute in praktisch allen Statistikabteilungen eingesetzt: FinTech – qualitative Analysen, Versorger – Vorhersage von Verbrauchsspitzen abhängig von z.B. Wetterfaktoren, Medikamententestreihen, Risikoberechnungen im Versicherungswesen, eCommerce Preisgestaltung und Recommender Algorithmen. In der Regel wird R dabei in einem recht kleinen Setting verwendet, durch Pakete kann das Basispaket jedoch erweitert werden.

R ist ein GNU-Projekt, eine Sprache und Umgebung für statistisches Rechnen und Grafiken, welches der S-Sprache und Umgebung ähnelt. Das Framework kann als eine andere Implementierung von S betrachtet werden. Es gibt einige wichtige Unterschiede, aber viel Code der ursprünglich für S geschrieben wurde läuft auch unter  R. Typischerweise kam R in den klassischen statistischen Forschungsbereichen zum Einsatz, war also lange vor allem für wissenschaftlich orientierte Aufgaben interessant. Mit dem stärker werdenden Zug in Richtung einer datengetriebenen Business Intelligence (BI) hält R mehr und mehr Einzug in wirtschaftliche Zusammenhänge.

Use Case Recommender-System:

  • Sage voraus wie ein User alle verfügbaren Produkte bewerten würde.
  • Berechne eine Bewertungsmatrix für User/T-Shirt-Kombinationen
  • Berücksichtige die Meinungen anderer User (Collaborative Filtering), die dem fraglichen User ähnlich sind.
  • Empfehle einem User einzelne Produkte, die er besonders mag.

T-Shirtbasiertes „Collaborative Filtering“

Wir haben ein punktebasiertes Rating als kollaborative Filterung in einen Satz von Artikeln, die von Benutzern bewertet wurden, und berechnen Ähnlichkeiten mit dem Zielobjekt.
Sobald ähnliche Gegenstände gefunden wurden, berechnen wir eine Bewertung aller Nutzer auf ähnliche Elemente.

library(lsa)ratings = read.csv("Rating Matrix.csv")

x = ratings[,2:7]

x[is.na(x)] = 0

item_sim = cosine(as.matrix(x))
T-Shirt 1 T-Shirt 2 T-Shirt 3 T-Shirt 4 T-Shirt 5 T-Shirt 6 T-Shirt 7 T-Shirt 8
User 1    4    2   ?   4   ?    1    2    ?
User 2    4   2   4   ?   1    ?    2   1
User 3    ?    1   2   1   ?    3    3    ?
User 4   ?    2   ?   ?   ?    ?    ?    ?

Wir wissen also nun wie welche BenutzerInnen welches T-Shirt bewertet haben, bei einigen Benutzerinnen aber auch nicht. Schaut man sich die Matrix an kann man daraus eine Grundthese entwickeln: Es könnte eine Ähnlichkeit zwischen Usern bestehen, die T-Shirts ähnlich bewerten. Das einfachste wäre sich die komplett bewerteten Reihen anzuschauen, und die Fragezeichen entsprechend des Bewertungsmusters gegen prognostizierte Bewertungen auszutauschen.

Wir können eine  Cosinus basierte Ähnlichkeitsfunktion verwenden, um die Ähnlichkeit zwischen Benutzern zu berechnen. ( Ähnlichkeits Kosinus ). In R haben wir eine Cosinusfunktion leicht verfügbar:

user_sim = cosine(as.matrix(t(x)))

Unser Beispiel besteht also aus zwei Schritten

1. Berechne die Ähnlichkeit ( Cosine Similarity) der User-Bewertungsvektoren für alle Kombinationsmöglichkeiten. Das Ergebnis generiert eine  Ähnlichkeits Matrix  (Similarity Matrix):
 Ähnlichkeits Faktor User 4 T-Shirt 1 T-Shirt 1 T-Shirt 2 T-Shirt 3 T-Shirt 6 T-Shirt 1 T-Shirt 2 T-Shirt 3
0,756       *  2  1  5       ==>  1,512  0,756  3,78
0,801       *  4  2  2       ==>  3,204  1,602  1,602
0,716       *  5  1  4       ==>  3,58  0,716  2,864
0,912       *  2  2  3       ==>  1,824  1,824  2,736

2. Um das Rating für User und T-Shirt vorherzusagen, suche x andere User, die das T-Shirt bewertet haben und filtere diese User nach denen, die zum User 4 ähnlich sind. Bilde dann den Mittelwert von deren Bewertung für das jeweilige T-Shirt. Damit können wir prognostizieren, wie User 4 das T-Shirt bewerten könnte.

Natürlich stellt das Ganze hier nur einen Einstieg da und ist letztlich banal. Hiermit können im Vergleich zu traditionellen „Try and Error“ Methoden  z.B. Marketingmaßnahmen, Kundenansprache, Produkteinkauf etc. effektiver gestaltet werden.

In R sieht das dann in etwa so aus:

rec_itm_for_user = function(userNo) 
 { #calcualte column wise sum 
 col_sums= list()
  rat_user = critics[userNo,2:7]
  x=1 
 tot = list()
  z=1
  for(i in 1:ncol(rat_user)){ 
  if(is.na(rat_user[1,i])) 
  { 
  col_sums[x] = sum(weight_mat[,i],na.rm=TRUE)
  x=x+1
  temp = as.data.frame(weight_mat[,i])
  sum_temp=0
  for(j in 1:nrow(temp))
 { if(!is.na(temp[j,1]))
 {
  sum_temp = sum_temp+user_sim[j,7]
  }
  } 
  tot[z] = sum_temp z=z+1 
  }
  }
  z=NULL
  z=1
  for(i in 1:ncol(rat_user)){ 
  if(is.na(rat_user[1,i]))
  {
  rat_user[1,i] = col_sums[[z]]/tot[[z]] z=z+1 
  }
  } 
 return(rat_user)
  }

Diese Funktion gibt dann prognostizierte Ratings User -> T-Shirt raus.

Und hier gibts noch mehr:

https://github.com/sureshgorakala/RecommenderSystems_R.git

und mehr:

https://de.wikibooks.org/wiki/GNU_R:_Anwendungsbeispiele

und noch mehr:

https://www.inwt-statistics.de/blog-artikel-lesen/Logistische_Regression_Beispiel_mit_R.html

und ein Nachschlag:

http://www.intershop.de/files/Intershop/media/downloads/de/studies/ECC-Whitepaper-Predictive-Analytics.pdf