Polynomial Distributed Lags: wie lange wirkt Marketing nach?

Kurz gesagt

Niveau: Profi

Das meiste Marketing wirkt über Wochen, nicht am Tag selbst, also unterschätzt eine Conversion Rate aus derselben Woche jeden langsamen Kanal.

  • Ein Distributed Lag Modell gibt jeder Woche nach der Maßnahme ein eigenes Gewicht. Die Summe ist die Gesamtwirkung, das größte Gewicht der Gipfel.
  • Freie Verzögerungen brechen unter Kollinearität zusammen, vor allem bei einem regelmäßigen Versandkalender.
  • Die Almon Restriktion legt die Gewichte auf ein Polynom niedriger Ordnung, bleibt bei gewöhnlichen Kleinsten Quadraten und liefert eine stabile Kurve.
  • Im Beispiel hat ein Newsletter seinen Gipfel eine Woche nach dem Versand, ist nach drei Wochen zu 94 % angekommen und bringt insgesamt 4,27 Bestellungen pro 1.000 Mails.
  • Die Kurve sagt, wann der nächste Versand fällig ist. Nur ein Split Test sagt, was mehr Versände mit den Abmeldungen machen.

Das meiste Marketing wirkt nicht an dem Tag, an dem du es machst, und wenn du die Wirkung nur in der Versandwoche zählst, wandert dein Budget zum schnellsten Kanal, ob dort das Geld liegt oder nicht. Ich erkläre das Distributed Lag Modell und die polynomiale Restriktion von Almon, die es auf ganz normalen Geschäftsdaten zum Laufen bringt, an 78 Wochen Newsletterversand und Bestellungen bei einem erfundenen Hamburger Shop für Geschenkkörbe, von der Lag Kurve bis zur Prüfung mit Holdout und einem Versandrhythmus. Kapitel 5 von 21 der Serie Marketing Analytics.

Der Newsletter, der weiterwirkt, wenn du ihn längst vergessen hast

Lena betreibt Korbwerk, einen erfundenen Onlineshop für Geschenkkörbe in Hamburg unter korbwerk.example. Sie verschickt einmal im Monat einen Newsletter an rund 30.000 Abonnentinnen und Abonnenten. Nach jedem Versand gibt es einen Buckel in den Bestellungen, und Lena macht etwas völlig Vernünftiges: Sie zählt die zusätzlichen Bestellungen in der Versandwoche, teilt durch die verschickten Mails und nennt das die Conversion Rate der Mail. Heraus kommt knapp eine Bestellung pro 1.000 Mails, unter 0,1 %. Nicht berauschend. Sie will den Newsletter auf einmal im Quartal zurückfahren, um die Zeit der Texterin zu sparen.

Das Problem: Der Buckel in der Versandwoche ist nur die erste Rate. Eine Kundin liest die Mail am Dienstag, erzählt ihrer Schwester vom Afternoon Tea Korb, und zehn Tage später bestellen die beiden ihn gemeinsam zum Geburtstag der Mutter. Ein Teil der Wirkung kommt in der zweiten Woche an, ein Teil in der dritten. Richtig gemessen ist der Newsletter rund 4,3 Bestellungen pro 1.000 Mails wert, mehr als das Vierfache dessen, was Lena gezählt hat, und fast vier Fünftel davon kommen nach der Woche, in der sie aufgehört hat zu zählen.

Genau das leistet ein Distributed Lag Modell. Es sagt dir, wie viel der Wirkung einer Marketingmaßnahme sofort ankommt, wie viel später und wann nichts mehr kommt. Wenn du das weißt, weißt du auch, wann der nächste Versand fällig ist. Korbwerk und jede Zahl in diesem Kapitel sind erfunden, damit ich jeden Schritt zeigen kann.

Wo dieses Kapitel in der Serie steht

Das ist Kapitel 5 von 21 meiner Serie Marketing Analytics, in Teil zwei, den Verfahren mit abhängiger Variable, bei denen ein Geschäftsergebnis (Bestellungen, Buchungen, Anfragen) durch Dinge erklärt wird, die du steuerst. Das vorige Kapitel zu Nachfrage und Preiselastizität nutzte gewöhnliche Regression, bei der Ursache und Wirkung in derselben Periode liegen. Dieses Kapitel nimmt die Zeit dazu: Die Ursache passiert in Woche 10, und die Wirkung tröpfelt über die Wochen 10 bis 15 heraus.

Das nächste Kapitel zur Poisson Regression kümmert sich um ein anderes Problem, um Ergebnisse, die Zählwerte sind und nicht negativ werden können. Später, im Kapitel zu Media Mix Modelling und Adstock, kommt die Idee der Verzögerung in anderem Gewand zurück. Die Grundlagen, die hier vorkommen, vom Mittelwert bis zur Regression, werden auf der Seite Grundlagen von Grund auf aufgebaut.

Eine einzige Zahl hat für die Wirkung einer Mail die falsche Form

Wenn du die wöchentlichen Bestellungen auf die wöchentlich verschickten Mails regressierst, bekommst du einen Koeffizienten: Bestellungen pro 1.000 Mails, in derselben Woche. Jede Bestellung, die wegen dieser Mail in einer späteren Woche kommt, wird dem zugeschrieben, was in jener Woche sonst passiert ist, oder der Basis, oder dem Rauschen. Der Koeffizient ist zu klein, und die Entscheidung geht in eine vorhersehbare Richtung schief: Du investierst zu wenig in alles mit langsamer Wirkung und zu viel in alles mit schneller.

Die Lösung ist keine klügere Einzelzahl. Die Lösung ist, zuzugeben, dass die Wirkung eine Kurve über die Zeit ist, diese Kurve zu schätzen und sie dann mit den Zahlen zusammenzufassen, auf die es ankommt: wo sie ihren Gipfel hat, wann sie abgeklungen ist und was sie zusammen ergibt.

Ein Beispiel: Lenas Newsletter im März geht an 30.000 Abonnenten. In der Versandwoche liegen die Bestellungen 28 über dem üblichen Niveau, eine Rate für dieselbe Woche sagt also 28÷30=0,9328 \div 30 = 0{,}93 Bestellungen pro 1.000 Mails. In den drei Wochen danach liegen die Bestellungen 40, 34 und 19 über normal, während sich sonst nichts geändert hat. Die Zahl für dieselbe Woche schreibt der Mail 28 Bestellungen gut. Die Kurve schreibt ihr 28+40+34+19=12128 + 40 + 34 + 19 = 121 gut, und die meisten davon würden sonst als Glück verbucht.

Das Distributed Lag Modell

Schreib die Bestellungen in Woche tt als yty_t und die verschickten Mails (in Tausend) in Woche tt als xtx_t. Ein Distributed Lag Modell sagt, dass die Bestellungen dieser Woche von den Mails dieser Woche und von den Mails der vorangegangenen LL Wochen abhängen, jede mit ihrem eigenen Gewicht:

yt=α+∑k=0Lβk xt−k+γ⊤zt+εty_t = \alpha + \sum_{k=0}^{L} \beta_k \, x_{t-k} + \gamma^\top z_t + \varepsilon_t

Dabei ist yty_t das Ergebnis in Woche tt, α\alpha die Basis (die Bestellungen, die ganz ohne Mail kämen), βk\beta_k die Wirkung von 1.000 Mails, die vor kk Wochen verschickt wurden, auf die Bestellungen dieser Woche, xt−kx_{t-k} die Zahl der Mails kk Wochen vor Woche tt, LL die Länge der Verzögerung (wie viele Wochen zurück die Wirkung reichen darf), ztz_t eine Reihe von Kontrollvariablen wie Ausgaben für bezahlte Suche, Feiertagswochen und ein Trend, γ\gamma enthält deren Koeffizienten, und εt\varepsilon_t ist der Fehler. Die Gewichte β0,β1,…,βL\beta_0, \beta_1, \dots, \beta_L sind die Lag Kurve, und um diese Kurve geht es. Es ist eine multiple Regression wie jede andere, mit verzögerten Kopien einer Variable als Eingaben. Grundlagen: Regression

Drei Kennzahlen der Kurve erledigen den größten Teil der Arbeit. Die Gesamtwirkung ist die Summe der Gewichte:

βtotal=∑k=0Lβk\beta_{\text{total}} = \sum_{k=0}^{L} \beta_k

Dabei ist βtotal\beta_{\text{total}} die Zahl der Bestellungen, die 1.000 Mails am Ende bringen, über alle Wochen, in denen sie überhaupt etwas bringen, und βk\beta_k und LL sind wie oben. Es ist eine schlichte Summe, dieselbe Rechnung, auf der auch der Mittelwert aufbaut. Grundlagen: der Mittelwert Der Gipfel der Verzögerung ist das kk mit dem größten βk\beta_k. Und die mittlere Verzögerung ist die durchschnittliche Wartezeit, gewichtet danach, wie viel Wirkung in jeder Woche ankommt:

kˉ=∑k=0Lk βk∑k=0Lβk\bar{k} = \frac{\sum_{k=0}^{L} k \, \beta_k}{\sum_{k=0}^{L} \beta_k}

Dabei ist kˉ\bar{k} die mittlere Verzögerung in Wochen, kk jede einzelne Verzögerung und βk\beta_k ihr Gewicht. Es ist ein gewichteter Mittelwert, und die Gewichte übernehmen die Rolle, die bei einem gewöhnlichen Durchschnitt die Häufigkeiten spielen. Grundlagen: der Mittelwert

Rechenbeispiel: die Kennzahlen für Lenas Kurve

Mit der Kurve, die später in diesem Kapitel geschätzt wird (0,92, 1,33, 1,13, 0,64, 0,18 und 0,07 Bestellungen pro 1.000 Mails für die Verzögerungen 0 bis 5):

βtotal=0,92+1,33+1,13+0,64+0,18+0,07=4,27\beta_{\text{total}} = 0{,}92 + 1{,}33 + 1{,}13 + 0{,}64 + 0{,}18 + 0{,}07 = 4{,}27

Die Summe, βtotal\beta_{\text{total}}, beträgt 4,27 Bestellungen pro 1.000 Mails. Der Gipfel liegt bei Verzögerung 1, wo β1=1,33\beta_1 = 1{,}33 das größte Gewicht ist. Für die mittlere Verzögerung multiplizierst du jedes Gewicht mit seiner Verzögerung: 0+1,33+2,26+1,92+0,72+0,35=6,580 + 1{,}33 + 2{,}26 + 1{,}92 + 0{,}72 + 0{,}35 = 6{,}58. Dann ist

kˉ=6,584,27=1,54\bar{k} = \frac{6{,}58}{4{,}27} = 1{,}54

und kˉ\bar{k}, die durchschnittliche Zeit zwischen Versand und Bestellung, liegt bei rund anderthalb Wochen.

Warum freie Verzögerungen auseinanderfallen

Der naheliegende Weg ist, xt,xt−1,…,xt−Lx_t, x_{t-1}, \dots, x_{t-L} in eine gewöhnliche Regression zu stecken und die Koeffizienten abzulesen. Das kommt dabei heraus, auf den 78 Wochen von Korbwerk, mit fünf Verzögerungen. Die Zahlen sind erfunden, aber das Muster ist das, was du auf echten Daten siehst.

Verzögerung kkFreies βk\beta_kStandardfehlerLiest sich als
01,310,62plausibel
10,420,88zu niedrig, verrauscht
22,050,91zu hoch
3minus 0,660,87Mails vernichten Bestellungen?
41,170,83ein zweiter Gipfel?
5minus 0,080,61wahrscheinlich null
Summe4,211,38seltsamerweise in Ordnung

Zwei Dinge sind schiefgegangen. Erstens gibt es zu viele Parameter: sechs Gewichte plus Kontrollvariablen aus 73 nutzbaren Wochen (78 minus die fünf, die durch die Verzögerungen verloren gehen). Zweitens, und schlimmer, sind die verzögerten Variablen fast Kopien voneinander. Korbwerk verschickt in einem festen Monatsrhythmus, also folgt auf eine Versandwoche mit großer Regelmäßigkeit vier oder fünf Wochen später die nächste, und Verzögerung 0 und Verzögerung 4 sind für die Regression kaum noch auseinanderzuhalten. Das ist Kollinearität, und ihre Symptome sind genau diese: einzelne Koeffizienten, die schwanken und das Vorzeichen wechseln, breite Standardfehler und eine Summe, die seltsam stabil ist, weil sich die Fehler aufheben.1 Die Summe stimmt, und jede einzelne Zahl ist unbrauchbar.

Darin steckt eine Ironie, auf die ich jeden Kunden mit starrem Versandkalender hinweise: Ein vollkommen regelmäßiger Rhythmus ist leicht zu fahren und fast unmöglich zu messen. Ein bisschen Unregelmäßigkeit bei den Versandterminen ist ein Geschenk für alle, die sie später auswerten müssen.

Der Trick von Almon: Die Gewichte folgen einer Kurve

Die Idee von Shirley Almon, 1965 veröffentlicht, ist einfach und bis heute die sauberste Lösung, die ich kenne.2 Statt sechs freie Gewichte zu schätzen, nimmst du an, dass die Gewichte auf einem glatten Polynom niedriger Ordnung in der Verzögerung liegen:

βk=a0+a1k+a2k2+⋯+apkp=∑j=0pajkj\beta_k = a_0 + a_1 k + a_2 k^2 + \dots + a_p k^p = \sum_{j=0}^{p} a_j k^j

Dabei ist βk\beta_k das Gewicht bei Verzögerung kk (in Wochen), pp der Grad des Polynoms (in der Praxis 2 oder 3), und die aja_j sind die Koeffizienten des Polynoms. Statt L+1L+1 Gewichten schätzt du p+1p+1 Koeffizienten und gewinnst die Gewichte daraus zurück. Ein quadratisches Polynom kann einen Buckel beschreiben. Ein kubisches kann einen schnellen Anstieg, einen Buckel und einen langen Ausläufer beschreiben, die Form, die die meisten Marketingwirkungen haben. Grundlagen: Regression

Der schlaue Teil: Es bleibt gewöhnliche Kleinste Quadrate Schätzung. Setz das Polynom in das Lag Modell ein und vertausch die Reihenfolge der Summen:

yt=α+∑j=0paj(∑k=0Lkj xt−k)+γ⊤zt+εt=α+∑j=0paj wjt+γ⊤zt+εty_t = \alpha + \sum_{j=0}^{p} a_j \left( \sum_{k=0}^{L} k^j \, x_{t-k} \right) + \gamma^\top z_t + \varepsilon_t = \alpha + \sum_{j=0}^{p} a_j \, w_{jt} + \gamma^\top z_t + \varepsilon_t

Jedes wjt=∑kkjxt−kw_{jt} = \sum_{k} k^j x_{t-k} ist eine konstruierte Variable: w0tw_{0t} ist die schlichte Summe der Mails der letzten L+1L+1 Wochen, w1tw_{1t} dieselbe Summe, bei der jede Woche mit ihrer Verzögerung multipliziert wird, w2tw_{2t} mit dem Quadrat der Verzögerung, und so weiter. Die übrigen Symbole (α\alpha, aja_j, γ\gamma, ztz_t, εt\varepsilon_t) sind wie vorher. Du baust diese Spalten in einer Tabellenkalkulation oder mit ein paar Zeilen Code, regressierst yty_t auf sie und die Kontrollvariablen, und die aja_j fallen heraus. Dann ist jedes βk\beta_k das Polynom, ausgewertet bei kk.3 Grundlagen: Regression

Was du dafür bekommst, ist Stabilität: Sechs Gewichte teilen sich jetzt vier Parameter, sie können also nicht von einer Verzögerung zur nächsten das Vorzeichen wechseln. Was du dafür zahlst, ist eine Annahme, nämlich dass die wahre Kurve glatt ist. Für Mails, Kataloge und die meiste Werbung ist das eine gute Annahme. Für einen Flash Sale mit harter Frist nicht, und bei den Stolperfallen komme ich darauf zurück.

Rechenbeispiel: eine Almon Spalte bauen

Nimm Woche 30. Die verschickten Mails (in Tausend) in den Wochen 30 zurück bis 25 waren 0, 0, 30, 0, 0, 0, also hat nur Verzögerung 2 einen Versand (x28=30x_{28} = 30). Die vier Spalten für Woche 30 sind:

w0,30=20×30=30,w1,30=21×30=60,w2,30=22×30=120,w3,30=23×30=240w_{0,30} = 2^0 \times 30 = 30, \quad w_{1,30} = 2^1 \times 30 = 60, \quad w_{2,30} = 2^2 \times 30 = 120, \quad w_{3,30} = 2^3 \times 30 = 240

Jedes wj,30w_{j,30} sind die verzögerten Mails, gewichtet mit der Verzögerung hoch jj. Ein Versand vor zwei Wochen wird zu vier Zahlen, die der Regression sagen, wie viel verschickt wurde und wie lange es her ist. Ein Versand in Woche 29 ergäbe stattdessen 30, 30, 30 und 30, weil 1j=11^j = 1 ist, und die Regression kann diese beiden Wochen auseinanderhalten.

Länge der Verzögerung und Grad wählen

Zwei Entscheidungen, und keine davon sollte man treffen, indem man nur auf p Werte starrt.

Länge der Verzögerung LL. Fang großzügig an. Wenn du glaubst, dass die Wirkung nach vier Wochen weg ist, schätz mit acht. Schau dir die Gewichte am Ende an: Wenn β6\beta_6, β7\beta_7 und β8\beta_8 nicht von null zu unterscheiden sind und die Kurve flach geworden ist, kürz bis dahin, wo sie abgestorben ist, und schätz neu. Vergleich die Anpassungen mit einem Informationskriterium wie AIC oder BIC, die gute Anpassung belohnen, aber Parameter bestrafen, und nimm das kürzeste LL, das nicht deutlich schlechter ist. Ein zu kurzes LL ist der teure Fehler: Die späte Wirkung wird stillschweigend in die Basis geschoben, und die Summe wird unterschätzt.

Grad pp. Schätz Grad 2 und Grad 3 und vergleich. Wenn das a3a_3 des kubischen Modells klar von null verschieden ist und die Kurve sichtbar anders aussieht, behalt es. Wenn nicht, reicht das quadratische. Über 3 gehe ich bei wöchentlichen Marketingdaten nur sehr selten, denn ein Polynom vierten Grades auf 78 Wochen passt sich an Rauschen an.

Teste auch die Einschränkung selbst. Das Almon Modell legt den freien Verzögerungen L−pL - p lineare Restriktionen auf (hier 5−3=25 - 3 = 2), also sagt dir ein F Test zwischen den beiden verschachtelten Modellen, ob das Polynom zu starr ist. Wenn er auf dem Niveau von 1 % ablehnt, schau dir die Residuen an, bevor du einem der beiden Modelle glaubst. Grundlagen: Hypothesentests

Restriktionen an den Endpunkten, die das Gewicht direkt hinter der letzten Verzögerung oder direkt vor Verzögerung 0 auf null zwingen, gibt es, und manchmal sind sie sinnvoll.3 Den fernen Endpunkt nutze ich, wenn der Ausläufer klar bei null liegt. Das nahe Ende zwinge ich nie, denn eine sofortige Wirkung gibt es bei Mails wirklich.

Die Lag Kurve von Korbwerk, Woche für Woche

Dieselben 78 Wochen, dieselben Kontrollvariablen, L=5L = 5 und p=3p = 3, gewählt nach dem Rezept oben. Die geschätzten Koeffizienten des Polynoms sind a0=0,92a_0 = 0{,}92, a1=0,83a_1 = 0{,}83, a2=−0,47a_2 = -0{,}47 und a3=0,054a_3 = 0{,}054. Wertet man das kubische Polynom bei jeder Verzögerung aus, ergibt sich die Kurve.

Rechenbeispiel: von den Koeffizienten zu den Gewichten

Bei Verzögerung 2:

β2=0,92+0,83×2−0,47×4+0,054×8=0,92+1,66−1,88+0,432=1,13\beta_2 = 0{,}92 + 0{,}83 \times 2 - 0{,}47 \times 4 + 0{,}054 \times 8 = 0{,}92 + 1{,}66 - 1{,}88 + 0{,}432 = 1{,}13

Dabei ist β2\beta_2 die Wirkung zwei Wochen nach dem Versand, gebaut aus den vier aja_j mal 2j2^j. Dieselbe Summe bei jeder Verzögerung füllt die Tabelle.

Verzögerung kk (Wochen nach Versand)Almon βk\beta_k (Bestellungen pro 1.000 Mails)StandardfehlerKumuliertAnteil an der Summe
00,920,210,9222 %
11,330,192,2553 %
21,130,173,3879 %
30,640,164,0294 %
40,180,154,2098 %
50,070,194,27100 %
Summe4,270,54

Zeile für Zeile gelesen. Verzögerung 0: In der Versandwoche bringen 1.000 Mails 0,92 zusätzliche Bestellungen, rund ein Fünftel von allem, was sie je bringen werden. Das ist die Zahl, die Lena gemessen hat, und sie hat sie richtig gemessen. Es war nur die falsche Zahl. Verzögerung 1: Die Woche danach ist der Gipfel, 1,33 Bestellungen pro 1.000, und an ihrem Ende ist gut die Hälfte der Wirkung angekommen. Verzögerung 2 ist mit 1,13 noch kräftig, und an ihrem Ende sind vier Fünftel da. Verzögerung 3 ist mit 0,64 die letzte Woche, die kaufmännisch zählt. Die Verzögerungen 4 und 5 sind klein, mit Standardfehlern ungefähr so groß wie die Schätzwerte, also lese ich sie als nahe null.

Die Summe beträgt 4,27 Bestellungen pro 1.000 Mails mit einem Standardfehler von 0,54, also ein Intervall von 95 % von 4,27±1,96×0,544{,}27 \pm 1{,}96 \times 0{,}54, rund 3,2 bis 5,3. Grundlagen: Konfidenzintervalle Bei einem Versand an 30.000 Adressen sind das rund 30×4,27=12830 \times 4{,}27 = 128 Bestellungen pro Newsletter, irgendwo zwischen 96 und 160.

Vergleich das mit der freien Tabelle: dieselbe Summe im Rahmen des Rauschens, aber jetzt lässt sich die Form lesen. Ein Gipfel nach einer Woche, kaufmännisch tot nach drei, nichts mehr nach fünf.

Lag Kurve von KorbwerkZusätzliche Bestellungen pro 1.000 Mails in jeder Woche nach einem Newsletter: 0,92 in der Versandwoche, 1,33 eine Woche später, 1,13 nach zwei Wochen, 0,64 nach drei, dann 0,18 und 0,07.Bestellungen pro 1.000 Mails nach Wochen seit dem Versand00,511,520,9Woche 01,3Woche 11,1Woche 20,6Woche 30,2Woche 40,1Woche 5Bestellungen pro 1.000 MailsWochen nach dem Versand

Die waagerechte Achse zeigt die Wochen, seit der Newsletter rausgegangen ist, mit Woche 0 als Versandwoche. Die senkrechte Achse zeigt die zusätzlichen Bestellungen pro 1.000 Mails in dieser Woche. Die Botschaft: Der Gipfel liegt eine Woche nach dem Versand, nicht am Versandtag, und nach Woche 4 kommt fast nichts mehr.

Und die kumulierte Sicht, die für die Entscheidung über den Rhythmus den Ausschlag gibt:

Kumulierter Anteil der Wirkung einer MailDer Anteil der Gesamtwirkung eines Newsletters, der am Ende jeder Woche angekommen ist: 22 % in der Versandwoche, 53 % nach einer Woche, 79 % nach zwei, 94 % nach drei, 98 % nach vier und 100 % nach fünf.Angekommener Anteil der Gesamtwirkung0 %50 %100 %150 %200 %Woche 0Woche 1Woche 2Woche 3Woche 4Woche 5Kumulierter Anteil in %% der GesamtwirkungWochen nach dem Versand

Die waagerechte Achse zeigt wieder die Wochen seit dem Versand. Die senkrechte Achse zeigt den Anteil der Gesamtwirkung des Newsletters, der am Ende dieser Woche angekommen ist. Die Botschaft: Am Ende von Woche 3 sind 94 % der Wirkung da, und die Wochen 4 und 5 bringen die letzten 6 %.

Eine Warnung zu Summen. 4,27 pro 1.000 ist die durchschnittliche Wirkung bei den Mengen und Frequenzen, die Korbwerk tatsächlich gefahren hat. Es ist kein Versprechen für den 18. Versand im Jahr, wenn der Rhythmus steigt. Das ist eine Frage am Rand, und marginaler ROI ist nicht durchschnittlicher ROI. Der nächste Abschnitt kommt darauf zurück. Grundlagen: marginal gegen durchschnittlich

Von der Lag Kurve zum Versandrhythmus

Jetzt die Entscheidung, vor der Lena wirklich steht. Im Monatskalender kommt alle vier bis fünf Wochen ein Versand. Bis dahin sind 94 % bis 98 % des vorigen Versands angekommen, und in den letzten ein, zwei Wochen bringt die Liste aus Mails fast nichts. Das ist die Lücke.

Bei einem Rhythmus von drei Wochen geht der nächste Versand raus, wenn der vorige 79 % geliefert hat, und sein restliches Fünftel überlappt mit dem Anfang des neuen. Bei zwei Wochen sind erst 53 % da, wenn der nächste Versand kommt, und fast die Hälfte überlappt, eine frische Nachricht landet also bei Leuten, die auf die letzte noch gar nicht fertig reagiert haben. Drei Wochen schließen die leeren Wochen und halten die Überlappung klein.

Rechenbeispiel: was ein Versand alle drei Wochen bringen könnte

Aus zwölf Versänden im Jahr werden 52÷3=17,352 \div 3 = 17{,}3, sagen wir 17. Wenn jeder Versand seine volle Wirkung von rund 128 Bestellungen behielte, brächte die Mail 17×128=2.17617 \times 128 = 2{.}176 Bestellungen im Jahr statt 12×128=1.53612 \times 128 = 1{.}536, also 640 mehr.

Die vollen 640 würde ich nicht glauben, und Lena sollte es auch nicht. Das Modell wurde auf monatlichen Versänden geschätzt und weiß nichts darüber, was bei höherer Frequenz mit Öffnungen und Abmeldungen passiert. Korbwerk hat für das Sortiment zum Muttertag einmal zweimal im Abstand von zwei Wochen verschickt, in den Wochen 17 und 19, und die Abmelderate beim zweiten Versand lag ungefähr beim Doppelten des Üblichen. Das ist eine Beobachtung, kein Beleg, aber es ist eine Warnung.

Das ehrliche Memo nennt deshalb eine Spanne. Das untere Ende nimmt an, dass jeder der fünf zusätzlichen Versände nur 60 % der heutigen Wirkung bringt: 5×128×0,6=3845 \times 128 \times 0{,}6 = 384. Der erwartete Zugewinn liegt bei rund 380 bis 640 Bestellungen im Jahr, und das Risiko sitzt auf der Seite der Abmeldungen.

Und es sagt, wie man es herausfindet: Teil die Liste zufällig, die Hälfte bekommt alle drei Wochen eine Mail, die andere Hälfte monatlich, lass das zwölf Wochen laufen und vergleich Bestellungen, Abmeldungen und Umsatz. Der Split Test ist das richtige Werkzeug für den Teil, den das Modell nicht sehen kann, und ich habe einen kompletten Leitfaden zu Testmethoden im Marketing geschrieben, falls du die Details des Designs willst.

Warum nicht alle zwei Wochen? Weil die Hälfte der Wirkung noch ankommt, wenn der nächste Versand rausgeht, und weil der einzige Hinweis zur Frequenz in die falsche Richtung zeigt. Bei drei Wochen sind sich die Kurve, die Belege und der Kalender der Texterin einig.

Wo Adstock hineinpasst

Wenn dir Adstock im Media Mix Modelling schon begegnet ist, kennst du einen Distributed Lag mit sehr strenger Form. Klassischer Adstock nimmt an, dass die Wirkung geometrisch abnimmt, jede Woche um denselben Anteil:

βk=β0 λk\beta_k = \beta_0 \, \lambda^k

Dabei ist βk\beta_k die Wirkung bei Verzögerung kk, β0\beta_0 die Wirkung in der Woche des Kontakts und λ\lambda die Erhaltungsrate, eine Zahl zwischen 0 und 1, die sagt, welcher Anteil der Wirkung dieser Woche in die nächste hinübergeht. Es ist Zinseszins rückwärts, ein gleichmäßiger Zerfall statt eines gleichmäßigen Wachstums. Grundlagen: Zinseszins

Ein einziger Parameter für die ganze Kurve ist sparsam, wenn du zwölf Kanäle und drei Jahre Wochen hast, und falsch, sobald der Gipfel nicht bei Verzögerung 0 liegt. Geometrischer Adstock nimmt an, dass die Wirkung in derselben Periode ihren Gipfel hat wie der Kontakt.4 Der Gipfel bei Korbwerk liegt bei Verzögerung 1, ein geometrischer Zerfall würde also zu viel Gewicht auf die Versandwoche legen und zu wenig auf die zwei Wochen danach.

Forschende bei Google haben genau dafür einen verzögerten Adstock vorgeschlagen, mit Gewichten, die zu einem Gipfel ansteigen und dann fallen:4

w(l)=α(l−θ)2w(l) = \alpha^{(l - \theta)^2}

Dabei ist w(l)w(l) das Gewicht bei Verzögerung ll, α\alpha eine Erhaltungsrate zwischen 0 und 1 und θ\theta die Verzögerung, bei der die Wirkung ihren Gipfel hat. Die Kurve hat die Glockenform einer Normalverteilung mit Zentrum bei θ\theta. Grundlagen: Verteilungen Das Almon Polynom ist der beweglichere Verwandte: wenige Parameter, jede glatte Form, geschätzt mit schlichten Kleinsten Quadraten.

Rechenbeispiel: geometrischer Adstock gegen Lenas Kurve

Leg einen geometrischen Zerfall durch die Versandwoche, β0=0,92\beta_0 = 0{,}92, mit λ=0,5\lambda = 0{,}5. Die Gewichte, die daraus folgen, sind 0,920{,}92, 0,92×0,5=0,460{,}92 \times 0{,}5 = 0{,}46, 0,92×0,25=0,230{,}92 \times 0{,}25 = 0{,}23 und so weiter. Bei Verzögerung 1 sagt das 0,46, wo die Almon Kurve 1,33 sagt. Kein Wert von λ\lambda unter 1 kann Verzögerung 1 größer machen als Verzögerung 0, die geometrische Form kann Lenas Buckel also nie zeichnen.

So rechnest du es selbst

Die Daten, die du brauchst: eine Zeile pro Woche, mindestens 60 Wochen und besser 100 oder mehr, mit dem Ergebnis (Bestellungen, Anfragen, Buchungen), der Marketingmaßnahme in einer sinnvollen Einheit (Tausend Mails, Katalogexemplare, Euro Budget) und den Kontrollvariablen, die das Ergebnis ebenfalls bewegen: Ausgaben für bezahlte Suche, Preisänderungen, Markierungen für Feiertage und Schulferien, ein linearer Trend, vielleicht eine Markierung für einen Launch. Wöchentlich ist für Mails die richtige Körnung. Täglich ist zu verrauscht, und monatlich versteckt die Kurve vollständig.

Die Schritte, so wie ich sie gehe:

Eine Almon Lag Kurve schätzenDie Wochentabelle bauen, die Verzögerungen 0 bis L der Versände bauen, die Almon Spalten bauen, Kleinste Quadrate mit den Kontrollvariablen rechnen und die Gewichte der Verzögerungen zurückgewinnen. Wenn die Gewichte am Ende nicht nahe null liegen, L erhöhen und neu schätzen. Dann ein kubisches mit einem quadratischen Polynom vergleichen, den besseren Grad behalten, einen Holdout von 12 Wochen vorhersagen und Gesamtwirkung, Gipfel, mittlere Verzögerung und das Memo zum Rhythmus aufschreiben.Wochentabelle: Ergebnis, Versände,KontrollvariablenDie Verzögerungen 0 bis L der VersändebauenDie Almon Spalten w0 bis wp bauenKleinste Quadrate auf die w Spaltenplus KontrollvariablenDie Gewichte aus den a KoeffizientenzurückgewinnenGewichte am Ende nahe null?neinL erhöhen und neu schätzenjaKubisch klar besser als quadratisch?Den besseren Grad behaltenDie letzten 12 Wochen als HoldoutvorhersagenGesamtwirkung, Gipfel, mittlereVerzögerung und das Memo zum Rhythmus

Das Diagramm läuft von der Wochentabelle bis zum Memo. Die einzige Schleife ist die Prüfung des Ausläufers: Wenn die letzten Gewichte nicht nahe null liegen, ist die Verzögerung zu kurz, also verlängerst du sie und fängst bei den Verzögerungen wieder an. Die meiste Zeit fließt in die Wochentabelle und die Kontrollvariablen, nicht in die Regression.

In Python mit statsmodels ist es kurz:

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

L, p = 5, 3                                  # Länge der Verzögerung, Grad des Polynoms
x = df["emails_k"]                           # verschickte Mails pro Woche, in Tausend
for j in range(p + 1):                       # Almon Spalten w_j = sum_k k^j x_{t-k}
    df[f"w{j}"] = sum((k ** j) * x.shift(k) for k in range(L + 1))
cols = [f"w{j}" for j in range(p + 1)] + ["paid_search", "holiday", "trend"]
X = sm.add_constant(df[cols])
fit = sm.OLS(df["orders"], X, missing="drop").fit(cov_type="HAC", cov_kwds={"maxlags": 4})
a = fit.params[[f"w{j}" for j in range(p + 1)]].to_numpy()
beta = np.array([sum(a[j] * k ** j for j in range(p + 1)) for k in range(L + 1)])
print(np.round(beta, 2), "total:", round(beta.sum(), 2))

Die HAC Standardfehler (robust gegen Heteroskedastizität und Autokorrelation) sind wichtig. Wöchentliche Residuen sind autokorreliert, und die Standardfehler der schlichten Kleinsten Quadrate schmeicheln dir.5 Prüf die Autokorrelation der Residuen. Wenn sie stark ist, nimm ein verzögertes Ergebnis dazu oder modellier die Fehler, und betrachte das Intervall der Summe mit mehr Misstrauen.

Rechenbeispiel: der Holdout

Bevor du der Kurve traust, halt Daten zurück. Schätz auf den ersten 66 Wochen, sag die letzten 12 vorher und vergleich:

WocheMails (Tausend)Tatsächliche BestellungenPrognoseFehler
6731101956 %
680981046 %
69091943 %
70086807 %
71064686 %
722997925 %
730931008 %
74099936 %
75072777 %
763090956 %
7701081035 %
78089946 %

Jeder Fehler ist die Abweichung als Anteil des tatsächlichen Werts. Woche 67 zum Beispiel ist (101−95)÷101=5,9 %(101 - 95) \div 101 = 5{,}9\,\%. Der mittlere absolute prozentuale Fehler mittelt diese zwölf Abweichungen:

MAPE=1n∑t=1n∣At−FtAt∣×100\text{MAPE} = \frac{1}{n} \sum_{t=1}^{n} \left| \frac{A_t - F_t}{A_t} \right| \times 100

Dabei ist nn die Zahl der Holdout Wochen (12), AtA_t die tatsächlichen Bestellungen in Woche tt und FtF_t die Prognose. Grundlagen: Prozente Für diese Tabelle liegt er bei rund 6 %, gegen 14 % für eine saisonale Basis, die Mails ignoriert.

Wichtiger ist die Form. Die drei höchsten Prognosen sind genau die Wochen nach einem Versand (68, 73 und 77), und bei den tatsächlichen Zahlen ist Woche 77 die höchste der zwölf. Woche 71, vier Wochen nach einem Versand, ist in beiden die niedrigste. Das Modell trifft das Timing, und nach dem Timing wirst du handeln.

Wie lange dauert es? Mit einer sauberen Wochentabelle einen Nachmittag. Diese Tabelle aus einem Export der Mailplattform, einem Export der Webanalyse und einer Tabelle der Buchhaltung zu bauen und sich zu einigen, was als Bestellung zählt, dauert eine Woche.

Stolperfallen

Ein regelmäßiger Rhythmus macht die Verzögerungen kollinear. Das ist der häufigste Grund, warum das freie Modell scheitert und das Almon Modell unbemerkt falsch spezifiziert ist: Wenn du immer am ersten Dienstag verschickst, sind Verzögerung 0 und Verzögerung 4 oder 5 fast dieselbe Variable. Verschieb den Versandtermin ab und zu um eine Woche.

Glätte ist eine Annahme. Ein Polynom kann keine Klippe zeichnen. Ein Flash Sale, der am Sonntag endet, hat eine Wirkung, die sechs Tage lang groß ist und am Montag null, und ein kubisches Polynom verschmiert sie in die folgende Woche und erfindet einen Ausläufer, den es nicht gibt. Für Aktionen mit harter Frist nimm kurze freie Verzögerungen auf Tagesbasis, oder modellier die Frist direkt.

In der Woche hat sich noch etwas anderes geändert. Angenommen, die stärkste Bestellwoche von Korbwerk in der Stichprobe war keine Mailwoche, sondern die Woche, in der ein Foodmagazin die Körbe besprochen hat. Wenn die Besprechung nicht in den Kontrollvariablen steht, erklärt das Modell sie mit der Mail, die gerade in der Nähe war, und die Kurve bekommt einen Phantombuckel. Führ ein Protokoll über alles, was passiert ist, und nimm die großen Ereignisse als Markierungen auf.

Umgekehrtes Timing. Marketer verschicken, wenn sie Nachfrage erwarten: vor Weihnachten, vor dem Muttertag, nach einem Launch. Wenn die Versände auf Bestellungen getimt sind, die ohnehin gekommen wären, schreibt das Lag Modell sie der Mail gut. Saisonale Kontrollvariablen helfen, ein ehrlicher Holdout hilft mehr, und ein Test mit zufälligem Versandzeitpunkt klärt es.

Wochengrenzen. Ein Versand am Donnerstag legt drei Tage von Verzögerung 0 in die Versandwoche und vier in die nächste, ein Teil eines "Gipfels bei Verzögerung 1" ist also ein Kalendereffekt. Wenn du an einem festen Wochentag verschickst, lass deine Analysewochen an diesem Wochentag beginnen. Das klingt pedantisch. Es verschiebt den Gipfel.

Wie ich das für Kunden mache

Das Ergebnis ist eine Lag Kurve, nach der du handeln kannst, kein Ausdruck einer Regression. Ich brauche einen wöchentlichen Export aus deinem Mail oder Kampagnenwerkzeug (Versände, Öffnungen, Abmeldungen), das Ergebnis aus der Datenbank deines Shops oder Produkts (Bestellungen, Testzugänge, Anfragen) und alles, wofür du sonst Woche für Woche Geld ausgegeben hast, dazu einen Kalender mit Launches, Preisänderungen und allem Ungewöhnlichen. Sechzig Wochen sind die Untergrenze. Wenn du weniger hast, sage ich das, und wir reden darüber, was sich daraus ehrlich lernen lässt.

Es beginnt mit dem kostenlosen Workshop, in dem wir die Frage festlegen (bei Lena wäre es "wie oft sollten wir verschicken?"), das Ergebnis, das zählt, und wo die Daten liegen. Dann mache ich zwei Wochen echte Arbeit, bevor du dich zu irgendetwas verpflichtest: die Wochentabelle, das Modell, den Holdout und einen ersten Entwurf der Kurve. Wenn die Daten keine Antwort tragen, hörst du das klar und deutlich.

Was du bekommst, ist ein einseitiges Entscheidungsmemo mit einer Zahl und einem Risiko (im Beispiel 4,27 Bestellungen pro 1.000 Mails mit Intervall, die Empfehlung für drei Wochen, der erwartete Zugewinn und das Risiko bei den Abmeldungen), das geschätzte Modell als Notebook, das dir gehört und das du jedes Quartal neu laufen lassen kannst, und ein kleines Dashboard, das eine Frage beantwortet: wie viele der Bestellungen des letzten Monats hat die Mail gebracht, und wann. Den Split Test aufzusetzen und auszuwerten gehört zu meiner Arbeit im Performance Marketing, die Modellierung gehört zu Data Science. Die Honorare stehen auf der Preisseite.

Fragen an alle, die dein Marketing messen

  • Wie viele Wochen nach einem Versand zählst du seine Wirkung noch mit, und warum genau so viele?
  • Kannst du mir für unsere letzten zwölf Kampagnen die Lag Kurve zeigen, nicht nur eine Conversion Rate?
  • Welche Kontrollvariablen stecken im Modell, und ist die Besprechung im Magazin aus dem März mit drin?
  • Hast du das letzte Quartal zurückgehalten und vorhergesagt, bevor du mir gesagt hast, dass das Modell funktioniert?
  • Wie groß ist das Konfidenzintervall der Gesamtwirkung, und würde sich die Entscheidung am unteren Ende ändern?
  • Ist unser Versandkalender so regelmäßig, dass sich die Verzögerungen nicht trennen lassen, und sollten wir ihn variieren?
  • Berücksichtigt die Empfehlung zum Rhythmus Ermüdung und Abmeldungen, oder nur die Kurve?

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

Footnotes

  1. Dave Giles, Explaining the Almon distributed lag model, Econometrics Beat, 6. Januar 2017, https://davegiles.blogspot.com/2017/01/explaining-almon-distributed-lag-model.html

  2. Shirley Almon, The Distributed Lag Between Capital Appropriations and Expenditures, Econometrica, Band 33, Heft 1, Seiten 178 bis 196, Januar 1965, https://www.econometricsociety.org/publications/econometrica/1965/01/01/distributed-lag-between-capital-appropriations-and-expenditures

  3. Kuan-Pin Lin, Topic 10: Distributed lag models (polynomial lag, the constructed Z variables and the end point restrictions), EC 570/571 Econometrics, Portland State University, https://web.pdx.edu/~crkl/ec571/lecture10.htm

  4. Yuxue Jin, Yueqing Wang, Yunting Sun, David Chan und Jim Koehler, Bayesian Methods for Media Mix Modeling with Carryover and Shape Effects, Google Inc., 2017, Abschnitt 2.1, https://research.google/pubs/bayesian-methods-for-media-mix-modeling-with-carryover-and-shape-effects/

  5. statsmodels Entwickler, RegressionResults.get_robustcov_results, statsmodels Dokumentation, https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.RegressionResults.get_robustcov_results.html

  6. 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 ein Jahr oder mehr an wöchentlichen Versänden und Bestellungen hast und die Lag Kurve dahinter nie gesehen hast, bring beide Exporte in den kostenlosen Workshop mit, und wir klären, was sie dir ehrlich sagen können. Danach gehen die ersten zwei Wochen echter Arbeit auf meine Rechnung, mit einer Kurve, einer Zahl mit Fehlerspanne und einem Rhythmus, den du verteidigen kannst.