import-Befehle¶

In [ ]:
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import binomtest

Daten einlesen¶

In [ ]:
#import pandas as pd
Binomialtest = pd.read_excel("Binomialtest.xlsx")
In [ ]:
 

Datenüberblick¶

In [4]:
Binomialtest.head()
Out[4]:
ID Banner
0 1 1
1 2 1
2 3 1
3 4 1
4 5 1

Als Faktor codiert & Zusammenfassung¶

In [5]:
# In Python wird 'as.factor' nicht benötigt
# Statt summary(): describe()
print(Binomialtest.describe(include='all'))
                ID       Banner
count  1606.000000  1606.000000
mean    803.500000     0.704857
std     463.756581     0.456249
min       1.000000     0.000000
25%     402.250000     0.000000
50%     803.500000     1.000000
75%    1204.750000     1.000000
max    1606.000000     1.000000

Struktur des Datensatzes¶

In [7]:
Binomialtest.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1606 entries, 0 to 1605
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   ID      1606 non-null   int64
 1   Banner  1606 non-null   int64
dtypes: int64(2)
memory usage: 25.2 KB

Hinweis: Wie der Funktion "info" zu entnehmen ist, wird der Banner als int codiert.

Voraussetzungen des Binomialtests¶

Die Variable ist dichotom (zwei Ausprägungen). → "Banner" ist dichotom. rot vs. blau

Grundlegende Konzepte¶

Der Binomialtest testet, ob die Verteilung der Häufigkeiten einer binären Variable einer erwarteten Verteilung entspricht.
Zu beachten ist, dass die Variable nur dichotome (= binäre) Ausprägungen haben darf.
Zum Beispiel können die Variablen folgend aussehen: 0 und 1, "Mann" und "Frau", "klein" und "groß", "trifft zu" und "trifft nicht zu" und so weiter.
Die Fragestellung des Binomialtests wird verkürzt auf:
"Unterscheidet sich die beobachtete Wahrscheinlichkeit des Auftretens von der theoretisch erwarteten Auftretenswahrscheinlichkeit?"

Deskriptive Statistiken¶

In [9]:
print(Binomialtest.describe(include='all'))
                ID       Banner
count  1606.000000  1606.000000
mean    803.500000     0.704857
std     463.756581     0.456249
min       1.000000     0.000000
25%     402.250000     0.000000
50%     803.500000     1.000000
75%    1204.750000     1.000000
max    1606.000000     1.000000

Hätten gleich viele Probanden den blauen sowie den roten Banner geklickt, so läge der Mittelwert bei 0.5 ((0+1)/2=0.5).
Allerdings zeigt sich jedoch, dass der Mittelwert bei 0.7 liegt und damit tendenziell Richtung Ausprägungskategorie “Rot” geht.

In [10]:
counts = Binomialtest["Banner"].value_counts().sort_index()

# Wenn 0 = Blau und 1 = Rot:
print(f"Blau (0): {counts.get(0, 0)} Klicks")
print(f"Rot  (1): {counts.get(1, 0)} Klicks")
Blau (0): 474 Klicks
Rot  (1): 1132 Klicks

Insgesamt haben 1132 Personen den roten Banner geklickt, während nur 474 Personen den blauen Banner geklickt haben.

Hypothese¶

H1: Der rote Banner wird wahrscheinlicher besser geklickt.
H0: Der rote Banner wird wahrscheinlicher schlechter oder gleich gut geklickt.

Kreisdiagramm¶

In [ ]:
#import matplotlib.pyplot as plt

mytable = Binomialtest['Banner'].value_counts()
plt.pie(mytable, 
        labels=["Blau", "Rot"], 
        colors=["deepskyblue", "tomato"], 
        autopct="%1.1f%%")
plt.title("Kreisdiagramm zur Bannerveteilung")
plt.show()
No description has been provided for this image

Wie dem Kreisdiagramm zu entnehmen ist, wird der rote Banner besser/ häufiger geklickt als der Blaue.

Ergebnisse des Binomialtests¶

In [ ]:
from scipy.stats import binomtest

laenge = len(Binomialtest)
print(f"Anzahl der Datensätze: {laenge}")

# 1132 Rot, 1606 gesamt
ergebnis = binomtest(1132, n=laenge, p=0.5, alternative="greater")
print(ergebnis)
Anzahl der Datensätze: 1606
BinomTestResult(k=1132, n=1606, alternative='greater', statistic=0.7048567870485679, pvalue=1.877760613085354e-62)

1606 Banner werden geklickt, von denen 1132 rote waren und 474 blaue.

Wie das Ergebnis der Summary zeigt, haben 1132 der 1606 Probanden sich für den roten Banner entschieden.
Die beobachtete prozentuale Häufigkeit für den roten Banner liegt also bei 1132/1606, bzw. 70.49 % (0.70485%) .
Dieser Wert ist höher als der erwartete Wert von 0.5.

Die statistische Signifikanz dieses Unterschieds ist unter “p-value” zu finden.
Der Wert p < 0.05 bedeutet, dass sich die beobachtete Häufigkeit und der erwartete Anteil signifikant unterscheiden (Binomialtest, einseitig, p <0.05, n = 1606).

Eine Aussage¶

Die Probanden klicken signifikant besser die roten Banner gegenüber den blauen Bannern (Binomialtest, einseitig, p < 0.05, n = 1606).
Die Wahrscheinlichkeit, das der rote Banner geklickt wird, liegt bei 70.49 %.
H0 kann verworfen werden.