Ghostwriting-Service Dr. Rainer Hastedt

Fachtexte, White Papers, statistische Auswertungen

Erfolgsmessung im Marketing - Folge 27: Konversionsvergleiche für mehr als zwei Gruppen (Permutations-Chi-Quadrat-Test)

Ich beschäftige mich wieder mit meinem in Folge 24 beschriebenen Test von vier Varianten einer Landing-Page. In Folge 25 und Folge 26 hatte ich die mit den vier Varianten erzielten durchschnittlichen Konversionsraten verglichen. Danach unterscheiden sich mindestens zwei der vier durchschnittlichen Konversionsraten signifikant. Meine paarweisen Mittelwertvergleiche blieben trotzdem erfolglos (alle p-Werte > 0,05).

Ich werde jetzt die vier Varianten der Landing-Page vergleichen, indem ich für jede Variante die Konversionswahrscheinlichkeit schätze und prüfe, ob zwischen diesen Werten signifikante Unterschiede bestehen.

Ähnlich wie bei den Mittelwertvergleichen teste ich zunächst anhand eines Index‘, ob eine weitergehende Untersuchung sinnvoll ist. Als Index diente bei meinen Mittelwertvergleichen der empirische F-Wert. Jetzt verwende ich als Index den empirischen Chi-Quadrat-Wert.

Ich erläutere zunächst das Verfahren, indem ich meine Nullhypothese formuliere und anhand meines Zahlenbeispiels erläutere, was der empirische Chi-Quadrat-Wert damit zu tun hat. Anschließend mache ich den Chi-Quadrat-Test in seiner herkömmlichen Form mit der Chi-Quadrat-Verteilung, die normalverteilte Daten voraussetzt. Hierbei erhalte ich 0,045 als Signifikanzniveau (p-Wert).

Gegen dieses Ergebnis spricht, dass meine Daten, die nur die Werte 1 und 0 aufweisen können (Konversion ja oder nein) nicht normalverteilt sind, dass ich für jede Variante der Landing-Page nur 35 Beobachtungswerte habe und dass das anhand der Chi-Quadrat-Verteilung berechnete Signifikanzniveau relativ dicht an der 5-Prozent-Grenze liegt.

Besser ist ein Permutations-Chi-Quadrat-Test, weil mein in Folge 24 erläutertes Zahlenbeispiel alle für diesen Test erforderlichen Modellannahmen erfüllt.

Die Grundidee von Chi-Quadrat-Tests

Als Ausgangspunkt dient mein Zahlenbeispiel für den Test von vier Varianten einer Landing-Page. Zu testen sind folgende Hypothesen:

H0 - Die Konversionswahrscheinlichkeiten sind für alle Varianten der Landing-Page gleich

H1 - Die Konversionswahrscheinlichkeiten sind für mindestens zwei Varianten ungleich

Für meinen Chi-Quadrat-Test gehe ich davon aus, dass die Nullhypothese H0 richtig ist und dass es daher richtig ist, alle vier Varianten zu einer einzigen Gruppe zusammenzufassen.

Ich lese zunächst meine Daten, diesmal von meiner Website:

url <- "http://www.ghostwriting-service.de/erfolgsmessung-im-marketing-folge-24-konversionsvergleiche-fuer-mehr-als-zwei-gruppen-einfuehrung.php"
library(XML)
daten <- readHTMLTable(url, which=4, stringsAsFactors=FALSE)
daten$Konversion <- as.numeric(daten$Konversion)

Als Datenquelle dient die vierte Tabelle (which=4) der Internetseite http://www.ghostwriting-service.de/erfolgsmessung-im-marketing-folge-24-konversionsvergleiche-fuer-mehr-als-zwei-gruppen-einfuehrung.php. Außerdem habe ich angegeben, welche Spaltenwerte als Zahlen gemeint sind (die in der Spalte Konversion).

Ich ergänze die Spalte Variante:

library(dplyr)
daten2 <- mutate(daten, Variante=paste(Headline, Beschreibung, sep=""))

Die ersten fünf der insgesamt 140 Zeilen (Kennzahl-Spalte weggelassen):

Headline Beschreibung Konversion Variante
H1 T1 0 H1T1
H2 T1 1 H2T1
H1 T1 1 H1T1
H2 T1 1 H2T1
H1 T1 0 H1T1

Bei Gültigkeit der Nullhypothese H0 kann ich die Gruppeneinteilung ignorieren. Ich tabelliere daher die Spalte Konversion.

table(daten2$Konversion)
0 1
59 81

Die Tabelle zeigt, wie oft die Werte 0 (Konversion nein) und 1 (Konversion ja) in der Spalte Konversion vorkommen, die insgesamt 140 Werte enthält (140 = 59 + 81).

Bei Gültigkeit der Nullhypothese H0 schätze ich die Wahrscheinlichkeiten für die Werte 0 und 1 wie folgt:

  • Wert 0 in 59 von 140 Fällen, 59/140 = 0,4214286
  • Wert 1 in 81 von 140 Fällen, 81/141 = 0,5785714

Bei Gültigkeit der Nullhypothese H0 beträgt der Schätzwert für die Konversionswahrscheinlichkeit daher 0,579 (gerundet).

Ich kann anhand der beiden Schätzwerte für jede Gruppe berechnen, wie viele Besucher in die Kategorien 0 (Konversion nein) und 1 (Konversion ja) fallen müssten, wenn H0 richtig wäre. Hierzu multipliziere ich für jede Gruppe die beiden Schätzwerte mit der Gruppengröße.

Im Zahlenbeispiel umfasst jede Gruppe 35 Besucher. Für alle vier Gruppen rechne ich daher 35*0,4214286 (Konversion nein) und 35*0,5785714 (Konversion ja). Ich erhalte auf diese Weise die bei Gültigkeit von H0 für die vier Gruppen zu erwartenden Häufigkeiten.

Variante 0 1
H1T1 14,75 20,25
H1T2 14,75 20,25
H2T1 14,75 20,25
H2T2 14,75 20,25

Für den Test der Nullhypothese H0 vergleiche ich diese Tabelle mit der Tabelle der tatsächlichen Häufigkeiten, die ich auf Basis meiner Daten erstellen kann.

tab <- table(daten2$Variante,daten2$Konversion)
Variante 0 1
H1T1 8 27
H1T2 17 18
H2T1 15 20
H2T2 19 16

Die Tabelle als Grafik:

svg("emim-27-1.svg", width=4.3, height=3.1, bg="transparent")
par(mar = c(3.1, 0.2, 2.5, 0.2))
mosaicplot(tab[,2:1],
main="Absolute und relative Häufigkeiten",
sub="Jeweils 35 Leads pro Gruppe",
color=TRUE, las=1)
mtext(" 1 = Konversion ja\n 0 = Konversion nein", 1, adj=0, line=1, cex=0.7)
par(mar = c(5.1, 4.1, 4.1, 4.1))
dev.off()

Mosaikplot der tatsächlichen Häufigkeiten

Der Chi-Quadrat-Wert ist ein Maß für die Diskrepanz zwischen den beiden Tabellen (erwartete und tatsächliche Häufigkeiten für die vier Varianten der Landing-Page).

Zur Berechnung des Chi-Quadrat-Werts fasse ich beide Tabellen zusammen:

Variante 0 1
H1T1 14,75 8 20,25 27
H1T2 14,75 17 20,25 18
H2T1 14,75 15 20,25 20
H2T2 14,75 19 20,25 16

Die bei Gültigkeit von H0 erwarteten und die tatsächlichen Häufigkeiten stehen jetzt nebeneinander, für jeden Spaltenwert (0 und 1).

Ich berechne für eine bei Gültigkeit von H0 erwartete Häufigkeit die Differenz zur zugehörigen tatsächlichen Häufigkeit, quadriere diesen Wert und dividiere das Ergebnis durch die erwartete Häufigkeit. Ich mache dies für alle bei Gültigkeit von H0 erwarteten Häufigkeiten und summiere die erhaltenen Werte.

Chi-Quadrat = (14,75-8)2/14,75 + (20,25-27)2/20,25 + … + (20,25-16)2/20,25

Die Division durch die bei Gültigkeit von H0 erwarteten Häufigkeiten gewichtet die quadrierten Abweichungen, damit der Index universell anwendbar ist, insbesondere auch für Daten mit unterschiedlichen Gruppengrößen. Der empirische Chi-Quadrat-Wert ist demnach die gewichtete Summe aller Abweichungsquadrate der bei Gültigkeit von H0 erwarteten von den tatsächlichen Häufigkeiten.

Liegen die bei Gültigkeit von H0 erwarteten und die tatsächlichen Häufigkeiten relativ dicht zusammen, so wird der empirische Chi-Quadrat-Wert relativ klein sein. Ein relativ kleiner empirischer Chi-Quadrat-Wert ist daher ein Zeichen dafür, dass die Nullhypothese H0 richtig ist.

Ich brauche somit ein Kriterium, nach dem ich die Größe eines empirischen Chi-Quadrat-Werts beurteilen kann. Dieses Kriterium ist ein zu meiner Fragestellung und meinen Daten passender Signifikanztest (p-Wert ≤ 0,05 gleichbedeutend mit »empirischer Chi-Quadrat-Wert relativ groß«, was wiederum bedeutet, dass sich für mindestens zwei Gruppen die Konversionswahrscheinlichkeiten signifikant unterscheiden).

Herkömmlicher Chi-Quadrat-Test

Als Standardmethode zur Prüfung der Nullhypothese H0 gilt ein Chi-Quadrat-Test anhand der Chi-Quadrat-Verteilung. Dieser Test basiert auf der Normalverteilungsannahme, die meine Daten nicht erfüllen (die Spalte Konversion enthält nur die Werte 0 und 1).

Es gibt unterschiedliche Faustregeln, mit denen sich abschätzen lässt, ob ein herkömmlicher Chi-Quadrat-Test bei nicht normalverteilten Daten akzeptabel ist. Eine dieser Faustregeln lautet, dass bei nicht normalverteilten Daten alle erwarteten Häufigkeiten größer oder gleich fünf sein sollten.

Für meine Daten ist 14,75 die kleinste erwartete Häufigkeit. Ein herkömmlicher Chi-Quadrat-Test kommt daher für mein Zahlenbeispiel infrage.

Excel hat für den Chi-Quadrat-Test die Funktion CHIQU.TEST(), die aber nur anwendbar ist, wenn Sie vorher die beiden Häufigkeitstabellen bestimmen (tatsächliche und bei Gültigkeit von H0 erwartete Häufigkeiten).

Einfacher geht es mir R, entweder

chisq.test(tab)

oder

chisq.test(daten2$Variante,daten2$Konversion)

Als Signifikanzniveau erhalte ich 0,045 (empirischer Chi-Quadrat-Wert gleich 8,0561). Die Nullhypothese H0 wird daher abgelehnt.

Der Chi-Quadrat-Test legt somit die Vermutung nahe, dass die Konversionswahrscheinlichkeiten für mindestens zwei Varianten der Landing-Page ungleich sind. Der p-Wert liegt aber nur knapp unterhalb der 5-Prozent-Grenze.

Ich halte es daher für sinnvoll, den Chi-Quadrat-Test ohne die Chi-Quadrat-Verteilung zu wiederholen.

Permutations-Chi-Quadrat-Test

Als Lösung bietet sich an, den Chi-Quadrat-Test als Permutationstest zu rechnen. Einem solchen Test liegt nur eine Modellannahme zugrunde: Die Gruppeneinteilung muss zufallsbedingt gewesen sein. Mein Zahlenbeispiel erfüllt diese Bedingung (siehe Folge 24).

Ein Permutations-Chi-Quadrat-Test ist daher für meine Daten besser geeignet als ein herkömmlicher Chi-Quadrat-Test.

Ich muss für meinen Permutations-Chi-Quadrat-Test den empirischen Chi-Quadrat-Wert berechnen. Die einfachste Möglichkeit bietet die Funktion chisq.test(), die ich für meinen Chi-Quadrat-Anpassungstest verwendet habe.

Entweder

tab <- table(daten2$Variante,daten2$Konversion) chisq.test(tab)$statistic

oder

chisq.test(daten2$Variante,daten2$Konversion)$statistic

Eine andere Möglichkeit besteht darin, den empirischen Chi-Quadrat-Wert selber zu berechnen und die einzelnen Schritte in Form einer Funktion zusammenzufassen. Mit x für die Spalte Variante und y für die Spalte Konversion könnte eine solche Funktion folgendermaßen aussehen:

chi2emp <- function(x,y) {
# Tatsächliche Häufigkeiten:
tab <- table(x,y)
# Spalte Konversion: Größe des Wertebereichs:
nlevels <- length(table(y))
# Wahrscheinlichkeiten unter H0:
w <- vector(length=nlevels)
for (i in 1:nlevels) {
 w[i] <- table(y)[i]/length(y)
 }
# Gruppengrößen:
gg <- vector(length=nrow(tab))
for (i in 1:nrow(tab)) {
 gg[i] <- sum(tab[i,])
 }
# Erwartete Häufigkeiten:
tabE <- matrix(nrow=nrow(tab),ncol=ncol(tab),byrow=TRUE)
for (i in 1:nrow(tab)) {
 tabE[i,] <- gg[i]*w
 }
# Berechnung von Chi-Quadrat:
n <- nrow(tab)*ncol(tab)
ze <- vector(length=n)
for (i in 1:n) {
 ze[i] <- (tab[i]-tabE[i])^2/tabE[i]
 }
chi2 <- sum(ze)
chi2
}

Für meinen Permutations-Chi-Quadrat-Test gehe ich davon aus, dass die Nullhypothese H0 richtig ist. Gemäß H0 sind die Konversionswahrscheinlichkeiten für alle Varianten der Landing-Page gleich. Unter H0 ist es daher egal, welche Variante der Landing-Page ein Besucher gesehen hat.

Ich wiederhole die zufallsbedingte Gruppeneinteilung und berechne für jede neue Gruppeneinteilung den Chi-Quadrat-Wert:

neuberechnung <- function(x,y) {
neueinteilung <- sample(x)
chi2emp(neueinteilung,y)
}
nsim <- 20000
chi2neu <- replicate(nsim, neuberechnung(daten2$Variante,daten2$Konversion))

Das Ergebnis ist ein Vektor mit 20.000 neuen Chi-Quadrat-Werten. Auf dieser Basis berechne ich das Signifikanzniveau, indem ich prüfe, wie viele dieser neuen Chi-Quadrat-Werte mindestens so groß sind wie mein empirischer Chi-Quadrat-Wert (8,056079) und das Ergebnis als Prozentwert ausgebe.

Der empirische Chi-Quadrat-Wert:

chi2 <- chi2emp(daten2$Variante,daten2$Konversion)

Der Anteil der neuen Chi-Quadrat-Werte, die mindestens so groß sind wie mein empirischer Chi-Quadrat-Wert:

bedingung <- (chi2neu >= chi2)
mean(bedingung)

Ich erhalte als Signifikanzniveau 0,046 und damit fast das gleiche Ergebnis wie bei meinem herkömmlichen Chi-Quadrat-Test. Die Konversionswahrscheinlichkeiten sind demnach für mindestens zwei der vier Varianten ungleich.