Logistische Regression, Lift Charts und Warenkorbanalyse

Kurz gesagt

Niveau: Fortgeschritten

Die meisten Fragen im Marketing enden mit Ja oder Nein, und die logistische Regression ist das Werkzeug dafür.

  • Sie modelliert die logarithmierte Chance, also bleibt jede Vorhersage zwischen 0 und 1, und ihre Koeffizienten werden zu Chancenverhältnissen.
  • Bewerte die Datei, schneide sie in Dezile und schreib nur die Dezile an, deren Reaktionsrate über Kosten geteilt durch Deckungsbeitrag liegt.
  • Beurteile die Rangfolge an einer Gewinnkurve auf einer zurückgehaltenen Stichprobe, nie auf den Trainingsdaten.
  • Mit Produktmerkmalen als Einflussgrößen macht dasselbe Modell Warenkorbanalyse und hält Käufer und restlichen Warenkorb fest, was Assoziationsregeln nicht können.

Die meisten Fragen im Marketing enden mit Ja oder Nein: Reagiert diese Kundin auf den Frühjahrskatalog, legt der Mensch mit dem Weinkorb den Käsekorb dazu? Ich gehe durch Logit, Chancenverhältnisse und die S förmige Kurve, bewerte die 20.000 Kunden eines erfundenen Hamburger Shops für Geschenkkörbe in Dezilen und finde die Tiefe, ab der sich das nächste Dezil nicht mehr rechnet, und nutze dann dasselbe Modell für die Warenkorbanalyse. Das ist Kapitel 7 von 21 meiner Serie Marketing Analytics.

Die Frühjahrskampagne, die sich rechnet, oder eben nicht

Jeden März führt Lena bei Korbwerk, einem erfundenen Onlineshop für Geschenkkörbe in Hamburg unter korbwerk.example, dasselbe Gespräch mit sich selbst. Weihnachten ist vorbei, und rund 20.000 Menschen in der Kundendatei haben mindestens einmal gekauft. Ostern und Muttertag stehen vor der Tür, und ein gedruckter Frühjahrskatalog mit einem Code darin kostet pro Haushalt ungefähr 1,20 €, wenn man Druck, Porto und den eingelösten Rabatt zusammenrechnet. Schickt sie ihn an alle 20.000, gibt sie 24.000 € aus, bevor ein einziger Korb das Lager verlässt. Schickt sie ihn an niemanden, verschenkt sie Umsatz. Schickt sie ihn nach Bauchgefühl an "die guten Kunden", erfährt sie nie, was ihr entgangen ist.

Die Frage ist nicht "soll ich verschicken". Sie lautet "an wen, und wie tief". Das ist pro Kunde ein Ergebnis mit Ja oder Nein: reagiert oder nicht. In diesem Kapitel geht es um das häufigste Ergebnis im Marketing, das binäre, und um das Werkzeug dafür: die logistische Regression. Ich setze sie zweimal ein. Zuerst, um die Kunden für die Frühjahrskampagne zu ordnen und die Tiefe zu finden, ab der sich der nächste Katalog nicht mehr bezahlt macht. Dann auf den Bestellpositionen, um eine Frage zum Warenkorb zu beantworten: Liegt der Weinkorb im Warenkorb, wie wahrscheinlich kommt der Käsekorb dazu, und was sollte der Shop empfehlen?

Korbwerk und jede Zahl in diesem Kapitel sind erfunden, damit ich jeden Schritt zeigen kann. Die Methode ist die, die ich wirklich anwende.

Wo dieses Kapitel in der Serie steht

Das ist Kapitel 7 von 21 meiner Serie Marketing Analytics und das vierte im zweiten Teil, den Verfahren mit einer abhängigen Variable, die von Kapitel 4 bis Kapitel 10 reichen. Das vorige Kapitel, Poisson Regression, hat Zählwerte behandelt. Das nächste, Survival Analyse, Churn und Customer Lifetime Value, nimmt die Zeit dazu: nicht ob ein Kunde geht, sondern wann. Die logistische Regression steht dazwischen als Arbeitspferd. Die Hälfte dessen, was als "prädiktives Marketing" verkauft wird, ist ein logistisches Modell mit einer ordentlichen Tabelle von Merkmalen dahinter.

Jede Grundidee, die hier vorkommt, von der Wahrscheinlichkeit bis zum Logarithmus, ist auf der Seite Grundlagen von Grund auf erklärt.

Gewöhnliche Regression bricht bei einem Ja oder Nein

Kodier eine Reaktion als 1 und keine Reaktion als 0, leg eine gewöhnliche Gerade hindurch, und drei Dinge gehen schief. Die Vorhersage ist nicht begrenzt, also bekommt eine sehr engagierte Kundin eine vorhergesagte Reaktion von 1,3, und das ist keine Wahrscheinlichkeit. Die Fehler können nicht normalverteilt sein, weil das Ergebnis nur zwei Werte annimmt. Und jeder Effekt wird linear erzwungen: Der Schritt von einer auf zwei Bestellungen bringt genauso viel Wahrscheinlichkeit wie der von neun auf 10, und das glaubt niemand.

Die logistische Regression löst alle drei mit einer Idee. Statt die Wahrscheinlichkeit direkt zu modellieren, modelliert sie den Logarithmus der Chance. Die Chance (englisch odds) ist die Wahrscheinlichkeit des Ereignisses geteilt durch die Wahrscheinlichkeit, dass es nicht eintritt.1 Eine Reaktionsrate von 20 % ergibt eine Chance von 0,20/0,80=0,250{,}20 / 0{,}80 = 0{,}25, 50 % eine Chance von 1 und 90 % eine Chance von 9. Chancen reichen von null bis unendlich, und ihr natürlicher Logarithmus, der Logit, reicht von minus unendlich bis plus unendlich, und genau das liefert eine lineare Gleichung am liebsten.

ln⁡(p1−p)=β0+β1x1+β2x2+⋯+βkxk\ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_k x_k

Dabei ist pp die Wahrscheinlichkeit, dass der Kunde reagiert, p1−p\frac{p}{1-p} die Chance, ln⁡\ln der natürliche Logarithmus, x1x_1 bis xkx_k sind die Dinge, die wir über den Kunden wissen, β0\beta_0 ist der Achsenabschnitt (die logarithmierte Chance eines Kunden, bei dem jedes xx null ist), und jedes βj\beta_j ist die Änderung der logarithmierten Chance für eine Einheit mehr von xjx_j, wenn alles andere gleich bleibt. Grundlagen: Regression und Grundlagen: Logarithmen

Löst du das nach pp auf, bekommst du die logistische Funktion, die S förmige Kurve, nach der die Methode heißt:

p=11+e−(β0+β1x1+⋯+βkxk)p = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \dots + \beta_k x_k)}}

Dabei ist ee die Eulersche Zahl, etwa 2,7182{,}718, und die Klammer im Exponenten ist derselbe lineare Wert β0+β1x1+⋯+βkxk\beta_0 + \beta_1 x_1 + \dots + \beta_k x_k wie oben. Was immer der Wert ist, die Funktion drückt ihn zwischen 0 und 1. Grundlagen: Regression

Durchgerechnetes Beispiel: drei Werte durch die Kurve

Ein Wert von 0 ergibt p=1/(1+e0)=1/2=0,5p = 1 / (1 + e^{0}) = 1 / 2 = 0{,}5. Ein Wert von 2 ergibt p=1/(1+e−2)=1/(1+0,135)=0,881p = 1 / (1 + e^{-2}) = 1 / (1 + 0{,}135) = 0{,}881. Ein Wert von minus 4 ergibt p=1/(1+e4)=1/(1+54,6)=0,018p = 1 / (1 + e^{4}) = 1 / (1 + 54{,}6) = 0{,}018.

Die logistische FunktionDie logistische Funktion macht aus einem linearen Wert eine Wahrscheinlichkeit. Bei einem Wert von minus 6 liegt die Wahrscheinlichkeit bei 0,002, bei minus 2 bei 0,12, bei 0 bei 0,5, bei 2 bei 0,88 und bei 6 bei 0,998. Die Kurve ist um null am steilsten und an beiden Enden flach.Vom linearen Wert zur Wahrscheinlichkeit00,511,52-6-4-20246Wahrscheinlichkeit eines JaWahrscheinlichkeitLinearer Wert

Die waagrechte Achse ist der lineare Wert, die senkrechte die Wahrscheinlichkeit, die daraus wird. Die Kurve ist in der Mitte am steilsten und an beiden Enden flach, und das beschreibt Menschen ziemlich gut: Eine ohnehin treue Kundin noch stärker zu bearbeiten bringt sehr wenig, und jemanden anzuschreien, der vor Jahren gegangen ist, ebenfalls.

Die Betas werden mit der Maximum Likelihood Methode geschätzt, nicht mit kleinsten Quadraten,1 also gibt es kein R Quadrat im üblichen Sinn. Die Prüfungen, auf die es ankommt, sind andere, und zu ihnen komme ich weiter unten.

Koeffizienten werden zu Chancenverhältnissen

Die Betas leben auf der Skala der logarithmierten Chance, in der niemand denkt. Nimmst du sie als Exponenten von ee, bekommst du Chancenverhältnisse (Odds Ratios), mit denen Menschen arbeiten können:1

ORj=eβj\text{OR}_j = e^{\beta_j}

Dabei ist ORj\text{OR}_j das Chancenverhältnis für die Einflussgröße jj, ee die Eulersche Zahl und βj\beta_j der Koeffizient dieser Einflussgröße. Ein Chancenverhältnis von 1,5 heißt, dass eine Einheit mehr von xjx_j die Chance mit 1,5 multipliziert, wenn alles andere gleich bleibt. Grundlagen: Regression

Ein Chancenverhältnis von 1,73 für das Merkmal Geschenkkäufer heißt: Ein Geschenkkäufer hat die 1,73 fache Chance zu reagieren wie jemand, der für sich selbst kauft und sonst genau gleich aussieht. Chance, nicht Wahrscheinlichkeit. Liegt die Wahrscheinlichkeit bei der Selbstkäuferin bei 3 %, ist ihre Chance 0,03/0,97=0,0310{,}03 / 0{,}97 = 0{,}031. Die Chance des Geschenkkäufers ist 0,031×1,73=0,0540{,}031 \times 1{,}73 = 0{,}054, seine Wahrscheinlichkeit 0,054/1,054=5,1 %0{,}054 / 1{,}054 = 5{,}1\,\%.

Durchgerechnetes Beispiel: Lenas Modell für die Frühjahrsreaktion

Hier ist das Reaktionsmodell, geschätzt auf der Frühjahrskampagne des letzten Jahres: 20.000 angeschrieben, 788 reagiert, eine Grundrate von 788/20.000=3,94 %788 / 20.000 = 3{,}94\,\%. Jede Variable ist zum Tag gemessen, an dem der Katalog rausging.

VariableKoeffizientStandardfehlerChancenverhältnisVIF
Achsenabschnittminus 3,400,21
Monate seit der letzten Bestellungminus 0,090,0120{,}0120,911,6
Bestellungen in den letzten 24 Monaten0,280,041,322,1
Geschenkkäufer (1 = ja)0,550,111,731,2
Firmenkunde (1 = ja)0,420,161,521,3
Klick in der Frühjahrsmail des Vorjahres (1 = ja)0,780,102,181,4
Durchschnittlicher Bestellwert, je 10 €0,060,021,061,9

Zeile für Zeile gelesen. Jeder Monat seit der letzten Bestellung multipliziert die Chance mit e−0,09=0,91e^{-0{,}09} = 0{,}91, also hat eine Kundin, die vor 12 Monaten zuletzt gekauft hat, die e−0,09×12=e−1,08=0,34e^{-0{,}09 \times 12} = e^{-1{,}08} = 0{,}34 fache Chance von jemandem, der letzten Monat gekauft hat. Jede zusätzliche Bestellung in zwei Jahren multipliziert die Chance mit e0,28=1,32e^{0{,}28} = 1{,}32. Geschenkkäufer haben eine um 73 % höhere Chance als Selbstkäufer, und für genau diese Gruppe ist der Frühjahrskatalog eigentlich gedacht. Firmenkunden reagieren besser als Privatkunden, auch wenn die Zahl der Bestellungen schon berücksichtigt ist, vermutlich weil Büros zu Ostern Körbe für ihre Leute kaufen. Ein Klick in der Frühjahrsmail des Vorjahres ist das stärkste einzelne Signal, ein Chancenverhältnis über 2. Der durchschnittliche Bestellwert zählt, aber maßvoll: 50 € mehr sind fünf Einheiten, also steigt die Chance um e0,06×5=e0,30=1,35e^{0{,}06 \times 5} = e^{0{,}30} = 1{,}35, rund 35 %.

Die erste Fassung dieses Kapitels hat "Frühjahrsmail des Vorjahres geöffnet" verwendet. Ich habe das auf Klick geändert: Apples Mail Privacy Protection lädt das unsichtbare Bild, das eine Öffnung zählt, im Hintergrund, ob jemand die Nachricht liest oder nicht,2 also ist eine Öffnung ein schwaches Signal.

Eine Faustregel für die Standardfehler: Ein Koeffizient, der kleiner ist als ungefähr das Doppelte seines Standardfehlers, könnte genauso gut null sein. Alles hier liegt darüber. Das Merkmal Firmenkunde gerade so: 0,42/0,16=2,60{,}42 / 0{,}16 = 2{,}6.

Der Varianzinflationsfaktor schlägt bei Kollinearität Alarm

Die letzte Spalte der Tabelle ist der Varianzinflationsfaktor, kurz VIF (variance inflation factor):

VIFj=11−Rj2\text{VIF}_j = \frac{1}{1 - R_j^2}

Dabei ist VIFj\text{VIF}_j der Varianzinflationsfaktor der Einflussgröße jj, und Rj2R_j^2 ist der Anteil der Streuung von xjx_j, der erklärt wird, wenn du xjx_j auf alle anderen Einflussgrößen regressierst. Ein VIF von 1 heißt, dass xjx_j nichts mit den anderen teilt. Grundlagen: Korrelation und Grundlagen: Regression

Der Regressionskurs der Penn State nennt die übliche Regel: VIF Werte über 4 verdienen einen genaueren Blick, und über 10 zeigen sie ernste Kollinearität, die korrigiert werden muss.3 Ich werde über 5 nervös und entferne oder verbinde Variablen über 10.

Durchgerechnetes Beispiel: wenn zwei Einflussgrößen fast Zwillinge sind

Erklären die anderen Einflussgrößen 80 % der Streuung einer Variable, ist ihr VIF 1/(1−0,80)=51 / (1 - 0{,}80) = 5, und ihr Koeffizient wird aus den 20 % Information geschätzt, die wirklich ihr eigen sind. Bei Korbwerk hängen Zahl und Wert der Bestellungen leicht zusammen (wer oft kauft, kauft auch größer), daher 2,1 und 1,9. Nichts Beunruhigendes.

Das klassische Symptom von Kollinearität ist ein Vorzeichenwechsel: Eine Variable, die die Reaktion offensichtlich heben sollte, kommt negativ heraus, weil sie mit einem Beinahezwilling um dieselbe Information kämpft. Sagt dein Modell, dass Vielkäufer seltener reagieren, veröffentliche keine kluge Erklärung. Prüf die VIF Werte, wirf einen der Zwillinge raus und schätz neu.

Von Wahrscheinlichkeiten zu einer geordneten Liste

Das Bewerten ist Rechnerei. Berechne für jeden Kunden in der Datei den linearen Wert, schick ihn durch die logistische Funktion, sortiere die 20.000 Menschen vom wahrscheinlichsten zum unwahrscheinlichsten und schneide sie in 10 gleich große Gruppen zu je 2.000, die Dezile. Dezil 1 sind die besten 10 %, Dezil 10 die schwächsten.

Der Ablauf der BewertungEin Ablauf von oben nach unten: Bestellhistorie und Klicks in Mails ergeben eine Zeile mit Merkmalen pro Kunde, ein logistisches Modell wird auf dem letzten Frühjahr geschätzt, die Prüfungen bestehen oder schicken dich zurück zu den Variablen, alle 20.000 Kunden werden bewertet und in Dezile geordnet, der Shop verschickt bis zur Gewinnschwelle plus an eine zufällige Kontrollgruppe, und das Ergebnis wird gegen die Kontrollgruppe gemessen und fließt in die Merkmale des nächsten Jahres.Bestellhistorie und Klicks in MailsEine Zeile mit Merkmalen pro Kunde, zumVersanddatumDas logistische Modell auf dem letztenFrühjahr schätzenPrüfungen bestanden:Kontrollgruppe, VIF, Vorzeichen,Kalibrierung?neinVariablen korrigieren und neu schätzenjaAlle 20.000 Kunden bewerten und inDezile ordnenBis zur Gewinnschwelle verschicken,plus an eine zufällige KontrollgruppeGegen die Kontrollgruppe messen, insModell des nächsten Jahres einspeisen

Lies es von oben nach unten. Der Entscheidungsschritt schickt eine nicht bestandene Prüfung zurück zu den Variablen, nie weiter zum Versand. Und der letzte Schritt ist der Sinn des Ganzen: Jede Kampagne speist das nächste Modell.

Jetzt die Rechnung der Kampagne. Jeder Katalog kostet cc, hier etwa 1,20 €. Jede Reaktion ist mm an Deckungsbeitrag wert, also Umsatz minus Warenkosten und Versand, ungefähr 38 € bei einer durchschnittlichen Frühjahrsbestellung von 68 €. Für ein Dezil mit ndn_d Kunden und der Reaktionsrate rdr_d ist der Gewinn aus dem Versand:

πd=nd(rd m−c)\pi_d = n_d \left( r_d \, m - c \right)

Dabei ist πd\pi_d der Gewinn aus Dezil dd, ndn_d die Zahl der Kunden darin, rdr_d seine Reaktionsrate, mm der Deckungsbeitrag pro Reaktion und cc die Kosten pro Katalog. Grundlagen: Erwartungswert

Positiv ist er immer dann, wenn die Reaktionsrate des Dezils über der Rate an der Gewinnschwelle liegt:

r∗=cmr^* = \frac{c}{m}

Dabei ist r∗r^* die Reaktionsrate an der Gewinnschwelle, cc die Kosten pro Katalog und mm der Deckungsbeitrag pro Reaktion. Jedes Dezil darüber bezahlt sich selbst, jedes darunter verliert mit jedem Katalog Geld. Grundlagen: Grenzwert und Durchschnitt

Der Lift eines Dezils ist seine Reaktionsrate im Verhältnis zum Durchschnitt:

Liftd=rdrˉ\text{Lift}_d = \frac{r_d}{\bar{r}}

Dabei ist Liftd\text{Lift}_d der Lift des Dezils dd, rdr_d seine Reaktionsrate und rˉ\bar{r} die Reaktionsrate über die ganze Datei. Ein Lift von 3 heißt, dass diese Kunden dreimal so oft reagieren wie eine zufällige Auswahl. Der kumulierte Lift macht dasselbe für die obersten kk Dezile zusammen. Grundlagen: Verhältnisse und Raten

Durchgerechnetes Beispiel: Lenas Gewinnschwelle

r∗=1,20/38=0,0316r^* = 1{,}20 / 38 = 0{,}0316, rund 3,2 %. Jedes Dezil, das über 3,2 % reagiert, spielt seine Kataloge wieder ein. Das ist die ganze Entscheidung über die Tiefe in einer Zeile.

Die Deziltabelle zeigt, wo sich das nächste Dezil nicht mehr rechnet

Hier ist die bewertete Datei, mit den Reaktionsraten des Vorjahres Dezil für Dezil angewendet. Der Umsatz ist die Zahl der Reagierenden mal 68 €, der Gewinn ist die Zahl der Reagierenden mal 38 € minus 2.000 Kataloge zu 1,20 €, also 2.400 € pro Dezil.

DezilKundenReaktionsrateReagierendeUmsatz €Gewinn im Dezil €Kumulierter Gewinn €Kumulierter Lift
12.00012,5 %25017.0007.1007.1003,17
22.0008,0 %16010.8803.68010.7802,60
32.0005,5 %1107.4801.78012.5602,20
42.0004,0 %805.44064013.2001,90
52.0003,0 %604.080minus 12013.0801,68
62.0002,2 %442.992minus 72812.3521,49
72.0001,6 %322.176minus 1.18411.1681,33
82.0001,2 %241.632minus 1.4889.6801,21
92.0000,8 %161.088minus 1.7927.8881,09
102.0000,6 %12816minus 1.9445.9441,00

Durchgerechnetes Beispiel: die Tabelle lesen

Dezil 1: 250×38−2.400=9.500−2.400=7.100250 \times 38 - 2.400 = 9.500 - 2.400 = 7.100 €. Sein Lift ist 12,5 %/3,94 %=3,1712{,}5\,\% / 3{,}94\,\% = 3{,}17. Dezil 4 reagiert mit 4,0 %, knapp über der Gewinnschwelle von 3,2 %, und bringt 80×38−2.400=64080 \times 38 - 2.400 = 640 € dazu. Dezil 5 reagiert mit 3,0 %, knapp darunter, und verliert: 60×38−2.400=−12060 \times 38 - 2.400 = -120 €. Der kumulierte Lift nach vier Dezilen ist (250+160+110+80)/8.000=7,5 %(250 + 160 + 110 + 80) / 8.000 = 7{,}5\,\%, geteilt durch 3,94 %, also 1,90.

Die Antwort lautet also: 8.000 Menschen anschreiben, nicht 20.000. Das spart 12.000×1,20=14.40012.000 \times 1{,}20 = 14.400 € an Katalogen, verzichtet auf 60+44+32+24+16+12=18860 + 44 + 32 + 24 + 16 + 12 = 188 Bestellungen aus den Dezilen 5 bis 10 und hebt den Gewinn der Kampagne von 5.944 € auf 13.200 €, mehr als das Doppelte. Die Spalte mit dem Umsatz sieht ein Marketingteam gern an. Die Spalte mit dem kumulierten Gewinn sollte die Inhaberin ansehen. Die beiden erreichen ihren Höchstwert an verschiedenen Stellen, und in dieser Lücke versickern still die Budgets von Kampagnen.

Eine Verfeinerung zählt. Die Tiefe an der Gewinnschwelle ist eine Punktschätzung. Bei 2.000 Menschen in Dezil 4 hat seine Reaktionsrate einen Standardfehler von 0,04×0,96/2.000=0,0044\sqrt{0{,}04 \times 0{,}96 / 2.000} = 0{,}0044, rund 0,44 Punkte, also reicht ein 95 % Intervall von etwa 3,1 % bis 4,9 %. Grundlagen: Konfidenzintervalle Ich sage Kunden, dass Dezil 4 ein Münzwurf ist und Dezil 5 wahrscheinlich ein Nein, und das ist ein ehrlicherer Satz als "schick genau 8.000". Und weil Druck bei großer Auflage pro Stück günstiger wird, rechne ich cc und mm pro Dezil neu, statt Konstanten anzunehmen.

Die Gewinnkurve zeigt, wie eine gute Rangfolge aussieht

Die Gewinnkurve (Gains Chart) trägt den Anteil aller erreichten Reagierenden gegen den Anteil der angeschriebenen Datei auf. Zufällige Auswahl ist die Diagonale: 30 % der Datei anschreiben, 30 % der Reagierenden erwischen. Die Kurve des Modells sollte sich darüber wölben.

Kumulierte Gewinnkurve, Modell gegen ZufallWer die obersten 10 % der Datei nach Modellwert anschreibt, erreicht 32 % aller Reagierenden, die obersten 20 % erreichen 52 %, die obersten 40 % erreichen 76 % und die obersten 60 % erreichen 89 %. Zufällige Auswahl erreicht denselben Anteil an Reagierenden wie den Anteil der angeschriebenen Datei.Anteil aller erreichten Reagierenden0501001502000 %20 %40 %60 %80 %100 %ModellZufallErreichte Reagierende in %Anteil der angeschriebenen Datei

Die waagrechte Achse ist der Anteil der angeschriebenen Datei, die besten Werte zuerst. Die senkrechte Achse ist der Anteil aller 788 Reagierenden, die in diesen Kunden stecken: Das oberste Dezil hält 250/788=32 %250 / 788 = 32\,\%, die obersten vier 600/788=76 %600 / 788 = 76\,\%. Wie hoch die Linie des Modells in den ersten Dezilen über der Linie des Zufalls liegt, dort steckt das Geld. Wo sie flach wird, schreibst du Menschen an, die so oder so nicht reagieren.

Der Abstand zwischen der Gewinnkurve auf den Trainingsdaten und der auf einer zurückgehaltenen Stichprobe ist deine Prüfung auf Ehrlichkeit. Liegt die Kurve der zurückgehaltenen Stichprobe deutlich tiefer, hat das Modell das letzte Jahr auswendig gelernt, statt etwas über Kunden zu lernen.

Der kumulierte Gewinn sagt dasselbe in Euro:

Kumulierter Gewinn nach VersandtiefeDer kumulierte Gewinn der Kampagne steigt von 7.100 € nach Dezil 1 auf einen Höchstwert von 13.200 € nach Dezil 4 und fällt dann auf 5.944 €, wenn alle zehn Dezile angeschrieben werden.Kumulierter Gewinn nach Versandtiefe0 €5.000 €10.000 €15.000 €20.000 €D1D2D3D4D5D6D7D8D9D10Kumulierter Gewinn in €Tiefstes angeschriebenes Dezil

Jeder Balken ist der Gesamtgewinn, wenn Lena jedes Dezil bis einschließlich diesem anschreibt. Der Höchstwert bei Dezil 4 ist die Antwort auf "wie tief". Alles danach ist Geld, das ausgegeben wird, um Geld zu verlieren.

Kalibrierung, Ungleichgewicht und wann ein Baum besser ist

Die Rangfolge ist das eine, die Wahrscheinlichkeiten selbst das andere. Ein Modell ist gut kalibriert, wenn von den Kunden, die es mit etwa 10 % bewertet, auch etwa 10 % tatsächlich reagieren.4 Die logistische Regression ist meist schon von sich aus gut kalibriert, wegen der Art, wie ihre Verlustfunktion und ihre Verknüpfungsfunktion zusammenpassen,4 aber sie driftet: Das Frühjahr dieses Jahres ist nicht das des letzten. Ich prüfe das, indem ich die vorhergesagten Wahrscheinlichkeiten in 10 Gruppen einteile und in jeder vorhergesagte mit beobachteter Reaktion vergleiche. Für die Entscheidung über die Tiefe zählt die Kalibrierung mehr als für die Rangfolge, weil die Regel der Gewinnschwelle eine absolute Wahrscheinlichkeit mit c/mc / m vergleicht.

Durchgerechnetes Beispiel: ein Modell, das ein Fünftel zu optimistisch ist

Angenommen, die zurückgehaltene Stichprobe zeigt, dass das Modell durchweg 20 % zu optimistisch ist. Die Kunden in Dezil 4, die es mit 4,0 % bewertet hat, reagieren tatsächlich mit 4,0/1,2=3,3 %4{,}0 / 1{,}2 = 3{,}3\,\%, kaum über der Gewinnschwelle von 3,2 %, und die 5,5 % von Dezil 3 werden zu 5,5/1,2=4,6 %5{,}5 / 1{,}2 = 4{,}6\,\%. Die Rangfolge bleibt gleich, aber Dezil 4 wird vom bescheidenen Verdiener zum Grenzfall, und die sichere Tiefe sind drei Dezile.

Das Ungleichgewicht der Klassen ist die andere Sorge, und sie wird meist übertrieben. Bei einer Reaktionsrate von 3,9 % sind 96 % der Zeilen Nullen. Die logistische Regression kommt damit klar, solange es absolut genug Einsen gibt, und 788 Reagierende sind für sechs Einflussgrößen reichlich. Gleich die Trainingsdaten nicht aus, indem du Nullen wegwirfst oder Einsen verdoppelst, und lies die vorhergesagten Wahrscheinlichkeiten danach nicht als echt: Das zerstört die Kalibrierung, und am Ende verschickst du bis zu einer Gewinnschwelle, die in einer erfundenen Welt berechnet wurde. Musst du aus Tempogründen Stichproben ziehen, korrigier hinterher den Achsenabschnitt. King und Zeng liefern die Korrektur: Zieh ln⁡[(1−ττ)(yˉ1−yˉ)]\ln\left[\left(\frac{1 - \tau}{\tau}\right)\left(\frac{\bar{y}}{1 - \bar{y}}\right)\right] vom Achsenabschnitt ab, wobei τ\tau der wahre Anteil der Einsen ist und yˉ\bar{y} der Anteil in deiner Stichprobe.5

Baumbasierte Modelle, besonders Gradient Boosted Trees, schlagen die logistische Regression oft um ein paar Punkte Lift, weil sie Wechselwirkungen von selbst finden. Die logistische Regression hat aber drei Vorteile, die öfter zählen als der zusätzliche Lift. Du kannst sie lesen: Die Tabelle mit den Chancenverhältnissen oben ist schon für sich ein Gespräch mit der Geschäftsführung. Sie ist auf kleinen Dateien stabil, und 20.000 Kunden mit 788 Reagierenden sind für Boosting klein. Und sie wird sanft schlechter: Wenn sich die Welt verschiebt, verliert ein logistisches Modell ein wenig, während ein Baum von der Klippe fallen kann. Meine Regel: logistisch anfangen, zwei oder drei Wechselwirkungen von Hand ergänzen, wo die Geschäftslogik sie nahelegt, und erst zu Bäumen greifen, wenn die Gewinnkurve auf der zurückgehaltenen Stichprobe zeigt, dass sich die Komplexität bezahlt macht.

Assoziationsregeln zählen Paare, eins nach dem anderen

Die Warenkorbanalyse fragt, welche Produkte zusammengehören. Der Ansatz aus dem Lehrbuch sind Assoziationsregeln.6 Für eine Regel "Weinkorb, also Käsekorb" gibt es drei Zahlen:

conf(A→B)=nABnA,lift(A→B)=conf(A→B)P(B),interest(A→B)=conf(A→B)−P(B)\text{conf}(A \to B) = \frac{n_{AB}}{n_A}, \qquad \text{lift}(A \to B) = \frac{\text{conf}(A \to B)}{P(B)}, \qquad \text{interest}(A \to B) = \text{conf}(A \to B) - P(B)

Dabei ist nAn_A die Zahl der Bestellungen mit Produkt AA, nABn_{AB} die Zahl der Bestellungen mit AA und BB, conf(A→B)\text{conf}(A \to B) die Konfidenz, also der Anteil der Bestellungen mit AA, die auch BB enthalten, und P(B)P(B) der Anteil aller Bestellungen mit BB. Der Lift teilt die Konfidenz durch diese Grundrate, also heißt ein Lift von 1, dass BB mit AA nicht öfter auftaucht als überall sonst.6 Das Interesse zieht sie stattdessen ab.7 Beide beantworten dieselbe Frage: Ist BB etwas Besonderes für Käufer von AA, oder einfach beliebt? Grundlagen: Wahrscheinlichkeit und Grundlagen: Grundraten

Das ist dieselbe Logik des gemeinsamen Auftretens, mit derselben Korrektur für Beliebtheit, wie in KI Empfehlungen in Solidus bauen.

Durchgerechnetes Beispiel: Wein und Käse bei Korbwerk

Von 14.000 Bestellungen enthalten 1.260 den Käsekorb, also ist P(Ka¨se)=1.260/14.000=9 %P(\text{Käse}) = 1.260 / 14.000 = 9\,\%. Der Weinkorb steckt in 2.000 Bestellungen, und 440 davon enthalten auch Käse.

Konfidenz: 440/2.000=22 %440 / 2.000 = 22\,\%. Lift: 0,22/0,09=2,440{,}22 / 0{,}09 = 2{,}44. Interesse: 0,22−0,09=0,130{,}22 - 0{,}09 = 0{,}13. Wer Wein kauft, legt Käse etwa zweieinhalbmal so oft dazu wie eine durchschnittliche Bestellung.

Die Schwäche ist, dass eine Regel immer nur ein Produkt auf einmal ansieht. Der Weinkorb könnte so aussehen, als würde er Käse treiben, obwohl beide in Wahrheit von Firmenkunden gekauft werden, die Geschenksets zusammenstellen, und der eigentliche Treiber ist die Art des Kontos. Zählen kann die beiden nicht auseinanderhalten.

Die logistische Regression analysiert den Warenkorb und hält den Rest fest

Die logistische Regression löst das, indem sie das Vorhandensein eines Produkts zum Ergebnis macht und alles andere im Warenkorb, plus was du über den Käufer weißt, zu Einflussgrößen:

P(cheese∣basket)=11+e−(β0+βwinexwine+βchocxchoc+βcorpxcorp+βnxn)P(\text{cheese} \mid \text{basket}) = \frac{1}{1 + e^{-(\beta_0 + \beta_{\text{wine}} x_{\text{wine}} + \beta_{\text{choc}} x_{\text{choc}} + \beta_{\text{corp}} x_{\text{corp}} + \beta_{n} x_{n})}}

Dabei ist P(cheese∣basket)P(\text{cheese} \mid \text{basket}) die Wahrscheinlichkeit, dass der Käsekorb in der Bestellung liegt, xwinex_{\text{wine}}, xchocx_{\text{choc}} und xcorpx_{\text{corp}} sind Merkmale mit 1 oder 0 für den Weinkorb, den Schokoladenkorb und einen Firmenkunden, xnx_n zählt die übrigen Artikel im Warenkorb, und jedes β\beta ist der zugehörige Koeffizient, mit β0\beta_0 als Achsenabschnitt. Grundlagen: Regression

Durchgerechnetes Beispiel: das Warenkorbmodell auf 14.000 Bestellungen

EinflussgrößeKoeffizientChancenverhältnisLesart
Achsenabschnittminus 2,55Grundchance von etwa 0,0780{,}078
Weinkorb im Warenkorb1,103,00verdreifacht die Chance auf Käse
Schokoladenkorb im Warenkorbminus 0,450,64Ersatz, keine Ergänzung
Firmenkunde0,601,82Büros stellen Sets zusammen
Übrige Artikel im Warenkorb (je Stück)0,201,22große Warenkörbe werden größer

Ein Privatkunde nur mit dem Weinkorb: Der Wert ist −2,55+1,10=−1,45-2{,}55 + 1{,}10 = -1{,}45, also p=1/(1+e1,45)=1/(1+4,26)=0,19p = 1 / (1 + e^{1{,}45}) = 1 / (1 + 4{,}26) = 0{,}19. Rund 19 %, gegenüber 1/(1+e2,55)=7,2 %1 / (1 + e^{2{,}55}) = 7{,}2\,\% für einen Privatkunden mit keinem von beiden. Ein Firmenkunde mit dem Weinkorb: −1,45+0,60=−0,85-1{,}45 + 0{,}60 = -0{,}85, also p=1/(1+e0,85)=1/(1+2,34)=0,30p = 1 / (1 + e^{0{,}85}) = 1 / (1 + 2{,}34) = 0{,}30.

Jetzt der Vergleich mit dem Zählen. Die rohe Chance auf Käse mit Wein ist 440/1.560=0,282440 / 1.560 = 0{,}282, ohne Wein 820/11.180=0,073820 / 11.180 = 0{,}073, ein rohes Chancenverhältnis von 0,282/0,073=3,850{,}282 / 0{,}073 = 3{,}85. Das Modell, das Art des Käufers und Größe des Warenkorbs festhält, sagt 3,00. Ein Teil von "Wein bedeutet Käse" ist ein verkleideter Effekt der Firmenkunden. Die erste Fassung dieses Kapitels hat das Chancenverhältnis des Modells mit dem Lift der Regel verglichen. Die beiden messen Verschiedenes, also ist der faire Vergleich das rohe Chancenverhältnis gegen das bereinigte.

Die Zeile zur Schokolade ist das, was Assoziationsregeln übersehen hätten. Schokolade und Käse ersetzen sich in diesem Shop: Die Leute nehmen einen Genusskorb. Wer sich für Schokolade entschieden hat, dem Käse zu empfehlen, ist verschenkte Fläche auf dem Bildschirm.

Schätz ein solches Modell für jedes Produkt, das du empfehlen könntest, bewerte im Checkout den aktuellen Warenkorb und zeig die zwei oder drei Produkte mit der höchsten vorhergesagten Wahrscheinlichkeit, die noch nicht drinliegen, mit einer Untergrenze, sagen wir 12 %, unter der du nichts empfiehlst. Die Technik dazu, auch wie du sie in Solidus einbaust, steht in KI Empfehlungen in Solidus bauen. Bei Hunderten von Produkten wird der Ansatz mit einem Modell pro Produkt schwer, und du wechselst zur Matrixfaktorisierung. Für 40 Körbe passt er genau.

Selbst rechnen

Für das Reaktionsmodell: eine Zeile pro Kunde zum Datum der Kampagne, mit dem Ergebnis (reagiert innerhalb des Zuordnungsfensters, meist vier bis sechs Wochen, zugeordnet über Code oder Mailadresse) und Einflussgrößen, die streng nur aus Informationen berechnet sind, die vor dem Versand vorlagen. An diesem letzten Halbsatz scheitern die meisten ersten Versuche. Für das Warenkorbmodell: eine Zeile pro Bestellung mit einem Merkmal pro Produkt.

Eine minimale Schätzung in Python mit statsmodels,8 und die Dezile mit pandas:9

import numpy as np, pandas as pd
import statsmodels.api as sm

cols = ["months_since_last", "orders_24m", "gift_buyer",
        "corporate", "clicked_last_spring", "aov_per_10"]
X = sm.add_constant(df[cols])
model = sm.Logit(df["responded"], X).fit()
print(model.summary())
odds_ratios = np.exp(model.params)

df["p_hat"] = model.predict(X)
df["decile"] = pd.qcut(df["p_hat"].rank(method="first"), 10,
                       labels=range(10, 0, -1)).astype(int)  # Dezil 1 = das beste

Ein Beispiel für den Zeitbedarf: Mit sauberen Bestelldaten dauert ein erstes Modell etwa zwei Tage, ein geprüftes mit Deziltabelle und dokumentierter Empfehlung zur Tiefe etwa zwei Wochen. Die Prüfungen, bevor du ihm traust: eine zurückgehaltene Stichprobe von 20 % bis 30 %, die die Schätzung nie berührt, eine Gewinnkurve auf dieser Stichprobe, die höchstens ein paar Punkte unter der Trainingskurve liegt, VIF Werte unter 5, jedes Vorzeichen in einem Satz für jemanden ohne Statistik erklärbar, ein Kalibrierungsplot, der sich an die Diagonale schmiegt, und eine Jagd nach Datenlecks, bei der du jede Variable mit dem genauen Datum auflistest, an dem ihr Wert bekannt wurde.

Fallstricke

Auf Reaktion optimieren statt auf Gewinn. Das oberste Dezil nach Reaktion ist nicht immer das oberste nach Marge. Geschenkkäufer reagieren gut und kaufen den Klassiker für 49 €. Firmenkunden reagieren seltener und kaufen zwölf. Schwankt die Marge stark nach Gruppe, modellier den Erwartungswert oder berechne zumindest mm pro Dezil.

Lecks aus der Zukunft. Jede Einflussgröße, die nach dem Versanddatum gemessen wurde, auch ganz unschuldig (ein Feld "Kundenstatus", das bei einer Bestellung aktualisiert wird), ergibt im Büro eine wunderschöne Gewinnkurve und draußen eine nutzlose. "Klick in der Frühjahrsmail" ist in Ordnung, wenn das letzte Frühjahr gemeint ist, und Schummelei, wenn es dieses Frühjahr meint. Sieht ein Modell zu gut aus, ist es das auch.

Das Modell in sich selbst hineinschicken. Schreibst du nur noch die obersten vier Dezile an, enthalten die Daten des nächsten Jahres nur Reaktionen aus diesen vier, und ein Modell darauf lernt nichts über die Dezile 5 bis 10. Halte eine kleine zufällige Kontrollgruppe über die ganze Datei, ein paar Hundert Menschen, die den Katalog unabhängig vom Wert bekommen. Das kostet ein wenig und hält das Modell Jahr für Jahr ehrlich. Dieselbe Logik gilt für Lookalike Audiences: Eine Ausgangsliste nur aus Menschen, die du ohnehin schon angesprochen hast, bringt der Plattform bei, mehr vom Gleichen zu finden.

Chancenverhältnisse als Verhältnisse von Wahrscheinlichkeiten lesen. Bei einer Grundrate von 3,9 % ist der Unterschied klein. Im Warenkorbmodell, bei 19 % bis 30 %, ist er es nicht. Ein Chancenverhältnis von 3 heißt nicht "dreimal so wahrscheinlich": Die 19 % des privaten Weinkäufers sind das 2,6 fache der 7,2 % Grundlinie, nicht das Dreifache.

Zusammenhang mit Ursache verwechseln. Das Warenkorbmodell sagt, dass Käse und Wein zusammen gekauft werden, nicht dass das Zeigen von Käse mehr Käse verkauft. Die Empfehlung ist eine Hypothese, und ein A/B Test im Checkout ist der Beweis.

Zu viele Variablen. Vierzig Einflussgrößen auf 788 Reagierende sind eine Überanpassung, die nur auf ihren Moment wartet. Zehn sind reichlich. Besteht das Team auf allem, nimm eine bestrafte Schätzung (Ridge oder Lasso) und halte die zurückgehaltene Stichprobe heilig.

Wie ich das für Kunden mache

Das Ergebnis ist eine bewertete Liste, eine Deziltabelle mit markierter Tiefe und ein einseitiges Memo, das sagt, wie viele Menschen angeschrieben werden, was das kostet, was es bringen sollte und wie falsch diese Schätzung sein könnte. Kein Foliensatz über maschinelles Lernen.

Es beginnt mit dem kostenlosen Workshop, in dem wir festlegen, welches Ergebnis modelliert wird (reagieren, kaufen, abwandern, in den Warenkorb legen) und wie eine gute Entscheidung aussieht. Danach kommen zwei Wochen echte Arbeit auf meine Rechnung: die Tabelle mit Merkmalen aus deinem Shop oder CRM, ein geschätztes und geprüftes Modell, die Deziltabelle, die Gewinnkurve und das Memo. Schlägt das Modell den Zufall nicht mit einem Abstand, für den sich Handeln lohnt, sage ich dir das.

Tut es das, und du willst es für jede Kampagne laufen lassen statt einmal, wird daraus ein Auftrag in Data Science: ein Bewertungsjob, der jede Nacht läuft, und eine zufällige Kontrollgruppe, die ihn ehrlich hält. Für einen eCommerce Shop geht das Warenkorbmodell direkt als Empfehlungsblock in den Shop, und das ist Arbeit an Solidus, die ich selbst mache. Deine Rohdaten bleiben deine, und die Regeln für Code und Modelle stehen in den Bedingungen für Analytics und Data Science. Die Kosten stehen auf der Preisseite.

Fragen, bevor du den nächsten Versand freigibst

  • Wo liegt die Reaktionsrate an der Gewinnschwelle für diese Kampagne, und welche Dezile liegen darüber?
  • Zeig mir die Gewinnkurve auf der zurückgehaltenen Stichprobe, nicht auf den Trainingsdaten.
  • Gibt es eine zufällige Kontrollgruppe über die ganze Datei, und wie groß ist sie?
  • Welche Variablen stecken im Modell, und an welchem Datum wurde jede gemessen?
  • Ordnen wir nach der Wahrscheinlichkeit einer Reaktion oder nach dem erwarteten Gewinn, und macht das hier einen Unterschied?
  • Zu den Empfehlungen: Welche Produktpaare ersetzen sich, und unterdrücken wir sie?

Die Serie ist inspiriert von Mike Grigsbys Buch Marketing Analytics.10 Die Erklärungen, Beispiele und Zahlen hier sind meine eigenen.

Quellen

Footnotes

  1. UCLA Office of Advanced Research Computing, FAQ: How do I interpret odds ratios in logistic regression?, OARC Stats, https://stats.oarc.ucla.edu/other/mult-pkg/faq/general/faq-how-do-i-interpret-odds-ratios-in-logistic-regression/

  2. Apple, Mail Privacy Protection and privacy, Apple Legal, https://www.apple.com/legal/privacy/data/en/mail-privacy-protection/

  3. Penn State Eberly College of Science, STAT 462 Applied Regression Analysis, 10.7 Detecting Multicollinearity Using Variance Inflation Factors, https://online.stat.psu.edu/stat462/node/180/

  4. scikit-learn developers, Probability calibration, scikit-learn user guide, 2026, https://scikit-learn.org/stable/modules/calibration.html

  5. Gary King und Langche Zeng, Logistic Regression in Rare Events Data, Political Analysis, Band 9, Heft 2, 2001, https://gking.harvard.edu/files/0s.pdf

  6. Sebastian Raschka, association_rules: association rules generation from frequent itemsets, mlxtend user guide (mit Verweis auf Agrawal, Imielinski und Swami, SIGMOD 1993, für Support und Konfidenz, und auf Brin, Motwani, Ullman und Tsur für den Lift), https://rasbt.github.io/mlxtend/user_guide/frequent_patterns/association_rules/

  7. Jure Leskovec, Anand Rajaraman und Jeff Ullman, Mining of Massive Datasets, Frequent Itemset Mining and Association Rules (Vorlesungsfolien), Stanford University, http://www.mmds.org/mmds/v2.1/ch06-assocrules.pdf

  8. statsmodels developers, statsmodels.discrete.discrete_model.Logit, statsmodels documentation, https://www.statsmodels.org/stable/generated/statsmodels.discrete.discrete_model.Logit.html

  9. pandas development team, pandas.qcut, pandas documentation, https://pandas.pydata.org/docs/reference/api/pandas.qcut.html

  10. Mike Grigsby, Marketing Analytics: A Practical Guide to Improving Consumer Insights Using Data Techniques, Kogan Page, 2022, ISBN 9781398608191, https://www.netgalley.co.uk/catalog/book/267990

Wenn du eine Kundendatei und eine Kampagne vor dir hast, oder einen Shop voller Warenkörbe, die noch niemand modelliert hat, bring die Daten in den kostenlosen Workshop mit. Wir legen fest, was modelliert wird, und dann stecke ich zwei Wochen echte Arbeit auf meine Rechnung in die Deziltabelle, die Empfehlung zur Tiefe und das Risiko drumherum.