Erfolgsmessung im Marketing - Folge 21: Lead-Gewinnung und ROI (Teil 3)

Ich habe im ersten Teil dieses Beitrags den finanziellen Wert von Leads berechnet und im zweiten Teil dargelegt, wie Sie diese Größe verwenden können, um durch konkrete Zielvorgaben und regelmäßige Erfolgskontrollen permanent besser zu werden.

Angenommen, Sie setzen sich das Ziel, die Konversionsrate B2>B3 im Laufe der nächsten zwölf Monate um mindestens 30 Prozent zu erhöhen. Hierzu wollen Sie zum Beispiel ein auf Ihre B2-Leads zugeschnittenes White Paper verwenden.

Die einfachste Form der Erfolgskontrolle besteht darin, nach zwölf Monaten die Konversionsrate B2>B3 neu zu berechnen und mit dem jetzigen Niveau zu vergleichen. Dies wäre ein Vorher-Nachher-Vergleich. Ich habe diese Methode in Folge 15 besprochen.

Mit einem Vorher-Nachher-Vergleich würden Sie klären, ob Sie das vorgegebene Ziel erreicht haben. Diese Art der Erfolgskontrolle ist aber zu wenig, wenn Sie sich auch vergewissern wollen, ob das White Paper die gewünschte Wirkung hat. Veränderungen der Konversionsrate B2>B3 könnten auch zufällige Schwankungen sein, die nichts mit dem White Paper zu tun haben.

Wir sind damit wieder beim Problem der Erfolgszurechnung.

Eine naheliegende Lösung besteht in einem A/B-Test (siehe Folge 9 und Folge 10). Ich werde diese Methode jetzt im Zusammenhang mit Leads besprechen und erläutern, wie sich auf dieser Basis mit einfachen statistischen Methoden Kausalität nachweisen lässt.

Sie werden sehen, dass selbst eine 60prozentige Zunahme der Konversionsrate eine zufällige Schwankung sein kann.

Ein A/B-Test mit B2-Leads

Ausgangspunkt ist das Ziel, die Konversionsrate B2>B3 im Laufe der nächsten zwölf Monate um mindestens 30 Prozent zu erhöhen.

B2-Leads sind nach dem ersten Teil dieses Beitrags Leads, die das Problem erkannt haben, das mit Ihrem Produkt gelöst werden kann, denen aber noch unklar ist, auf welche Weise sie dieses Problem lösen sollten. B2-Leads stehen demnach vor der Herausforderung, den für sie optimalen Lösungsansatz zu finden.

Wegen des angenommenen Konversionsziels wollen Sie erreichen, dass möglichst viele B2-Leads den Lösungsansatz wählen, der Ihrem Produkt zugrunde liegt und damit zu B3-Leads werden. B3-Leads haben sich entschieden, welche Art von Produkt sie kaufen wollen und sind daher an konkreten Angeboten interessiert.

Sie stehen somit vor der Herausforderung, den B2-Leads besser als bisher zu erläutern, warum der Ihrem Produkt zugrunde liegende Lösungsansatz den Vorzug verdient. Im Business-to-Business-Geschäft wäre es naheliegend, hierfür ein White Paper zu verwenden.

Für mein Zahlenbeispiel nehme ich an, dass Ihnen unklar ist, ob ein White Paper genügt, um Ihr Konversionsziel zu erreichen. Vielleicht brauchen viele Ihrer B2-Leads weitere Informationen. Sie wollen sich daher so früh wie möglich vergewissern, wie gut das White Paper wirkt.

Der A/B-Test beginnt damit, dass Sie per Zufallsauswahl eine Testgruppe und eine Kontrollgruppe bilden. Hierzu weisen Sie jedes neu gewonnene B2-Lead einer der beiden Gruppen zu. Sie tippen in Excel =ZUFALLSZAHL() und weisen zum Beispiel ein B2-Lead der Testgruppe zu, wenn die angezeigte Zahl kleiner als 0,5 ist. Andernfalls kommt das B2-Lead in die Kontrollgruppe.

Jedes Lead aus der Testgruppe erhält das White Paper, jedes Lead aus der Kontrollgruppe nicht.

Für jedes B2-Lead prüfen Sie nach angemessener Zeit, ob die angestrebte Konversion stattgefunden hat (1) oder nicht (0). Dies geht normalerweise per Telefon am besten. Konversion heißt: Das B2-Lead hat sich für den Ihrem Produkt zugrunde liegenden Lösungsansatz entschieden und ist daher an einem konkreten Angebot interessiert.

Hier die Ergebnisse:

Kennzahl Gruppe Konversion
1 T 1
2 K 0
3 T 0
4 K 1
5 T 0
6 T 1
7 K 0
8 T 1
9 K 1
10 K 0
11 T 1
12 T 1
13 K 0
14 K 1
15 T 1
16 K 0
17 T 1
18 K 1
19 T 0
20 K 1
21 K 0
22 T 1

Die Tabelle enthält in der linken Spalte die Identifikationsnummern der Leads, in der mittleren Spalte die Gruppenzuordnung und in der rechten Spalte die Ergebnisse.

Als durchschnittliche Konversionsraten ergeben sich 0,73 für die Testgruppe (T) und 0,45 für die Kontrollgruppe (K). Die durchschnittliche Konversionsrate der Testgruppe ist somit um ca. 60 Prozent höher als die durchschnittliche Konversionsrate der Kontrollgruppe.

Bedeutet dieses Ergebnis, dass das White Paper die erhoffte Wirkung entfaltet hat?

Eine Antwort auf diese Frage liefert ein Signifikanztest, der hier aber aus zwei Gründen kein t-Test sein kann. Erstens sind in der Spalte Konversion nur die Werte 0 und 1 möglich. Man kann die in dieser Spalte stehenden Zahlen daher nicht als normalverteilte Zufallsvariablen auffassen. Zweitens bestehen beide Gruppen jeweils nur aus elf Leads, weshalb der Zentrale Grenzwertsatz hier keine Rolle spielt.

Sie brauchen daher statistische Verfahren, die trotz dieser beiden Einschränkungen valide Ergebnisse liefern.

Permutationstest / Variante eins (Simulation)

Ich will jetzt prüfen, ob die um ca. 60 Prozent höhere durchschnittliche Konversionsrate der Testgruppe auf das White Paper zurückzuführen ist (Kausalität ja) oder als zufälliges Ergebnis angesehen werden kann (Kausalität nein).

Für meine Fragestellung eignen sich insbesondere Permutationstests, entweder mit Simulation oder in der klassischen Form, die bereits in den 1930er Jahren von Fisher vorgeschlagen wurde. Beide Arten von Signifikanztests setzen lediglich eine Annahme voraus: Die Gruppeneinteilung muss zufällig sein.

Diese Annahme ist im Zahlenbeispiel erfüllt.

Die Variante mit Simulation hat im Vergleich zur klassischen Form zwei Vorteile: Sie eignet sich erstens auch für große Datensätze und ist zweitens leichter nachzuvollziehen.

Excel bietet bislang keine Funktionen für Permutationstests.

Am besten gehen Permutationstests mit R, weil Sie hier die größtmögliche Flexibilität haben. Sie können insbesondere auf hierfür entwickelte Funktionen zurückgreifen, den Quellcode dieser Funktionen auslesen oder mit einfachen Funktionen alles selber machen.

Sie werden sehen, dass Permutationstests sehr einfach sind.

Meine Daten befinden sich in der Datei 0022.xlsx, die ich in R einlese und dort mit »daten« bezeichne. Danach vergebe ich einfache Namen für die Spalten daten$Gruppe und daten$Konversion. Schließlich bezeichne ich mit A die Konversionsraten der Kontrollgruppe und mit B die Konversionsraten der Testgruppe.

library(xlsx)
daten <- read.xlsx("0022.xlsx", sheetIndex=1, colIndex=c(1,2,3), rowIndex=1:23)
Gruppenzuordnung <- daten$Gruppe
Erfolg <- daten$Konversion
A <- Erfolg[Gruppenzuordnung == "K"]
B <- Erfolg[Gruppenzuordnung == "T"]

Ein Permutationstest mit Simulation geht am einfachsten wie folgt:

library(DAAG)
twotPermutation(B, A)

Ich werde diesen Test jetzt selber rechnen und graphisch darstellen.

Die beobachtete Mittelwertdifferenz ist der Unterschied zwischen den beiden durchschnittlichen Konversionsraten:

mean(B) - mean(A)

Diese Mittelwertdifferenz ist im Zahlenbeispiel gleich 0,27 (gerundet).

Meine Hypothesen lauten:

HO - Das White Paper ist wirkungslos, die beobachtete Mittelwertdifferenz ist zufällig aufgetreten (Kausalität nein)

H1 - Das White Paper hat einen positiven oder negativen Einfluss auf die durchschnittliche Konversionsrate (Kausalität ja)

Ich gehe bei meinen Berechnungen davon aus, dass die Nullhypothese (H0) richtig ist. Unter dieser Voraussetzung spielt es keine Rolle, ob ein Lead das White Paper erhalten hat oder nicht.

Die Spalte Gruppenzuordnung enthält elfmal den Wert K und elfmal den Wert T. Weil die Gruppenzugehörigkeit für den A/B-Test per Zufallsauswahl festgelegt wurde, ist die Reihenfolge der insgesamt 22 Spalteneinträge zufällig.

Von der Reihenfolge der elf Ks und elf Ts hängt ab, wie groß die Mittelwertdifferenz ist. Würde man die Gruppenzugehörigkeit noch einmal per Zufallsauswahl festlegen, so würde sich im Allgemeinen eine andere Reihenfolge der Ks und Ts ergeben und damit im Allgemeinen auch eine andere Mittelwertdifferenz.

Die Neuberechnung geht wie folgt:

neuberechnung <- function(x,y) {
 neueinteilung <- sample(x)
 mean(y[neueinteilung=="T"]) -
 mean(y[neueinteilung=="K"])
}

Die Variable x steht für den Vektor mit den elf Ks und elf Ts. Stellen Sie sich vor, Sie haben eine Urne mit 22 Kugeln, von denen elf mit K und elf mit T beschriftet sind. Sie entnehmen dieser Urne eine Kugel und verwenden den entsprechenden Buchstaben für das Lead in der ersten Tabellenzeile. Dann entnehmen Sie der Urne wieder eine Kugel und verwenden den entsprechenden Buchstaben für das Lead in der zweiten Tabellenzeile. Sie machen dies so lange, bis die Urne leer ist. Mit sample(x) veranlassen Sie eine solche Neueinteilung der 22 Leads.

Die Variable y steht für den Vektor mit den Konversionsraten. Für die neu festgelegten Gruppen wird demnach die Mittelwertdifferenz neu berechnet.

Im nächsten Schritt mache ich dies 2.000mal und speichere alle 2.000 Mittelwertdifferenzen als Vektor:

mwdifferenzen.neu <- replicate(2000, neuberechnung(Gruppenzuordnung,Erfolg))

Ich untersuche, wie viele verschiedene Werte dieser Vektor enthält und erstelle eine Häufigkeitstabelle:

length(unique(mwdifferenzen.neu))
table(round(mwdifferenzen.neu,digits=2))
Wert Anzahl
-0.64 11
-0.45 61
-0.27 324
-0.09 619
0.09 607
0.27 308
0.45 63
0.64 7

Ich erstelle auf Basis der 2.000 Mittelwertdifferenzen ein Histogramm, in das ich zusätzlich die beobachtete Mittelwertdifferenz eintrage (gestrichelte Linie) sowie die acht möglichen Werte für die Mittelwertdifferenz (schwarze Punkte):

svg("emim-21-1.svg", width=4.3, height=3.1, bg="transparent")
histogram(mwdifferenzen.neu, breaks=9, border=NA,
par.settings=list(panel.background=list(col="white"),
par.xlab.text=list(cex=0.8),
par.ylab.text=list(cex=0.8)),
panel = function(x, ...) {
panel.histogram(x, ...)
panel.abline(v=mean(B)-mean(A), col="#FF0000", lwd=0.6, lty=2)
panel.points(unique(mwdifferenzen.neu), 0, col="#000000", pch=20, cex=0.5)
}
)
dev.off()

Sie sehen anhand des Diagramms, dass die beobachtete Mittelwertdifferenz (ca. 0,27) sehr gut zur Nullhypothese passt.

Ich will jetzt das Signifikanzniveau berechnen. Hierzu beginne ich mit dem Fall eines zweiseitigen Tests, der den angegebenen Hypothesen H0 und H1 entspricht.

Zu prüfen ist daher, welche der ausgegebenen 2.000 Mittelwertdifferenzen betragsmäßig größer oder gleich 0,27 sind:

bedingung2s <- (abs(mwdifferenzen.neu) >= abs(mean(B)-mean(A)))

Das Ergebnis ist ein Vektor mit 2.000 Komponenten, die alle entweder gleich TRUE oder FALSE sind. Ich kann mit diesem Vektor auch rechnen, weil TRUE = 1 und FALSE = 0 ist.

sum(bedingung2s)
mean(bedingung2s)

Die Summe aller Komponenten von bedingung2s ist gleich 774 (für 774 Komponenten ist bedingung2s erfüllt). Bildet man statt der Summe den Mittelwert, so ergibt sich das Signifikanzniveau, das hier ungefähr gleich 0,387 ist.

Die Nullhypothese wird daher beibehalten.

Für einen einseitigen Test gehe ich davon aus, dass das White Paper entweder die erhoffte positive Wirkung hat oder überhaupt keine:

bedingung1s <- mwdifferenzen.neu >= mean(B)-mean(A)
sum(bedingung1s)
mean(bedingung1s)

Bei Gültigkeit der Nullhypothese sind 378 Mittelwertdifferenzen mindestens so groß wie die beobachtete Mittelwertdifferenz (Bereich rechts von der gestrichelten Linie). Das Signifikanzniveau ist demnach gleich 0,189.

Die Nullhypothese wird daher beibehalten.

Eine Ablehnung der Nullhypothese kommt nur infrage, wenn das Signifikanzniveau kleiner oder gleich 0,05 ist. Beide Signifikanzniveaus sind wesentlich höher. Das Gesamtergebnis ist daher eindeutig.

Die beim A/B-Test gemessene Mittelwertdifferenz zwischen den beiden Gruppen ist daher kein Grund, dem White Paper eine positive oder negative Wirkung auf die Konversionsrate zuzuschreiben. Das heißt nicht, dass das White Paper wirkungslos ist, sondern nur, dass die für den A/B-Test erhobenen Daten kein Kausalitätsbeweis sind.

Sowohl die Kontroll- als auch die Testgruppe bestanden aus lediglich elf Leads. Für einen A/B-Test ist dies normalerweise zu wenig.

Zu überlegen wäre daher, ob es andere Gründe gibt, die für eine positive Werbewirkung des White Papers sprechen. Mögliche Gründe wären zum Beispiel positives Leser-Feedback oder die Qualität des White Papers. Wenn dies der Fall ist, so wäre es sinnvoll, den A/B-Test mit einer breiteren Datenbasis zu wiederholen.

Permutationstest / Variante zwei (Fisher, klassisch)

Beim beschriebenen Permutationstest mit Simulation beruhen die 2.000 Mittelwertdifferenzen auf zufälligen Gruppeneinteilungen. Daher werden Sie höchstwahrscheinlich zwei Signifikanzniveaus erhalten, wenn Sie den gleichen Test zweimal durchführen. Im Zahlenbeispiel sind diese Abweichungen aber sehr gering und damit bedeutungslos.

Sie können solche Abweichungen am einfachsten reduzieren, indem Sie die Anzahl der zu berechnenden Mittelwertdifferenzen erhöhen (zum Beispiel nicht 2.000, sondern 10.000).

Eine andere Möglichkeit besteht darin, jede mögliche Gruppeneinteilung genau einmal zu berücksichtigen. Sie erhalten dann ein eindeutig bestimmtes Signifikanzniveau.

Der Nachteil dieser Methode besteht darin, dass Ihr Computer im Fall von großen Datensätzen sehr viel rechnen muss.

Es gibt n!/(m!*(n-m)!) Möglichkeiten, n Leads in zwei Gruppen einteilen, von denen eine m Leads umfasst. Dieser Wert wird auch als die Anzahl der Permutationen bezeichnet.

Ich berechne diese Zahl mit zwei Funktionen:

fakultaet <- function(n) {
 f <- 1
 for (i in 1:n)
 f <- f*i
 f
}

AnzahlP <- function(n,m) {
 if (m>=n) stop("Unsinnige Werte")
 erg <- fakultaet(n)/(fakultaet(m)*fakultaet(n-m))
 erg
}

Für den A/B-Test mit 22 Leads und zwei gleichgroßen Gruppen gibt es daher AnzahlP(22,11) = 705.432 Permutationen. Nach der klassischen Methode muss ich daher für mein Zahlenbeispiel 705.432 Mittelwertdifferenzen berechnen. Bei der Methode mit Simulation hatte ich mich mit 2.000 begnügt.

Nehmen Sie an, Sie haben 100 Leads, von denen 25 zur Testgruppe und 75 zur Kontrollgruppe gehören. AnzahlP(100,25) liefert Ihnen die folgende Zahl:

242.519.269.720.337.024.022.686

Es wäre unsinnig, derart viele Mittelwertdifferenzen zu berechnen.

Im Zahlenbeispiel habe ich insgesamt 22 Leads und eine aus elf Leads bestehende Testgruppe, was 705.432 Permutationen ergibt.

Für die Erzeugung dieser Permutationen verwende ich eine Hilfsfunktion:

library(BHH2)
mat <- subsets(22,11)

Die ersten vier Zeilen der Matrix mat sehen wie folgt aus:

1 2 3 4 5 6 7 8 9 10 11
1 1 2 3 4 5 6 7 8 9 10 11
2 1 2 3 4 5 6 7 8 9 10 12
3 1 2 3 4 5 6 7 8 9 10 13
4 1 2 3 4 5 6 7 8 9 10 14

Wenn ich festlege, dass die in einer Zeile enthaltenen Nummern die Kontrollgruppe beschreiben, so beschreiben die übrigen Nummern die Testgruppe. Die erste Zeile besagt demnach »Kontrollgruppe = 1 bis 11, Testgruppe = 12 bis 22«.

Für die zweite Zeile hieße dies: Der Vektor Erfolg[mat[2,]] enthält die Konversionsraten der Kontrollgruppe und der Vektor Erfolg[-mat[2,]] die Konversionsraten der Testgruppe.

Sicherheitshalber prüfe ich die Matrix:

nrow(mat) # 705432
nrow(unique(mat)) # 705432

Die Matrix mat hat 705.432 Zeilen. Die Matrix unique(mat) hat ebenfalls 705.432 Zeilen. Keine Zeile kommt mehrfach vor.

Ich berechne jetzt die 705.432 Mittelwertdifferenzen:

N <- nrow(mat)
ergebnisse <- vector(length=N)
for (i in 1:N) {
 ergebnisse[i] <- (mean(Erfolg[mat[i,]]) -
 mean(Erfolg[-mat[i,]]))
}

Für den zweiseitigen Test erhalte ich das Signifikanzniveau 0,387 (gerundet):

bedingung2s <- (abs(ergebnisse) >= abs(mean(B)-mean(A)))
mean(bedingung2s)

Für den einseitigen Test erhalte ich das Signifikanzniveau 0,193 (gerundet):

bedingung1s <- ergebnisse >= mean(B)-mean(A)
mean(bedingung1s)

Die klassische Variante liefert somit die gleichen Ergebnisse wie die Variante mit Simulation.

Kategorie: 
Thesaurus: 

Einen Kommentar schreiben