A/B Testing with Purchase

2 farklı hizmet doğrultusunda 1 aydır devam eden A/B testin sonuçlarını birlikte analiz edeceğiz. Başarı ölçütü Purchase’dır. Bu nedenle, istatistiksel testler için Purchase metriğine odaklanacağız.
İlk olarak gerekli kütüphanelerimiz import ediyoruz ve ayarlamaları yapıyoruz.
import pandas as pd
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import shapiro, levene, ttest_ind
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('display.float_format', lambda x: '%.5f' % x)
dataframe_control = pd.read_excel("/kaggle/input/ab-testing2/ab_testing.xlsx" , sheet_name="Control Group")
dataframe_test = pd.read_excel("/kaggle/input/ab-testing2/ab_testing.xlsx" , sheet_name="Test Group")
Yukarıda tek bir excel dosyasında olan control ve test grubu verilerini okuttuk.
df_control = dataframe_control.copy()
df_test = dataframe_test.copy()
İlerde kolay işlemler yapmak için kopyalarını alıyoruz.
Genel veri resmine bakıyoruz.
ef check_df(dataframe, head=5):
print("##################### Shape #####################")
print(dataframe.shape)
print("##################### Types #####################")
print(dataframe.dtypes)
print("##################### Head #####################")
print(dataframe.head())
print("##################### Tail #####################")
print(dataframe.tail())
print("##################### NA #####################")
print(dataframe.isnull().sum())
print("##################### Quantiles #####################")
print(dataframe.quantile([0, 0.05, 0.50, 0.95, 0.99, 1]).T)
check_df(df_control)

check_df(df_test)

df_control["group"] = "control"
df_test["group"] = "test"
Her iki veri seti içine group sütunu oluşturuyorum çünkü bir sonraki adımda her iki veri setinden yeni bir Dataframe oluşturacağım bu yüzden karışmamaları için kontrol ve test olduğunu önceden belirtiyorum.
df = pd.concat([df_control,df_test], axis=0,ignore_index=False)
df.head()

A/B Testinin Hipotezinin Tanımlanması
Kontrol ve test grubu için purchase(kazanç) ortalamalarına görmek için bakıyoruz.
df.groupby("group").agg({"Purchase": "mean"})

- Adım 1: Hipotezi tanımlıyoruz.
- H0 : M1 = M2 (Kontrol grubu ve test grubu satın alma ortalamalarıarasında fark yoktur.)
- H1 : M1!= M2 (Kontrol grubu ve test grubu satın alma ortalamalarıarasında fark vardır.)
- p < 0.05 H0 RED
- p > 0.05 H0 REDDEDİLEMEZ
Normallik Varsayımı Dağılımı
İlk olarak Shapiro testi kullanarak Normallik Varsayımını inceliyoruz.
test_stat, pvalue = shapiro(df.loc[df["group"] == "control", "Purchase"])
print('Test Stat = %.4f, p-value = %.4f' % (test_stat, pvalue))
Test Stat = 0.9773, p-value = 0.5891
- p-value=0.5891 değerimiz 0.05'ten büyük olduğu için H0 REDDEDİLEMEZ.
- Control grubunun değerleri normal dağılım varsayımını sağlamaktadır. Kontrol grubu ve test grubu satın alma ortalamaları arasında fark yoktur.
Varyans Homojenliği
Levene testi kullanarak varyans homojenliğini inceliyoruz.
- H0: Varyanslar homojendir.
- H1: Varyanslar homojen Değildir.
- p < 0.05 H0 RED
- p > 0.05 H0 REDDEDİLEMEZ
test_stat, pvalue = levene(df.loc[df["group"] == "control", "Purchase"],
df.loc[df["group"] == "test", "Purchase"])
print('Test Stat = %.4f, p-value = %.4f' % (test_stat, pvalue))
Test Stat = 2.6393, p-value = 0.1083
p-value=0.1083 değeri 0.05'ten büyük olduğu için H0 REDDEDİLEMEZ. Control ve Test grubunun değerleri varyans homojenliği varsayımını sağlamaktadır. Varyanslar Homojendir.
Hipotezin Uygulanması
Varsayımlar sağlandığı için bağımsız iki örneklem t testi (parametrik test) yapılmaktadır.
H0: M1 = M2 (Kontrol grubu ve test grubu satın alma ortalamaları arasında istatiksel olarak anlamlı yoktur.)
H1: M1 != M2 (Kontrol grubu ve test grubu satın alma ortalamaları arasında ist. ol.anl.fark vardır)
p<0.05 HO RED , p>0.05 HO REDDEDİLEMEZ
test_stat, pvalue = ttest_ind(df.loc[df["group"] == "control", "Purchase"],
df.loc[df["group"] == "test", "Purchase"],
equal_var=True)
print('Test Stat = %.4f, p-value = %.4f' % (test_stat, pvalue))
Test Stat = -0.9416, p-value = 0.3493
p-value=0.3493 , p-value değeri 0.05'ten büyük olduğu için H0 reddedilemez. Kontrol ve test grubu satın alma ortalamaları arasında istatistiksel olarak anlamlı farklılık yoktur.
SONUÇ
Eğer A-B testi sonuçları, kontrol grubu ile test grubu arasında satın alma ortalamaları açısından istatistiksel olarak anlamlı bir fark olmadığını gösteriyorsa, müşteriye her iki grubun da benzer performans gösterdiği konusunda bilgi verilebilir. Bu durumda, belirli bir yöntemin diğerine göre belirgin bir avantajı olmadığı anlaşılır.
Ek Bilgi
Varsayımlar sağlanıyorsa bağımsız iki örneklem T testi uygulanır. Yukarıda son aşamada uyguladığımız gibi.(parametrik test). Varsayımlar sağlanmıyorsa Mann-Whitney U(non- parametrik testi) uygulanır.
Not
Normallik varsayımı sağlanmıyorsa direk Mann-Whitney U testi uygulanır. Varyans homojenliği sağlanmıyorsa bağımsız iki örneklem T testine arguman girilir.
Kaynak olarak katılımcısı olduğum Data Scientist Bootcamp kurs içeriği kullanılmıştır. Vahit Keskin’e teşekkürü borç bilirim.
Linkedin’de daha yakından tanışabiliriz :) yaseminderyadilli