Ghostwriting-Service Dr. Rainer Hastedt

Fachtexte, White Papers, statistische Auswertungen

Erfolgsmessung im Marketing - Folge 22: Lead-Gewinnung und ROI (Teil 4)

Ich hatte im dritten Teil dieses Beitrags anhand eines A/B-Tests mit 22 Leads erläutert, wie Sie mit einer sehr einfachen statistischen Methode prüfen können, ob Kausalität vorliegt oder nicht. Meine Frage war, ob die im Vergleich zur Kontrollgruppe um 60 Prozent höhere durchschnittliche Konversionsrate der Testgruppe auf Zufall beruht (Kausalität nein) oder durch das nur bei der Testgruppe eingesetzte White Paper verursacht wurde (Kausalität ja).

Im Zahlenbeispiel scheiterte der statistische Nachweis von Kausalität (Signifikanzniveau beim zweiseitigen Test ungefähr gleich 0,387). Dies lag an der zu schmalen Datenbasis (elf Leads in der Testgruppe, elf Leads in der Kontrollgruppe).

Als mögliche Lösung hatte ich vorgeschlagen, den A/B-Test fortzusetzen und den Signifikanztest zu wiederholen, sobald beide Gruppen deutlich größer sind.

Ich werde dies jetzt machen. Hierzu beschreibe ich zunächst meine erweiterte Datenbasis. Danach bespreche ich meine erneuten Permutationstests. Hierauf aufbauend beschäftige ich mich mit der Frage, ob die aus Statistikkursen bekannten t-Tests ein gleichwertiger Ersatz für Permutationstests sind.

Die Datenbasis für meinen A/B-Test

Sie sehen in der folgenden Tabelle die Ergebnisse meines erneuten A/B-Tests. In der linken Spalte finden Sie die Identifikationsnummern der Leads, in der mittleren Spalte die Gruppenzuordnung und in der rechten Spalte die Ergebnisse.

Die Leads mit den Kennzahlen 1 bis 22 sind identisch mit den Leads aus dem A/B-Test im dritten Teil dieses Beitrags. Neu hinzugekommen sind 48 Leads (Kennzahlen 23 bis 70).

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
23 T 1
24 K 1
25 K 1
26 K 0
27 T 1
28 K 1
29 T 0
30 T 1
31 K 0
32 K 0
33 T 1
34 K 0
35 T 1
36 K 0
37 T 1
38 K 1
39 T 0
40 T 1
41 K 0
42 T 1
43 K 1
44 K 0
45 T 1
46 T 1
47 K 0
48 K 1
49 T 0
50 K 1
51 T 1
52 K 1
53 T 0
54 K 1
55 K 0
56 T 1
57 T 1
58 K 1
59 T 0
60 T 1
61 K 0
62 K 0
63 T 1
64 K 1
65 K 0
66 T 1
67 T 0
68 T 1
69 K 1
70 T 1

Die Testgruppe und die Kontrollgruppe umfassen jeweils 35 Leads. Beide Gruppen könnten auch unterschiedlich groß sein.

Die durchschnittlichen Konversionsraten betragen 0,74 für die Testgruppe (T) und 0,49 für die Kontrollgruppe (K). Die Testgruppe hat somit eine um ca. 53 Prozent höhere durchschnittliche Konversionsrate als die Kontrollgruppe.

Zwei- und einseitige Permutationstests

Ich arbeite nach dem gleichen Schema wie im dritten Teil dieses Beitrags:

Meine Daten befinden sich in der Datei 0023.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)
library(xlsx)
daten <- read.xlsx("0023.xlsx", sheetIndex=1, colIndex=c(1,2,3), rowIndex=1:71)
Gruppenzuordnung <- daten$Gruppe
Erfolg <- daten$Konversion
A <- Erfolg[Gruppenzuordnung == "K"]
B <- Erfolg[Gruppenzuordnung == "T"]

Für einen zweiseitigen Test lauten meine Hypothesen:

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)

Für den Signifikanztest könnten Sie zum Beispiel den Code aus dem dritten Teil dieses Beitrags kopieren und ausführen:

library(xlsx)
neuberechnung <- function(x,y) {
neueinteilung <- sample(x)
mean(y[neueinteilung=="T"]) - mean(y[neueinteilung=="K"])
}
mwdifferenzen.neu <- replicate(2000, neuberechnung(Gruppenzuordnung,Erfolg))
bedingung2s <- (abs(mwdifferenzen.neu) >= abs(mean(B)-mean(A)))
mean(bedingung2s)

Noch einfacher:

library(DAAG)
twotPermutation(B, A)

Ich erhalte den p-Wert 0,053 und damit kein signifikantes Ergebnis (p-Wert überschreitet den Schwellenwert 0,05).

Weil das Ergebnis dieses Signifikanztests zufallsabhängig ist, wiederhole ich den Permutationstest in drei Serien mit jeweils zehn Durchgängen. Für die erste Serie arbeite ich mit der Standardeinstellung (2.000 zufällig ausgewählte Permutationen), für die zweite und dritte Serie mit 20.000 bzw. 200.000 zufällig ausgewählten Permutationen.

nsim2000 <- replicate(10, twotPermutation(B, A, nsim=2000))
nsim20000 <- replicate(10, twotPermutation(B, A, nsim=20000))
nsim200000 <- replicate(10, twotPermutation(B, A, nsim=200000))

Sie sehen die Ergebnisse in der folgenden Tabelle, die in der letzten Zeile die Differenz zwischen dem größten und dem kleinsten Spaltenwert enthält:

nsim2000 nsim20000 nsim200000
1 0.0560 0.0512 0.0481
2 0.0540 0.0496 0.0488
3 0.0545 0.0494 0.0481
4 0.0440 0.0491 0.0483
5 0.0530 0.0487 0.0489
6 0.0440 0.0483 0.0491
7 0.0505 0.0486 0.0491
8 0.0495 0.0458 0.0490
9 0.0510 0.0477 0.0483
10 0.0460 0.0482 0.0486
MaxDiff 0.0120 0.0054 0.0010

In der rechten Spalte gibt es keinen p-Wert, der oberhalb des Schwellenwerts 0,05 liegt. Außerdem liegen alle zehn p-Werte dicht beieinander (die Differenz zwischen dem größten und dem kleinsten p-Wert beträgt in der rechten Spalte 0,0010).

Sie können daher die Nullhypothese (H0) ablehnen und folglich den Einsatz des White Papers als Ursache für die höhere durchschnittliche Konversionsrate der Testgruppe ansehen.

Infrage kommt auch ein einseitiger Test:

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

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

Sie können auch für diesen Signifikanztest den Code aus dem dritten Teil dieses Beitrags kopieren und ausführen:

neuberechnung <- function(x,y) {
neueinteilung <- sample(x)
mean(y[neueinteilung=="T"]) - mean(y[neueinteilung=="K"])
}
mwdifferenzen.neu <- replicate(2000, neuberechnung(Gruppenzuordnung,Erfolg))
bedingung1s <- mwdifferenzen.neu >= mean(B)-mean(A)
mean(bedingung1s)

Einfacher:

library(DAAG)
twotPermutation(B, A, nsim=200000)/2

Ich habe hier das Signifikanzniveau für den zweiseitigen Test durch zwei dividiert. Die Rechtfertigung für diese Vorgehensweise finden Sie, wenn Sie sich die im dritten Teil dieses Beitrags besprochene klassische Version ansehen (Fisher). Sie erhalten bei diesem Test immer ein symmetrisches Histogramm. Die Einstellung nsim=200000 habe ich gewählt, um die Genauigkeit meiner Berechnung zu erhöhen (verglichen zur Grundeinstellung nsim=2000).

Das Ergebnis lautet p=0,0241 für den einseitigen Test. Sie können die Nullhypothese (H0) daher ablehnen.

Sie sehen anhand der Division durch zwei im obigen R-Code, dass ein einseitiger Test darauf hinausläuft, das Anspruchsniveau für den Nachweis von Kausalität abzusenken (im Vergleich zu einem zweiseitigen Test).

Ein erfolgreicher zweiseitiger Permutationstest ist daher ein besserer Kausalitätsbeweis als ein erfolgreicher einseitiger Permutationstest.

Außerdem kommt ein einseitiger Test nur infrage, wenn Sie die Wirkungsrichtung einschätzen können. H1 »Das White Paper hat einen positiven Einfluss auf die durchschnittliche Konversionsrate« setzt voraus, dass Sie einen negativen Einfluss des White Papers auf die durchschnittliche Konversionsrate für abwegig halten.

Bei einem zweiseitigen Test lassen Sie dagegen die Frage nach der Wirkungsrichtung offen.

Können t-Tests Permutationstests ersetzen?

Alle Arten von t-Tests setzen voraus, dass die verwendeten Daten als Stichprobe erhoben worden sind. Hierzu muss die Grundgesamtheit bekannt sein. Außerdem muss die Wahrscheinlichkeit, Teil der Stichprobe zu werden für jedes Element der Grundgesamtheit gleich sein.

Zur Definition der Grundgesamtheit können Sie für das Zahlenbeispiel vom Kreis der potenziellen Kunden ausgehen. Im Business-to-Business-Geschäft sind die potenziellen Kunden Unternehmen. Leads im Sinne der von mir verwendeten Definition sind organisatorische Einheiten, die eigenständig über den Kauf des betreffenden Produkts entscheiden dürfen. Im Fall zentralisierter Kaufentscheidungen gehört zu einem Unternehmen genau ein Lead. Anders wäre es zum Beispiel, wenn ein Unternehmen drei Niederlassungen hat, die jeweils allein über den Kauf Ihres Produkts entscheiden dürfen. Dieses Unternehmen würde drei Leads umfassen.

Im Zahlenbeispiel geht es um B2-Leads und damit um Leads, die das Problem, das mit Ihrem Produkt gelöst werden kann bereits erkannt haben, für die ein konkretes Angebot zum Kauf Ihres Produkts aber noch verfrüht wäre.

Die Grundgesamtheit ist daher die Menge aller Unternehmenseinheiten, die dieses Kriterium erfüllen. Alle diese Unternehmenseinheiten wären im Fall eines Kontakts B2-Leads.

Eine Stichprobe erhalten Sie, wenn Sie aus der Grundgesamtheit durch zufällige Auswahl eine bestimmte Anzahl von Leads bestimmen. Sie haben zum Beispiel eine Excel-Tabelle mit allen Unternehmenseinheiten der Grundgesamtheit und bestimmen mit der Funktion ZUFALLSZAHL() für jede dieser Unternehmenseinheiten eine Zufallszahl. Für eine Stichprobe der Länge 70 wählen Sie dann die Unternehmenseinheiten mit den 70 größten Zufallszahlen.

Die in der gezogenen Stichprobe enthaltenen Unternehmenseinheiten sind Ihre B2-Leads, mit denen Sie den A/B-Test durchführen.

Die einem t-Test zugrunde liegende Modellannahme, die erhobenen Daten seien eine Stichprobe, ist im Zusammenhang mit Leads aus zwei Gründen abwegig. Erstens müssten Sie für die Ziehung einer Stichprobe die Grundgesamtheit zu hundert Prozent kennen. Zweitens müsste jedes Element aus dieser Grundgesamtheit bereit sein, gegebenenfalls zu Ihrer Test- oder Kontrollgruppe zu gehören. Beide Bedingungen sind so gut wie nie erfüllt.

Wenn Sie Ihre Daten (die 70 Leads) als Stichprobe erheben, dann ist ein A/B-Test ein vollständig randomisiertes Design. In diesem Fall ziehen Sie zuerst eine Stichprobe und bestimmen dann durch Zufallsauswahl, welcher Teil der Stichprobe zur Testgruppe gehören soll und welcher zur Kontrollgruppe.

Zu einem vollständig randomisierten Design passt unter Umständen ein t-Test für unabhängige Stichproben. Ein t-Test für verbundene Stichproben wäre hier abwegig, weil sie für einen solchen t-Test ein sinnvolles Kriterium bräuchten, nach dem Sie einem Lead aus der Testgruppe ein eindeutig bestimmtes Lead aus der Kontrollgruppe zuordnen könnten. Die zufällige Aufteilung der Stichprobe steht dem entgegen.

Für den t-Test können Sie in Excel die Daten des Zahlenbeispiels in eine Tabelle umwandeln und anschließend nach der Spalte »Gruppe« sortieren. Die Excel-Formeln lauten dann =T.TEST(C2:C36;C37:C71;2;2) für den Fall gleicher Varianzen und =T.TEST(C2:C36;C37:C71;2;3) für den Fall ungleicher Varianzen.

Beide Varianten des t-Tests für unabhängige Stichproben liefern das Signifikanzniveau 0,027 (jeweils gerundet und zweiseitig). Dieser Wert unterscheidet sich sehr stark vom Ergebnis des zweiseitigen Permutationstests (ca. 0,05).

Im Zahlenbeispiel ist die einzige Modellannahme des Permutationstests vollständig erfüllt (A/B-Test mit zufallsabhängiger Gruppeneinteilung). Der Permutationstest ist daher valide. Das stark abweichende Ergebnis des t-Tests bedeutet, dass der t-Test für die Daten des Zahlenbeispiels unbrauchbar ist.

Mit R erhalten Sie für beide Varianten des t-Tests die gleichen Resultate:

t.test(B,A,var.equal=TRUE) # gleiche Varianzen
t.test(B,A) # ungleiche Varianzen

Für den Fall gleicher Varianzen ergibt sich die folgende Grafik, in der die glockenförmige blaue Linie die Dichtefunktion einer t-Verteilung mit 68 Freiheitsgraden darstellt. Die vertikale rote Linie markiert den auf Basis der Daten berechneten t-Wert. Das Signifikanzniveau entspricht den beiden grünen Flächen.

tWert <- t.test(B,A,var.equal=TRUE)$statistic
fg <- t.test(B,A,var.equal=TRUE)$parameter
xWerte <- seq(-5,5,by=0.001)
yWerte <- dt(xWerte, df=fg)
vl <- 0.01
library(lattice)
svg("emim-22-1.svg", width=4.3, height=3.1, bg="transparent")
xyplot(yWerte~xWerte, type="l", xlab="t-Werte", ylab="",
par.settings=list(panel.background=list(col="white"),
par.xlab.text=list(cex=0.8)),
panel = function(x, y, ...) {
panel.segments(seq(tWert,5,by=vl), 0, seq(tWert,5,by=vl), dt(seq(tWert,5,by=vl),df=fg), lwd=0.4, col="#00FF80")
panel.segments(seq(-tWert,-5,by=-vl), 0, seq(-tWert,-5,by=-vl), dt(seq(-tWert,-5,by=-vl),df=fg), lwd=0.4, col="#00FF80")
panel.xyplot(x, y, ...)
panel.abline(h=0, col="#0080FF", lwd=0.6, lty=3)
panel.abline(v=tWert,col="#FF0000",lwd=0.6,lty=3)
panel.text(-5.2, 0.385, adj=c(0,0), paste(fg," Freiheitsgrade",sep=""), cex=0.8)
}
)
dev.off()

Der t-Test zielt darauf ab, von den erhobenen Daten auf die Grundgesamtheit zu schließen (Induktion). Dies ist anders als beim Permutationstest, mit dem nur die erhobenen Daten untersucht werden.

Für den zweiseitigen t-Test lauten die Hypothesen:

HO - Würde man die Grundgesamtheit zu hundert Prozent in den A/B-Test einbeziehen, so wäre die Mittelwertdifferenz zwischen den beiden Gruppen gleich Null (die anhand der Stichprobe beobachtete Mittelwertdifferenz ist zufällig aufgetreten)

H1 - Würde man die Grundgesamtheit zu hundert Prozent in den A/B-Test einbeziehen, so wäre die Mittelwertdifferenz zwischen den beiden Gruppen ungleich Null (das Stichprobenergebnis liefert daher einen Anhaltspunkt für die Verhältnisse in der Grundgesamtheit)

Eine Verallgemeinerung der Testergebnisse auf die Grundgesamtheit kommt nur infrage, wenn die dem Test zugrunde liegenden Daten als Stichprobe aufgefasst werden können. Dies wäre für das Zahlenbeispiel abwegig.

In älteren Veröffentlichungen heißt es, man könne einen Permutationstest mit einem t-Test approximieren (zum Beispiel bei Douglas C. Montgomery: Design and Analysis of Experiments, 5. Auflage, New York, 2001, S. 40). Dies ändert nichts daran, dass eine korrekte Lösung grundsätzlich den Vorzug verdient. Außerdem halte ich eine approximative Lösung nur für empfehlenswert, wenn eine korrekte Lösung entweder nicht verfügbar oder unwirtschaftlich ist.

Gegen eine approximative Lösung spricht auch, dass Sie im Allgemeinen nur wissen können, wie gut ein t-Test einen Permutationstest approximiert, wenn Sie beide Tests rechnen.

Der t-Test erfordert, bezogen auf das Zahlenbeispiel, neben der Annahme eines vollständig randomisierten Designs als weitere Annahme, dass die Werte in der Spalte »Konversion« Realisationen von normalverteilten Zufallsvariablen sind. Diese Annahme ist im Zahlenbeispiel verletzt, weil in der Spalte »Konversion« nur die Zahlen 0 und 1 möglich sind.

Wegen des Zentralen Grenzwertsatzes kann man die Normalverteilungsannahme bei Mittelwertvergleichen ignorieren, wenn beide Gruppen hinreichend groß sind. Im Zahlenbeispiel bestanden beide Gruppen jeweils aus 35 Leads. Dies war für den t-Test offenbar zu wenig. Vielleicht bräuchten Sie hier 300 Leads pro Gruppe für eine gute Approximation (Signifikanzniveau wie beim entsprechenden Permutationstest).