Keywords: Kundenabwanderungsrate, Churn Rate, Prognose Kundenbindung, Berechnung Abwanderungsquote, Statistik Beratung, Data Science

Einführung

Die folgende Prognose basiert auf dem Aufsatz “How to project customer retention”. Es geht um die Kundenbindung bei Vertragskunden. Im Aufsatz wird ein mathematisches Model erstellt, welcher auf folgende Annahmen beruht:

  1. Jeder Kunde verlängert am Ende eines Jahres seinen Vertrag mit einer bestimmten Wahrscheinlichkeit \(\phi\).

  2. Die Wahrscheinlichkeit \(\phi\), mit der ein Kunde seinen Vertrag verlängert, ändert sich nicht mit der Zeit.

  3. Zwei unterschiedliche Kunden haben womöglich unterschiedliche Wahrscheinlichkeiten \(\phi_1, \phi_2\) mit der sie Ihren Vertrag verlängern.

Mathematisches Modell

Das Modell welches im Aufsatz vorgeschlagen wird ist ein sogenanntes parametrisches Modell. Es hat zwei Parameter \(\alpha,\beta\) welche es gilt anhand der Daten zu schätzen. Dazu verwenden die Autoren die folgende Zielfunktion: \[LL(\alpha,\beta | \text{data}) = \sum_{t=1}^{t_f} n_t \ln [P(T=t | \alpha,\beta)] + (n-\sum_{t=1}^{t_f} n_t) \ln [S(t_{f} | \alpha,\beta)]\] Hierbei ist

  • \(n_t\) ist die Anzahl der Kunden, die zum Zeitpunkt \(t\) gekündigt haben
  • \(n\) ist die Anzahl der aktiven Kunden im letzten Zeitpunkt \(t_f\)
  • \(t_f\) ist der letzte beobachtbare Zeitpunkt
  • \(P(T=t|\alpha,\beta)\) ist die Wahrscheinlichkeit mit der ein zufälliger Kunde seinen Vertrag zum Zeitpunkt \(t\) nicht verlängern wird
  • \(S(t|\alpha,\beta)\) ist die Wahrscheinlichkeit mit der ein zufälliger Kunde seinen Vertrag zum Zeitpunkt \(t\) verlängern wird

Die einzelnen Wahrscheinlichkeiten lassen sich nach dem obigen Aufsatz berechnen zu: \[P(T=t) = \begin{cases} \frac{\alpha}{\alpha + \beta}, & \mbox{falls } t=1 \\ \frac{\beta+t-2}{\alpha+\beta+t-1}, & \mbox{falls } t>1 \end{cases}\] und \[S(t | \alpha, \beta) = \begin{cases} 1-P(T=1 | \alpha, \beta), & \mbox{falls } t=1 \\ S(t-1) - P(T=t | \alpha,\beta), & \mbox{falls } t>1 \end{cases}\]

Hiermit können wir in R die Wahrscheinlichkeiten berechnen. Die Funktion churnBG berechenet \(P(T=t|\alpha,\beta)\) während die Funktion survivalBG die Wahrscheinlichkeit \(S(t|\alpha,\beta)\) berechnet.

Wir lesen die Daten ein aus der Datei kundenbindung.csv und schauen uns die ersten Datensätze an. Die Kunden sind in unterschiedliche Gruppen aufgeteilt (Kundengruppe A, Kundengruppe B). In der Praxis würde man die Kunden nach anderen Kriterien, zum Beispiel nach Vertrieb, aufteilen und darauf die Prognose aufbauen.

kb <- read.csv("kundenbindung.csv",header=TRUE,sep=";")


head(kb);
##   Kundengruppe Jahr AnzahlAktiv AnzahlGekuendigt
## 1            A 2006      961313           562162
## 2            A 2007      712986           248327
## 3            A 2008      581967           131019
## 4            A 2009      496653            85314
## 5            A 2010      440284            56369
## 6            A 2011      399150            41134
# Prognose fuer Kundengruppe A
activeCust = kb$AnzahlAktiv[kb$Kundengruppe=="A"];
lostCust = kb$AnzahlGekuendigt[kb$Kundengruppe=="A"];
opt = optim(c(1,1),MLL);
alpha <- opt$par[1];
beta <- opt$par[2];
n <- activeCust[1]+lostCust[1];
T <- 20;
prognoseJahre <- seq(0,(T-1))+2006;
prognoseA <- round(n*survivalBG(alpha,beta,(1:T)));

# Prognose fuer Kundengruppe B
activeCust = kb$AnzahlAktiv[kb$Kundengruppe=="B"];
lostCust = kb$AnzahlGekuendigt[kb$Kundengruppe=="B"];
opt = optim(c(1,1),MLL);
alpha <- opt$par[1];
beta <- opt$par[2];
n <- activeCust[1]+lostCust[1];
prognoseB <- round(n*survivalBG(alpha,beta,(1:T)));



# plot
# Kundengruppe A
plot(prognoseJahre,prognoseA,type="b",col="green",main="Prognose Kundenbindung", sub="Schwarz=Anzahl aktiver Kunden (Kundengruppe A), Grün=Prognose", xlab="Jahr", ylab="Anzahl aktiver Kunden");
lines(kb$Jahr[kb$Kundengruppe=="A"],kb$AnzahlAktiv[kb$Kundengruppe=="A"],type="b",col="black");
abline(v=2017, col="black",lty="dashed");

kA <- kb$AnzahlAktiv[kb$Kundengruppe=="A"];
pA <- prognoseA[prognoseJahre<=2017];
dA <- data.frame(prognoseJahre[prognoseJahre<=2017],kA,pA, abs(kA-pA)/kA*100.0);
names(dA) <- c("jahr","aktiveKundenA","prognoseA","relativerFehlerInProzent");

print(dA);
##    jahr aktiveKundenA prognoseA relativerFehlerInProzent
## 1  2006        961313    954277                0.7319156
## 2  2007        712986    722103                1.2787067
## 3  2008        581967    591849                1.6980344
## 4  2009        496653    507027                2.0887823
## 5  2010        440284    446746                1.4676890
## 6  2011        399150    401367                0.5554303
## 7  2012        367157    365780                0.3750439
## 8  2013        339735    337006                0.8032731
## 9  2014        315359    313182                0.6903244
## 10 2015        295554    293080                0.8370721
## 11 2016        278796    275853                1.0556106
## 12 2017        263561    260899                1.0100129
# Kundengruppe B
plot(prognoseJahre,prognoseB,type="b",col="green",main="Prognose Kundenbindung", sub="Schwarz=Anzahl aktiver Kunden (Kundengruppe B), Grün=Prognose", xlab="Jahr", ylab="Anzahl aktiver Kunden")
lines(kb$Jahr[kb$Kundengruppe=="B"],kb$AnzahlAktiv[kb$Kundengruppe=="B"],type="b",col="black")
abline(v=2017, col="black",lty="dashed")

kB <- kb$AnzahlAktiv[kb$Kundengruppe=="B"]
pB <- prognoseB[prognoseJahre<=2017]
dB <- data.frame(prognoseJahre[prognoseJahre<=2017],kB,pB, abs(kB-pB)/kB*100.0)
names(dB) <- c("jahr","aktiveKundenB","prognoseB","relativerFehlerInProzent")

print(dB)
##    jahr aktiveKundenB prognoseB relativerFehlerInProzent
## 1  2006        806830    787379                2.4107929
## 2  2007        689844    692046                0.3192026
## 3  2008        606283    622406                2.6593192
## 4  2009        550576    568822                3.3139839
## 5  2010        511580    526033                2.8251691
## 6  2011        480013    490898                2.2676469
## 7  2012        455873    461414                1.2154701
## 8  2013        434518    436239                0.3960710
## 9  2014        413164    414434                0.3073840
## 10 2015        396452    395322                0.2850282
## 11 2016        379739    378400                0.3526106
## 12 2017        365812    363289                0.6896985

Bemerkungen

Man sieht in beiden Kundengruppen, dass die Prognose sehr gut ist (relativer Fehler <3%). Diese Methode kann immer dann angewendet werden, wenn man die Anzahl der aktiven und gekündigten Vertragskunden in den einzelnen Jahren kennt. Die Autoren bemerken, dass bei der typischen Berechnung der Churn-Rate nicht die Heterogenität in den Kunden nicht berücksichtigt wird. D.h. es wird angenommen, dass jeder Kunde mit der gleichen Wahrscheinlichkeit kündigen / seinen Vertrag verlängern wird. Diese Annahme führt jedoch zu schwachen Prognosen, wie die Autoren bemerken.