Greifen Sie nur zu und schneiden sich eine Scheibe ab

0

Big Data

 Beim Predictive Modellig erstrebt man gute (d.h. möglichst trennscharfe) Risiko/Chancen Scores mittels “des besten Modells”.  Dieses wendet man auf neue Daten an, um ausgewählten Risikoklassen bestimmte Maßnahmen zukommen zu lassen. In dieser Standardsituation kommt eine große Auswahl an Machine Learning und Data Mining Verfahren für die Modellierung zur Anwendung.

In der Statistik hingegen ist man mehr an den Modell-Treibern einer Ursache-Wirkungsbeziehung interessiert, das heißt man sucht nach statistisch signifikanten Aussagen über Versuchs- und Messreihen ob z.B. eine bestimmte medizinische Therapie zur Heilung einer Krankheit führt. Für diese analytische Fragestellung wäre man mit einem Entscheidungsbaum oder einem logistischen Regressionsmodell besser bedient.

In einigen Fällen hat man eine leicht modifizierte Fragestellung des zweiten Falls: Man möchte die Treiber identifizieren und Ihre quantitativen Effekte schätzen, weiß aber auch, dass diese Effekte nur positiv aber nie negativ sein können. Das entspricht einer logistischen Regression, bei der die Koeffizienten aber nicht negativ sein können, sondern nur positiv. Für die Lineare Regression gibt es zu diesem Zwecke mehrere SAS Prozeduren, die Nebenbedingungen für die Regressionskoeffizienten ermöglichen. Für die Logistische Regression ist dies leider nicht direkt in der PROC LOGISIC möglich, weil die Maximum Likelihood Funktion nichtlinear ist, und somit in der Lösung unangenehme numerische Komplikationen mit sich bringt. Deshalb muss man die Maximum Likelihood Funktion des über Nebenbedingungen eingeschränkten Problems mit der SAS Prozedur PROC NLIN eigenhändig aufsetzen.

Nun fragt man sich,  ist denn so eine relativ komplexe Modifikation des Logistischen Regressionsmodells überhaupt in der Praxis notwendig? In der Tat gibt es  ein immer wieder  interessantes kommerzielles Anwendungsszenario, das schon Henry Ford prägnant mit der Aussage “Ich weiß, die Hälfte meiner Werbung ist hinausgeworfenes Geld. Ich weiß nur nicht, welche Hälfte.” umschrieben hat. Übersetzt in die moderne Internet Ökonomie liegt dieses Szenario vor, wenn die Effektivität der teuer eingekauften Online Banner Werbung optimiert werden soll, um für einen Zeithorizont in der Zukunft das Werbebudget effizienter auszulegen.

Im folgenden Beispiel wird dies an simulierten Daten durchgeführt. Erst wird das Logistische Modell ohne Nebenbedingungen geschätzt:

  1. mittels PROC NLIN (Ohne Nebenbedingungen)
  2. mittels PROC LOGISTIC (Ohne Nebenbedingungen)
  3. mittels PROC NLIN (Mit Nebenbedingungen)

Im Anschluss werden die geschätzten Likelihood Functions, Modellparameter und Scores miteinander gegenübergestellt und verglichen. Die Input-Variablen x1-x6 beinhalten historische Werte der geschalteten Online-Werbung und die binäre Target-Variable Conversion_Click beinhaltet diejenigen historischen "Clicks" auf die Online Werbung die zu einer gewollten relevanten Kundeninteraktion geführt haben. Die geschätzten Modellparameter   (unter den Nebenbedingungen _x1-_x6>0) geben an, wieviel des Werbebugets auf die jeweilige Bannerwerbung am wirkungsvollsten verteilen sollte. Da Werbeausgaben immer nur positiv sein können, müssen die Nebenbedingungen der Positivität eingehalten werden. Bedenken Sie aber auch, dass die Einführung der Nebenbedingungen Ihr  Model verschlechtern. Diese Verschlechterung ist der  Maximum Likelihood Funktion ML zu entnehmen und spiegelt sich auch in einer  schlechteren Trennschärfe und Confusion Matrix wieder.

Dieses Beispiel zeigt, dass wir in der heutigen “BigData-Online-Welt” wohl nicht mehr wie Henry Ford von jedem Werbe-Euro 50 Cents aus dem Fenster werfen müssen. Das Optimierungspotential ist erfreulich groß. Laut BVDW hatte der deutsche Markt für Online Werbung im Jahr 2012 ein Volumen von 6,44 Mrd €. Ich hoffe diese kleine Anregung hilft Ihnen, in Zukunft ihren Teil dieser Ausgaben zu optimieren. Ist doch Schade wenn man unnötig viel Geld aus dem Fenster wirft…

Stay tuned

TobyText

 

data Banner_expenditure;
input Conversion_Click X1 X2 X3 X4  X5  X6;
like = 0;
label like = "dummy variable for nlin";
datalines;
1 0.8 .83 .66 1.9 1.10 .996
1 0.9 .36 .32 1.4 0.74 .992
0 0.8 .88 .70 0.8 0.176 .982
0 1 .87 .87 0.7 1.053 .986
1 0.9 .75 .68 1.3 0.519 .980
0 1 .65 .65 0.6 0.519 .982
1 0.95 .97 .92 1 1.23 .992
0 0.95 .87 .83 1.9 1.354 1.020
0 1 .45 .45 0.8 0.322 .999
0 0.95 .36 .34 0.5 0 1.038
0 0.85 .39 .33 0.7 0.279 .988
0 0.7 .76 .53 1.2 0.146 .982
0 0.8 .46 .37 0.4 0.38 1.006
0 0.2 .39 .08 0.8 0.114 .990
0 1 .90 .90 1.1 1.037 .990
1 1 .84 .84 1.9 2.064 1.020
0 0.65 .42 .27 0.5 0.114 1.014
0 1 .75 .75 1 1.322 1.004
0 0.5 .44 .22 0.6 0.114 .990
1 1 .63 .63 1.1 1.072 .986
0 1 .33 .33 0.4 0.176 1.010
0 0.9 .93 .84 0.6 1.591 1.020
1 1 .58 .58 1 0.531 1.002
0 0.95 .32 .30 1.6 0.886 .988
1 1 .60 .60 1.7 0.964 .990
1 1 .69 .69 0.9 0.398 .986
0 1 .73 .73 0.7 0.398 .986
;
 
data Banner_expenditure;
set Banner_expenditure;
id+1;
run;
 
ods listing close;
ods pdf;
 
Title "Unbound Problem";
*Logistische Regression mit Proc NLIN Unbound;
Ods output parameterestimates=estimates_NLIN_Unbound
anova=LF_NLIN_Unbound(where=(strip(source) eq "Error")
keep=ss source rename=(ss=LF));
proc nlin data=Banner_expenditure method=newton sigsq=1;
parms _intercept=-10 _X1 = 2 _X5 = 1 _X6=6;
* “_” Undersoce variables are Parameters to be optimized by NLIN;
linp = _intercept + _X1*X1 + _X5*X5 + _X6* X6;
p = exp(linp)/(1+exp(linp));
if (Conversion_Click = 0) then pi = 1-p;
else pi = p;
model.like = sqrt(- 2 * log(pi));
run;
ods output close;
 
*Gegentest mit Proc Logistic Unbound;
 
Ods output parameterestimates=estimates_LOGISTIC_Unbound(rename=(Variable=Parameter))
fitstatistics=LF_LOGISTIC_Unbound(where=(criterion eq "-2 Log L") rename=(InterceptAndCovariates=LF));
proc logistic data=Banner_expenditure;
model Conversion_Click(event='1')= X1 X5  X6;
output out=Score_Logistic_Unbound p=P_LU ;
run;
 
ods output close;
 
Title "Bound Problem:(_X1 >0 und _X6 > 0)";
*Logistische Regression mit Proc NLIN UND Nebenbedingungen (Bounds) in Koeffizienten _X1 _ X6 > 0;
Ods output parameterestimates=estimates_NLIN_Bound
anova=LF_NLIN_Bound(where=(strip(source) eq "Error")
keep=ss source rename=(ss=LF));
proc nlin data=Banner_expenditure method=newton sigsq=1;
parms _intercept=-10 _X1 = 2 _X5 = 1 _X6=6;
bounds _X1 _X6 > 0;*Nebenbedingung Positivität;
linp = _intercept + _X1*X1 + _X5*X5 + _X6* X6;* "_" Undersoce Variablen sind die Parameter, die NLIN schätzen soll;
p = exp(linp)/(1+exp(linp));
if (Conversion_Click = 0) then pi = 1-p;
else pi = p;
model.like = sqrt(- 2 * log(pi));
run;
ods output close;
 
data est1;
set estimates_nlin_Bound(where=(substr(parameter,1,1) eq "_"));
Parameter=scan(Parameter,1,"_");
run;
 
proc transpose data=est1
out=est2(drop=_name_);
var estimate;
id Parameter;
run;
 
data est3;
set est2;
_link_="LOGIT";
_TYPE_="PARMS";
_NAME_="Conversion_Click";
_esttype_="MLE";
x2=0;
x3=0;
x4=0;
run;
 
*Anwendung der mit Proc NLIN UND Nebenbedingungen
gefundenen Koeffizienten in Proc Logistic um den
Scoring Fit der Anpassung zu bwerten;
 
Ods output parameterestimates=estimates_LOGISTIC_Bound(rename=(Variable=Parameter))
fitstatistics=LF_LOGISTIC_Bound(where=(criterion eq "-2 Log L") rename=(InterceptAndCovariates=LF));
proc logistic data=Banner_expenditure inest=est3;
model Conversion_Click(event='1') = X1 X4  X6 / maxiter=0;
output out=Score_NLIN_Bound p=P_NB ;
run;
ods output close;
 
data likelihood_all(keep=LF Proc bnd);
set lf_: indsname=name;
Parameter=scan(Parameter,1,"_");
Proc=scan(name,2,",_");
bnd=scan(name,3,",_");
run;
 
proc sort;by descending bnd descending proc ;run;
 
data est_all;
length proc bnd Parameter $8;
set estimates_: indsname=name;
Parameter=scan(Parameter,1,"_");
Proc=scan(name,2,",_");
bnd=scan(name,3,",_");
run;
 
proc sort;by descending bnd descending proc Parameter;run;
options nolabel;
data est_all;
length proc bnd $10 LF 8 Parameter $12;
merge likelihood_all est_all ;
by descending bnd descending proc;
if first.proc then N+1;
label LF="Estimated*Likelihood";
run;
 
Title "Parameter-Vergleich Bound und Unbound";
options pagesize=266;
proc print noobs data=est_all label split="*";
var N LF proc bnd Parameter Estimate StdErr WaldChiSq ProbChiSq lowerCL upperCL;
by N LF;
ID N LF;
run;
 
 
data score_all;
merge score_logistic_unbound
      score_nlin_bound;
	  by id;
I_NB=P_NB ge .5;
I_LU=P_LU ge .5;
run;
 
Title "Score-Vergleich Bound und Unbound";
options pagesize=266;
proc print noobs data=score_all label split="*";
var id x: p_: I_: Conversion_Click;
run;
 
Title "Confusion Matrix Logistic Model Unbound";
proc freq data=score_all;
Tables Conversion_Click*I_LU;
run;
 
Title "Confusion Matrix NLIN Model Bound";
proc freq data=score_all;
Tables Conversion_Click*I_NB;
run;
ods pdf close;
Share

About Author

Toby Text

Principal Solutions Architect

Sie schauen gerade auf mein Profilbild und verstehen wahrscheinlich genau so wenig wie ich, nämlich gar nichts. Vermutlich sehen Sie wahrlos verstreute Pixel auf einem Quadrat. Einige davon bilden wenige offensichtliche Grundmuster, die aber auch nichts konkretes aussagen. Man hat nicht die geringste Idee über die Zusammenhänge der Pixel und den Gesamtinformationen des Bildes. So sieht die mühsame Realität des Alltages eines Data Scientist aus. Wie das menschliche Auge bei der Betrachtung des Bildes, so ist der Data Scientist ratlos und benötigt Hilfe, wenn sich die Berge an operativen Daten vor ihm anhäufen. Hätten Sie gedacht, dass Sie die Lösung zum Verständnis des obigen Bildes vielleicht sogar schon seit langem mit sich in Ihrer Tasche tragen, davon nur noch nicht wussten? Überlegen Sie mal kurz und probieren Sie es aus. Und so wie Sie mit Ihrer Intuition vielleicht eine praktikable Lösung gefunden haben, so hat ein Data Scientist im richtigen Moment den genialen Einfall und findet einen erleuchtenden methodischen Ansatz den er allerdings noch nie konkret angewendet hat, zu dessen Realisierung er nur noch in die Tasche greifen muss, um die passende Softwarefunktionalität für die Implementierung herauszuziehen. Über solche interessante Softwarefunktionalität für Ihre Projekte möchte ich Sie informieren in meinem Blog.

Related Posts

Leave A Reply

Back to Top