AB Testing Ads - Project Experimental & AB Testing Pacmann.
Published: 2023-09-06 13:56:41

Perusahaan pemasaran ingin menjalankan kampanye yang sukses, namun pasarnya kompleks dan dengan pilihan kampanye yang tepat, mereka dapat menghasilkan kampanye yang sukses. Jadi mereka biasanya melakukan pengujian A/B. Kebanyakan orang akan dihadapkan pada iklan (kelompok uji). Dan sejumlah kecil orang (kelompok kontrol) akan melihat iklan layanan masyarakat (PSA) dengan ukuran dan lokasi yang sama dengan iklan tersebut.

Data yang digunakan pada eksperimen ini didapat dari kaggle marketing AB Testing. Fitur dari dataset terdiri dari :

- User ID (unique)
- Test group : Jika “ad” orangnya melihat iklan, kalau “psa” hanya melihat iklan.
- Converted : Jika seseorang membeli produk true, jika tidak else.
- Total ads : Jumlah iklan.
- Most ads day : Hari dimana seseorang melihat iklan terbanyak.
- Most ads hour : Jam dimana seseorang melihat iklan terbanyak. 

Tujuan eksperimen yang dilakukan adalah untuk menentukan apakah iklan pemasaran sukses atau tidak. Dengan mengetahui hal tersebut, diharapkan kedepannya perusahaan dapat mengoptimalkan pemasaran.

Metriks yang digunakan pada eksperimen ini adalah conversion rate. Dengan group control public service announcement dan group treatment akan ada iklan dengan warna yang mencolok. 

Hipotesis yang akan diuji pada eksperimen ini adalah :

- H0: tidak terdapat perbedaan yang signifikan dari implementasi ads terhadap conversion rate.
- H1: terdapat perbedaan yang signifikan antara grup control dan treatment akibat dari implementasi ads.

Untuk bagian desain eksperiment, randomization unitnya adalah UserID karena unik, target of randomization unit adalah user atau pengguna secara acak. Pada sample size significant level atau alfa yang telah ditetapkan pada eksperiment kali ini adalah 5% atau 0.05. Power level atau probabilitas untuk menolak hipotesis null, yang menggunakan nilai 0.08. Standar deviasi dari populasinya adalah 0.07. Yang terakhir adalah Difference between control and treatment atau delta adalah 1% atau 0.01.

Untuk kode program, pertama yang dilakukan adalah memeriksa adakah data yang kosong atau duplikat, setelah dicek tidak ada data yang kosong ataupun duplikat.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eo3gwke7cjh9oi0x6yje.PNG)

Selanjutnya, dilakukan perhitungan untuk mencari jumlah ukuran sample, dengan cara sebagai berikut:

```
def sample_size_calculator(alpha: float, power_level: float, standard_deviation: float, delta: float) -> int:
    beta = 1 - power_level
    z_alpha = stats.norm.ppf(1 - alpha/2)
    z_beta = stats.norm.ppf(1 - beta)
    n = (2 * (z_alpha + z_beta)**2 * standard_deviation**2) / delta**2
    return int(n)
```
Dari kode program diatas didapat hasil ada 769.

Untuk durasi eksperimen, dengan mempertimbangkan jumlah pengunjung yang sekiranya dalam 2 minggu terakhir akan terus menggunakan website, maka eksperimen akan berlangsung sekitar 2 minggu.

Tahap selanjutnya yang dilakukan adalah dengan membagi dataset utk grup treatment dan control, hasilnya masing-masing grup treatment dan control sebanya 769.
```
data_control = df[df['test_group'] == 'psa'].sample(sampe_size)
data_treatment = df[df['test_group'] == 'ad'].sample(sampe_size)

len(data_control), len(data_treatment) # (769, 769)
```

Lalu saya melakukan visualisasi untuk melihat distribusi total ads dan most ads user

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6h9qe5trlshzhekyk5ik.PNG)

Selanjutnya adalah mencari tahu jumlah user yang converted baik pada control maupun treatment:

```
n_user_control = data[data["test_group"] == "psa"]["user_id"].nunique()
n_user_treatment = data[data["test_group"] == "ad"]["user_id"].nunique()
# 769

n_converted_control = data[(data["test_group"] == "psa") & (data["converted"] == True)].shape[0]
n_converted_treatment = data[(data["test_group"] == "ad") & (data["converted"] == True)].shape[0]
```

Lalu menghitung nilai observed dan expected-nya:

```
# Menghitung total jumlah pengguna yang terlibat
total_user_impacted = n_user_control + n_user_treatment

# Menghitung nilai observed dan expected
observed = [n_user_control, n_user_treatment]
expected = [int(total_user_impacted / 2), int(total_user_impacted / 2)]
```

Lalu mencari convert rate untuk control dan treatment:

```
cr_control = n_converted_control / n_user_control
cr_treatment = n_converted_treatment / n_user_treatment
```

Langkah selanjutnya adalah uji hipotesis, utk itu saya menyiapkan variable variable yang diperlukan seperti z_score, z_crit, dan juga p_value.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ottxvhf3691am7vwtuow.PNG)

Hasilnya adalah sebagai berikut
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dta0jwm8bgr52276q7va.PNG)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v98rbuvcmhauysafriu3.PNG)

Pada gambar diatas H0 ditolak, karena group treatment lebih besar dari pada group control, yang mana hal ini berakibat bahwa treatment berpengaruh pada pemasaran iklan.

Pada uji hipotesisi, terlihat bahwa adanya perbedaan yang terlihat antara grup treatment dan grup control, sehingga iklan diterima dengan baik oleh sebagian pelanggan pada kelompok treatment.

**Reference:**
Garson, G.D., 2012. Testing statistical assumptions: Blue Book Series. Asheboro: Statistical Associate Publishing, [online] pp.1–54