Die Integration einer bestimmten Kategorien führt automatisch zu einem Uplift der Ö-Rate - Übermedian

Logistic Regression


In [1]:
import pandas as pd
from pandas import DataFrame
import statsmodels.api as sm
import pylab as pl
AuswertungExcel = pd.read_excel('Auswertung.xlsx')
import numpy as np

In [2]:
AuswertungExcel.columns


Out[2]:
Index([u'overMedian', u'Oeffnungsrate', u'Betreff', u'Kategorie', u'incentive', u'highlight', u'partner', u'satzzeichen', u'anrede', u'Kategoriensumme', u'Kampagne', u'Datum', u'Partner_dm', u'Partner_ebay', u'Partner_Philips', u'Partner_WMF', u'Partner_a.t.u', u'Partner_aral', u'Partner_asstel', u'Partner_blume2000.de', u'Partner_c&a', u'Partner_dehner', u'Partner_expedia', u'Partner_express', u'Partner_galeria', u'Partner_hvb', u'Partner_itunes', u'Partner_linda', u'Partner_mexx', u'Partner_mydays', u'Partner_opel', u'Partner_quelle', u'Partner_real', u'Partner_rewe', u'Partner_sportarena.de', u'Partner_tchibo', u'Partner_telekom', u'Partner_yello', u'Partner_zalando', u'Satzzeiche_!', u'Satzzeiche_.', u'Satzzeiche_?', u'Anrede_anrede', u'Anrede_title', u'Angebot', u'Bestpreisgarantie', u'Exklusiv', u'Geschenk', u'Gewinn', u'Gratis', u'Highlight', u'Jetzt', u'Nur', u'Prämie', u'Punktestand', u'Rabatt', u'Reduziert', u'Sale', u'Schnell', u'Sichern', u'Sparen', u'Wichtig', u'WSV', u'Wünsche', u'Special', u'Incentivierung_%', u'Incentives_200 °p für sie geschenkt', u'Incentives_200 °p geschenkt', u'Incentivierung_doppelt punkten', u'Incentives_doppelte punkte', u'Incentives_extra °p', u'Incentivierung_extra-punkte', u'Incentivierung_fach', u'Incentives_punkte', u'Incentives_punkte-gutschein', u'Incentives_°p'], dtype='object')

In [3]:
BestimmteKategorie = DataFrame()

In [4]:
BestimmteKategorie['overMedian']=AuswertungExcel['overMedian']
BestimmteKategorie['incentive']=AuswertungExcel['incentive']
BestimmteKategorie['partner']=AuswertungExcel['partner']
BestimmteKategorie['satzzeichen']=AuswertungExcel['satzzeichen']
BestimmteKategorie['anrede']=AuswertungExcel['anrede']
BestimmteKategorie['highlight']=AuswertungExcel['highlight']
BestimmteKategorie['Betreff']=AuswertungExcel['Betreff']

In [5]:
BestimmteKategorie.head()


Out[5]:
overMedian incentive partner satzzeichen anrede highlight Betreff
0 1 0 1 1 0 1 jetzt dm payback mini-karte sichern & noch meh...
1 1 1 1 0 0 1 punkten sie jetzt gepflegt bei dm mit vielen e...
2 0 1 0 0 0 0 24fach punkte mit maybelline jade
3 0 1 0 1 0 1 3.000 nur bis 28.02.2013 + immer doppelt punk...
4 0 1 0 1 0 1 jetzt 20fach punkte mit garnier olia!

In [6]:
BestimmteKategorie.describe()


Out[6]:
overMedian incentive partner satzzeichen anrede highlight
count 389.000000 389.000000 389.000000 389.000000 389.000000 389.000000
mean 0.498715 0.727506 0.390746 0.316195 0.125964 0.565553
std 0.500642 0.445816 0.488546 0.465589 0.332236 0.496323
min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
50% 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
75% 1.000000 1.000000 1.000000 1.000000 0.000000 1.000000
max 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000

In [7]:
BestimmteKategorie.corr()


Out[7]:
overMedian incentive partner satzzeichen anrede highlight
overMedian 1.000000 -0.186332 0.054746 0.162075 0.132684 0.023678
incentive -0.186332 1.000000 0.040458 -0.241920 -0.202680 -0.117078
partner 0.054746 0.040458 1.000000 -0.136669 -0.065842 0.074787
satzzeichen 0.162075 -0.241920 -0.136669 1.000000 0.075085 0.094100
anrede 0.132684 -0.202680 -0.065842 0.075085 1.000000 -0.089280
highlight 0.023678 -0.117078 0.074787 0.094100 -0.089280 1.000000

In [8]:
BestimmteKategorie.std()


Out[8]:
overMedian     0.500642
incentive      0.445816
partner        0.488546
satzzeichen    0.465589
anrede         0.332236
highlight      0.496323
dtype: float64

In [9]:
pd.crosstab(BestimmteKategorie['overMedian'],BestimmteKategorie['partner'])
# partner erste Zahl


Out[9]:
partner 0 1
overMedian
0 124 71
1 113 81

In [10]:
pd.crosstab(BestimmteKategorie['overMedian'],BestimmteKategorie['incentive'])
# incentive erste Zahl


Out[10]:
incentive 0 1
overMedian
0 37 158
1 69 125

In [11]:
pd.crosstab(BestimmteKategorie['overMedian'],BestimmteKategorie['satzzeichen'])
# satztzeichen erste Zahl


Out[11]:
satzzeichen 0 1
overMedian
0 148 47
1 118 76

In [12]:
pd.crosstab(BestimmteKategorie['overMedian'],BestimmteKategorie['anrede'])
# anrede erste Zahl


Out[12]:
anrede 0 1
overMedian
0 179 16
1 161 33

In [13]:
pd.crosstab(BestimmteKategorie['overMedian'],BestimmteKategorie['highlight'])
# highlight erste Zahl


Out[13]:
highlight 0 1
overMedian
0 87 108
1 82 112

In [14]:
BestimmteKategorie.hist()
pl.show()



In [15]:
Y_Overmedian = BestimmteKategorie['overMedian']

In [16]:
BestimmteKategorie.columns


Out[16]:
Index([u'overMedian', u'incentive', u'partner', u'satzzeichen', u'anrede', u'highlight', u'Betreff'], dtype='object')

In [17]:
X_Kategorien  = BestimmteKategorie[[u'incentive', u'partner', u'satzzeichen', u'anrede', u'highlight']]
#X_Kategorien = sm.add_constant(X_Kategorien)
#def setIntercept(data):
 #   return float(1.0)
#X_Kategorien['intercept']=map(setIntercept,BestimmteKategorie['overMedian'])

In [18]:
X_Kategorien_Train = X_Kategorien[:len(X_Kategorien)/2]

In [19]:
Y_Overmedian_Train = Y_Overmedian[:len(Y_Overmedian)/2]

In [20]:
logit = sm.Logit(Y_Overmedian_Train,X_Kategorien_Train)

In [21]:
result = logit.fit()


Optimization terminated successfully.
         Current function value: 0.663601
         Iterations 5

In [22]:
print result.summary()


                           Logit Regression Results                           
==============================================================================
Dep. Variable:             overMedian   No. Observations:                  194
Model:                          Logit   Df Residuals:                      189
Method:                           MLE   Df Model:                            4
Date:                Fri, 22 May 2015   Pseudo R-squ.:                 0.03364
Time:                        16:21:39   Log-Likelihood:                -128.74
converged:                       True   LL-Null:                       -133.22
                                        LLR p-value:                   0.06202
===============================================================================
                  coef    std err          z      P>|z|      [95.0% Conf. Int.]
-------------------------------------------------------------------------------
incentive      -0.2779      0.239     -1.165      0.244        -0.745     0.190
partner         0.6460      0.304      2.122      0.034         0.049     1.243
satzzeichen     0.6718      0.302      2.226      0.026         0.080     1.263
anrede          0.1805      0.460      0.392      0.695        -0.722     1.082
highlight      -0.1074      0.274     -0.391      0.696        -0.645     0.430
===============================================================================

In [23]:
print result.conf_int()


                    0         1
incentive   -0.745416  0.189544
partner      0.049375  1.242672
satzzeichen  0.080199  1.263379
anrede      -0.721575  1.082498
highlight   -0.645111  0.430395

In [24]:
print result.conf_int()


                    0         1
incentive   -0.745416  0.189544
partner      0.049375  1.242672
satzzeichen  0.080199  1.263379
anrede      -0.721575  1.082498
highlight   -0.645111  0.430395

In [25]:
print np.exp(result.params)


incentive      0.757345
partner        1.907939
satzzeichen    1.957736
anrede         1.197770
highlight      0.898204
dtype: float64

In [26]:
params = result.params
conf = result.conf_int()
conf['OR'] = params
conf.columns = ['2.5%','97.5%','OR']
print np.exp(conf)


                 2.5%     97.5%        OR
incentive    0.474537  1.208699  0.757345
partner      1.050615  3.464859  1.907939
satzzeichen  1.083502  3.537354  1.957736
anrede       0.485986  2.952044  1.197770
highlight    0.524605  1.537864  0.898204

sieht nicht gut aus

Die Integration einer bestimmten Kategorien führt nicht automatisch zu einem Uplift der Ö-Rate (R2 ist nicht signifikant)

In [26]:


In [26]:


In [26]:


In [26]:


In [26]: