A/B Testing with Purchase

Yasemin Derya Dilli
4 min readNov 30, 2023

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

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Yasemin Derya Dilli
Yasemin Derya Dilli

Written by Yasemin Derya Dilli

Data Analyst | Engineer | Content Writer

No responses yet

Write a response