Nach einer wahren Begebenheit …

Kundenbefragung

Eine Einzelhändlerin möchte zur Marketingsteuerung ihre Kunden besser kennenlernen und beauftragt ein Institut mit einer Kundenbefragung. Einer der Fragen:

Wie oft kaufen Sie bei uns ein?

Das Marktforschungsinstitut startet motiviert und befragt im Laden über eine Woche verteilt \(1000\) Kundinnen und Kunden und präsentiert das Ergebnis.

Die Auftraggeberin freut sich über das Ergebnis - aber leider ist es systematisch verzerrt …

Einkaufsverhalten

Viele Kunden kaufen eher selten ein, wenige eher oft - das gute alte Paretoprinzip.

Modellieren und simulieren kann man Kauffrequenzen z.B. Hilfe des Pareto/NBD Modells (siehe z.B. hier):

# Paket laden
library(mosaic)
# Zufallszahlengenerator setzen
set.seed(1896)
# Kunden insgesamt
N <- 25000

# Heterogenität der Kunden, Gammaverteilt
kunden <- rgamma(n = N, shape = 10)
# Kauffrequenz, Poissonverteilt
population <- rpois(n = N, lambda = kunden)

Schauen wir uns die wahre Kauffrequenz in der Population an:

# Säulendiagramm
gf_bar( ~ population)

# Kennzahlen
favstats( ~population)
##  min Q1 median Q3 max   mean       sd     n missing
##    0  7      9 13  35 9.9608 4.463754 25000       0

In der (simulierten) Population gilt für den Mittelwert der Einkaufshäufigkeit:

\[\mu=9.96\approx 10\]

Gelegenheitsstichprobe

Dadurch, dass die Kundinnen und Kunden im Laden befragt wurden, haben Sie unterschiedliche Wahrscheinlichkeiten befragt zu werden: die, die häufiger einkaufen haben eine höhere Auswahlwahrscheinlichkeit als die, die seltener einkaufen.

# Stichprobenumfang
n <- 1000

# Auswahlwahrscheinlichkeit proportional zur Kaufhäufigkeit
stipro_gelegenheit <- sample(population, size = n, prob = population)

Und das Ergebnis, was das Marktforschungsinstitut - und die Chefin - sieht, und worauf die Entscheidungen basieren ist verzerrt:

# Säulendiagramm
gf_bar( ~ stipro_gelegenheit)

# Kennzahlen
favstats( ~ stipro_gelegenheit)
##  min Q1 median Q3 max   mean       sd    n missing
##    2  8     11 15  28 12.087 4.766776 1000       0

D.h. der Mittelwert in der Stichprobe ist höher als in Wirklichkeit - da Vielkäufer*innen bevorzugt ausgewählt, d.h. Teil de Stichprobe wurden:

\[\bar{x}=12.09\]

Zufällige Stichprobe

Bei einer zufälligen Stichprobe hätte jede Kundin die gleiche Wahrscheinlichkeit befragt zu werden. Die Auswahlwahrscheinlichkeit wäre unabhängig von der Kauffrequenz:

# Auswahlwahrscheinlichkeit für alle gleich
stipro_zufall <- sample(population, size = n)
# Säulendiagramm
gf_bar( ~ stipro_zufall)

# Kennzahlen
favstats( ~ stipro_zufall)
##  min Q1 median Q3 max   mean       sd    n missing
##    1  7     10 13  32 10.036 4.408644 1000       0

Der Schätzwert auf Basis der zufälligen Stichprobe ist nicht systematisch verzerrt:

\[\bar{x}=10.04\]

Stichprobenumfang

Das Problem einer möglichen systematischen Verzerrung, eines Bias, bei einer nicht-zufälligen Stichprobe kann i.d.R. nicht über größere Stichproben gelöst werden:

# Stichprobenumfang
n <- 10000
# Auswahlwahrscheinlichkeit proportional zur Kaufhäufigkeit
stipro_gelegenheit <- sample(population, size = n, prob = population)
# Mittelwert
mean(~stipro_gelegenheit)
## [1] 11.455

Während schon kleine, zufällige Stichproben unverzerrt sind:

# Stichprobenumfang
n <- 100
# Auswahlwahrscheinlichkeit für alle gleich
stipro_zufall <- sample(population, size = n)
# Mittelwert
mean(~stipro_zufall)
## [1] 9.98

\[|\hat{\mu}_{\text{Zufallsstichprobe } n=100 }-\mu| = |9.96-9.98|< |9.96-11.46|=|\hat{\mu}_{\text{Gelegenheitsstichprobe } n=10000 }-\mu|\]

Natürlich lösen Konfidenzintervalle u.ä. das Problem der Verzerrung nicht:

# Bootstrapping
Bootvtlg <- do(10000)* mean( ~ resample(stipro_gelegenheit))
gf_histogram( ~ mean, data = Bootvtlg)

confint(Bootvtlg)
##   name   lower   upper level     method estimate
## 1 mean 11.3652 11.5428  0.95 percentile   11.455

Selection Bias

Das Problem ist, dass die Auswahlwahrscheinlichkeit nicht unabhängig von der Antwort auf die Frage ist, da beides vom Kaufverhalten abhängt:

\[\text{Stichprobe} \leftarrow \text{Kaufverhalten} \rightarrow \text{Antwort}\]

Uns liegen nur die Daten der Stichprobe, d.h. für die Beobachtungen der Population für die \({\text{Stichprobe}=1}\) gilt, vor, d.h.

\[\boxed{\text{Stichprobe}=1} \leftarrow \text{Kaufverhalten} \rightarrow \text{Antwort}.\] Uns liegen mit höherer Wahrscheinlichkeit Daten von Personen in der Stichprobe vor, die öfter einkaufen und dies auch so antworten.

Bei einer zufälligen Stichprobe erfolgt die Erhebung unabhängig vom Kaufverhalten, d.h. der Pfeil vom Kaufverhalten zur Auswahl als Stichprobe wird gestrichen:

\[\boxed{\text{Stichprobe}=1} \not\leftarrow \text{Kaufverhalten} \rightarrow \text{Antwort}\] Wir lernen über die Tatsache, dass die Person Teil der Stichprobe ist nichts über die Antwort.

\[\boxed{\text{Stichprobe}=1} \quad \text{Kaufverhalten} \rightarrow \text{Antwort}.\]