Digitale Warenkorb-Analyse durch multiple Regression

Ursprünglich war der Einsatz von bestehenden Python-Bibliotheken zur Durchführung einer multiplen Regression auf verschiedene digitale Metriken vorgesehen. Danach hat’s aber so sehr Spaß gemacht, da habe ich die Regressionsberechnung und viele Untersuchungsmethodiken in Python einfach eigenhändig umgesetzt.

Wer sich den Python-Teil sparen, möchte kann hier zum konkreten Modellbeispiel (digitale Warenkorb-Analyse) gelangen.

Multiple Regression in Python

Bestehende (robuste) Bibliotheken machen die eigenen Methoden zwar überflüssig, aber sichere Kenntnis(se) über die berechneten Werte und ihre Zusammensetzung zu besitzen, stand über dem Komfort.

Grundsätzlich erhält man die Schätzparameter (Wir wenden die bekannte OLS-Schätzung an) durch geschickte Matrixalgebra. In Python verbleibt hier lediglich ein Einzeiler:

Für die Berechnung der Inversen wurde an dieser Stelle die Methode linalg.inv() verwendet. Alternativ hätte man auch dies eigenhändig programmieren können.

Hier wird jedoch letztendlich mit Daten gerechnet, die zuvor aufbereitet werden müssen. Wie z.B. gelangen die einzelnen Datenzeilen in eine saubere Numpy-Matrix-Struktur? Mit der Methode np.transpose() hätte man womöglich die Schleifen noch einfacher bauen können, nur dann hätte im Fließcode die Berechnung eine gefälschte Gestalt angenommen und die Lesbarkeit hätte gelitten.

Die folgenden Methoden erhalten jeweils 1 oder mehrere Arrays und erstellen daraus dimensionsgetreue Matrizen. Wie erhalten eine X-Matrix (nxk-Matrix) mit allen verfügbaren erklärenden Variablen. Wichtig: Aus diversen Gründen (Dummy-Variablen-Interpretation,…) wird zusätzlich eine Konstante (1….) aufgenommen. Natürlich müssen auch die einzelnen Werte der zu erklärenden Variable y in eine nx1-Numpy-Matrix übertragen werden. So können wir saubere Berechnungen garantieren.

createX() dient demnach rein der Datenaufbereitung zur weiteren Verwendung. Wichtig an dieser Stelle wäre noch die Erklärung der bool-Variable oneExplVar. Übergibt man der späteren OLS-Funktion lediglich eine erklärende Variable, so entspricht der Parameter variables lediglich einem Array und die len()-Funktion gibt die Mächtigkeit dieser Variable zurück. Das fangen wir ab. Zur Methode valueExtraction() kommen wir jetzt gleich im Anschluss an die verbleibende Aufbereitungsfunktion createY():

Hier ist nicht viel zu sagen. Das Array der zu erklärenden Variable y wurde in eine strukturkonforme Numpy-Matrix übersetzt.

Eine Erklärung bleibt aus: Welchen Zweck besitzt die Funktion valueExtraction(..)?

Die Speicherstruktur von Numpy-Matrizen erfordert eine besondere Schleifenstruktur. Je nach Anzahl der erklärenden Variablen (Unterscheidung zwischen lediglich einer und mehreren). Hier wird ein String zurückgegeben, der die einzelnen Datenwerte aus beliebig vielen erklärenden Variablen erzeugt. Dies macht es möglich, das Skript unabhängig von der Anzahl der gewählten erklärenden Variablen auszuführen. Wichtig abschließend ist jedoch der Fokus auf die Mächtigkeit der unterschiedlichen erklärenden Variablen! Sie muss identisch sein mit der zu erklärenden Variable. Sonst können wir den Schätzer nicht berechnen.

Abschließend verbleiben zwei Zeilen, die für weitere wichtige Untersuchungen jetzt gebraucht werden:

Jetzt können t-Werte, Varianzen, Bestimmtheitsmaß und die üblichen Bekannten berechnet werden.

Exemplarisch ist hier der Code zur Berechnung der Residualvarianz, der geschätzen Kovarianzmatrix sowie der t-Werte in halbwegs ansehnlicher Form:

Konkretes Modellbeispiel

Betrachten wir das angekündigte Modellbeispiel. Wir betrachten insgesamt 100 Beobachtungen (n=100).

Multiple Regression mit Python

Wir gehen nun von folgendem Datenmodell aus:

saleAmount_i = b_0 + b_1paypal_i + b_2gender_i + b_3ratings_i + b_4times_i + b_5age_i + u_i

 

saleAmount_i: Warenkorbgröße (in Euro)

b_0: Niveauparameter für männliche Nicht-Paypal-Bezahler (Gruppe 0)

b_0 + b_1: Niveauparameter für männliche Paypal-Bezahler (Gruppe 1)

b_0 + b_1 + b_2: Niveauparameter für weibliche Paypal-Bezahler (Gruppe 2)

b_3: Steigungsparameter für Ratings im Online-Shop (Rating ist möglich von 1-5)

b_4: Steigungsparameter für die Verweilzeit im Online-Shop (in Sekunden)

b_5: Steigungsparameter für das Alter des Nutzers

u: Keine Definitionsgleichung, daher Störterm zur Identifikation möglicher funktionaler Fehlspezifikationen und Verletzungen wichtiger Annahmen

Auswertung der OLS-Schätzung

Da wir unterschiedliche Parameter-Typen haben, wenden wir das Prinzip der Parameterheterogenität im Rahmen dieser Interpretation der Schätzkoeffizienten an:

Der Niveauparameter für männliche Nicht-Paypal-Bezahler beträgt 98,13. Im Durchschnitt hat ein männlicher Nicht-Paypal-Bezahler einen Warenkorbwert von ca. 98,13€. Die t-Statistiken von b_1 und b_2 sind sehr klein. Es gibt daher keinen signifikanten Unterschied zwischen der verwendeten Bezahlmethode (Paypal (Gruppe 1) oder kein Paypal (Gruppe 0)). Zwischen weiblichen und männlichen Paypal-Nutzer gibt es ebenfalls keinen signifikanten Unterschied (Gruppe 2). Anmerkung: Die Dummies für gender und paypal wurden gezielt so exemplarisch gebildet, dass kein signfikanter Unterschied besteht. Diese Datenreihen wurden im Sinne eines Überprüfungszwecks der Reliabilität des Skripts erstellt.

b_0: 98.1331214189313

b_1: 6.216579588764958
t-Statistik für b_1: 0.3633553929979796

b_2: -5.4418227862030335
t-Statistik für b_2: -0.40158691621234427

b_3: 8.18566653103494
t-Statistik für b_3: 1.4341590877182129

b_4: 0.3322246687816266
t-Statistik für b_4: 18.26965738230921

b_5: -5.163573237036431
t-Statistik für b_5: -4.846971970995182

Mit einer t-Statistik von 1.43 können wir einen zweiseitigen t-Test zu einem 10%-Signifikanzniveau und 94 Freiheitsgraden durchführen. Leider können wir auf diesem Niveau die H0 nicht verwerfen. Wir können demnach nicht davon ausgehen, dass b_3 von null verschieden und damit signfikanten Einfluss auf die Warenkorbgröße hat. Das macht auch durchaus Sinn: Ist es wirklich überraschend, dass abgegebene Ratings nicht signifikant für die Warenkorbgröße ist?

Die t-Statistiken von b_4 und b_5 (im Betragsstrich) sind größer als die kritischen t-Werte (sogar auf dem 1%-Signifikanzniveau!). Sie sind damit beide hoch signfikant von null verschieden. Steigt die Verweilzeit im Webshop um 1 Sekunde, dann erhöht sich der Warenkorbwert um ca. 0,33€. Steigt das Alter um ein Jahr, sinkt der Warenkorb um ca -5,16€.

Natürlich sind diese Interpretationen mit Vorsicht zu genießen. Im Anschluss an die durchgeführte Analyse sollte man sein Modell auf wichtige Annahmen überprüfen. Einige davon wären:

  • Habe ich eine Variable im Modell vernachlässigt? Liegt somit ein Endogenitätsproblem vor?
  • Handelt es sich bei meinem Datenmodell um ein lineares oder habe ich es fehlspezifiziert?
  • Sind es womöglich instabile Schätzungen durch starke Multikollinearität im Modell?
  • Habe ich das Problem der Heteroskedastizität? Autokorellation?

Residuen-Verteilung

Sinn und Zweck der OLS-Regression

Die multiple Regression kann dabei verhelfen, wichtige Marketing-Ziele (Steigerung der Verweilzeit) zu definieren. Bei signifikanten Ergebnissen sind sogar robuste Prognose-Aussagen möglich.

  Subscribe  
Benachrichtige mich zu: