Di dunia sekarang ini, sulit membayangkan pengembangan produk tanpa pengujian A / B. Agar berhasil meluncurkan produk atau fungsionalitas baru, Anda perlu merancang A / B dengan benar, menghitung dan menafsirkan hasilnya. Terkadang kita perlu pengujian untuk lebih dari dua kelompok. Dalam artikel ini, kami akan mempertimbangkan kasus seperti itu - beberapa pengujian:
- Kami akan berbicara tentang kapan dan mengapa melakukan beberapa tes;
- pertimbangkan metode utama untuk menghitung hasil tes dan prinsip-prinsip matematika yang menjadi dasar metode tersebut;
- kami memberikan contoh penerapan metode perangkat lunak; Anda dapat menggunakan contoh-contoh ini dalam proyek Anda.
Jadi mari kita mulai.

Berbagai percobaan: kapan dan mengapa
Jelas, setiap komplikasi teknis dari eksperimen harus dibenarkan oleh kebutuhan praktis. Ini juga berlaku untuk beberapa tes. Jika audiens dibagi menjadi lebih dari dua subkelompok, kemungkinan mendapatkan kesalahan jenis pertama selama percobaan meningkat secara eksponensial:
1−(1− alpha)n,
dimana
n - jumlah subkelompok,
alpha - tingkat signifikansi statistik tertentu.
Jadi, saat menambahkan hanya satu subkelompok tambahan ke tes pasangan biasa (
n=3 ) pada tingkat standar yang diberikan
alpha=0,05 kita mendapatkan probabilitas kesalahan jenis pertama
p=0,14 yang secara signifikan melebihi target kami
alpha=0,05 .
Mengapa melakukan banyak percobaan jika mereka mengurangi keakuratan hasil penelitian? Mungkin ada beberapa alasan:
- Diperlukan untuk menguji beberapa perubahan dan efek kumulatifnya pada metrik produk. Contoh menunjukkan kepada pengguna di halaman layanan dua elemen baru yang berbeda lokasinya relatif satu sama lain.
- Perubahan hanya dapat diuji dalam satu periode waktu, karena keduanya saling tergantung dan peka terhadap musiman mingguan. Contohnya adalah menonaktifkan saluran iklan untuk menghitung efek kanibalisasi antar-saluran.
- Pelanggan ingin menerima jawaban sesegera mungkin dan lebih murah, mana dari opsi yang harus dipilih, menghemat pada saat yang sama pengembangan dan implementasi percobaan.
Jika kita dihadapkan dengan salah satu masalah ini dan kita harus menghitung signifikansi statistik untuk pengujian - kita perlu mempertimbangkan perlunya koreksi untuk beberapa pengujian. Tentang apa itu dan bagaimana melakukannya dengan benar, dan akan dibahas di bawah ini.
Berbagai percobaan: fitur perhitungan
Konsep dasar
Pertimbangkan kasus umum saat kita berhadapan
n hipotesis
H0i ,
i=1,...,n tentang persamaan median atau rata-rata berpasangan
m subkelompok. Dalam hal ini, hasil yang benar dan yang salah adalah mungkin.
H0iVSH1i untuk masing-masing
i=1,...,n hipotesis. Sajikan hasilnya sebagai eksperimen matriks kebingungan:
Dengan demikian ditolak secara tidak benar
V dari
R menolak hipotesis dasar.
Berdasarkan parameter ini, kami memperkenalkan dua konsep penting kesalahan, yang dikendalikan selama beberapa pengujian:
FWER dan
Fdr .
Probabilitas kesalahan grup
FWER (Tingkat Kesalahan Keluarga-Bijaksana) adalah probabilitas mendapatkan setidaknya satu kesalahan dari jenis pertama dan ditentukan oleh rumus:
FWER=p(V>0).
Fdr (False Discovery Rate) adalah ekspektasi matematis dari rasio kesalahan jenis pertama dengan jumlah total penyimpangan dari hipotesis utama:
FDR=E(V/R|R>0).
Pertimbangkan metode untuk mengendalikan kesalahan ini menggunakan contoh case produk standar.
Deskripsi Kasus
Sebagai contoh sederhana, pertimbangkan eksperimen di mana tiga kelompok pengguna yang terpisah dan terpisah ditampilkan tiga opsi halaman dengan tawaran untuk mengklik tombol panggil untuk iklan. Sebagai metrik dasar untuk kesederhanaan perhitungan, kami menerima jumlah total panggilan di setiap grup.
Mari kita lihat bagaimana metrik yang diteliti berubah:
Fig. 1. Grafik dinamika menekan tombol panggil
Kami akan menggunakan metode standar
bootstrap untuk membawa distribusi metrik target dalam sampel menjadi normal, dan lihat histogram dan rentang grafik dari nilai rata-rata dalam sampel:
Fig. 2. Histogram distribusi nilai rata-rata dalam kelompok
Fig. 3. Kisaran nilai rata-rata dalam kelompok
Dilihat oleh grafik, grup C menang dengan jumlah klik pada tombol panggil. Namun, penting untuk memverifikasi signifikansi statistik dari hasil. Untuk melakukan ini, kami membawa taksiran metrik ke bentuk distribusi normal dan menggunakan kriteria t Student yang biasa untuk perbandingan berpasangan grup dalam percobaan, dan kemudian - metode kontrol
FWER dan
Fdr untuk memperhitungkan koreksi untuk beberapa perbandingan.
Kontrol FWER
Ada banyak metode untuk mengontrol kesalahan ini, tetapi ada dua yang paling umum:
1) prosedur satu langkah dengan penyesuaian simultan
p−value untuk semua hipotesis yang diuji menggunakan metode Bonferroni;
2) penyesuaian berurutan, iteratif
p−value c pengambilan keputusan pada setiap langkah sesuai dengan hasil dari metode Hill.
1. Amandemen Bonferroni
Prosedur satu langkah ini mengurangi kemungkinan hasil percobaan positif palsu. Inti dari metode ini adalah untuk menerima hipotesis alternatif jika:
p≥ alpha/n,
dimana
n - jumlah hipotesis yang diuji.
Metode ini dapat diimplementasikan dengan cukup sederhana menggunakan perpustakaan standar
bootstrapped :
from bootstrapped import bootstrap as bs from bootstrapped import compare_functions as bs_cmp from bootstrapped import stats_functions as bs_st bs_ab_estims = bs.bootstrap_ab(np.array(group_A), np.array(group_B), bs_st.mean bs_cmp.difference, num_iterations=5000, alpha=0.05/3, iteration_batch_size=100, scale_test_by=1, num_threads=4) bs_bc_estims = bs.bootstrap_ab(np.array(group_B), np.array(group_C), bs_st.mean bs_cmp.difference, num_iterations=5000, alpha=0.05/3, iteration_batch_size=100, scale_test_by=1, num_threads=4) bs_ac_estims = bs.bootstrap_ab(np.array(group_A), np.array(group_C), bs_st.mean bs_cmp.difference, num_iterations=5000, alpha=0.05/3, iteration_batch_size=100, scale_test_by=1, num_threads=4)
Setelah memperoleh hasil evaluasi statistik, kita dapat menyimpulkan apakah kelompok berbeda atau tidak.
Minus utama dari pendekatan: semakin banyak subkelompok, semakin rendah kekuatan kriteria, yang meningkatkan kemungkinan menerima hipotesis yang salah. Misalnya, untuk sepuluh tes dan
αi=0,05 perlu mendapatkan
pi≤510−3 untuk mengatakan bahwa perbedaannya signifikan. Untuk meratakan kekurangan ini, Anda dapat memilih metode Hill.
2. Metode Bukit
Ini adalah prosedur perubahan berurutan ke bawah.
p−value . Pada langkah pertama algoritma metode, nyata
p−value diurutkan naik:
p1≤···≤pn,
lalu yang asli
alpha -level:
alpha′i= alpha/(n−i+1),
setelah itu kondisinya diperiksa
pi≥ alpha′i dan menyimpulkan apakah hipotesis utama itu benar
H0i .
Algoritma breakpoint - momen i ketika hipotesis utama pertama diterima
H0i , dan semua yang berikutnya
H0j,j>i .
Anda dapat menerapkan metode ini menggunakan prosedur
multipletests() dari perpustakaan
statsmodels dengan parameter
method=”holm” :
from bootstrapped import bootstrap as bs from bootstrapped import stats_functions as bs_st from scipy.stats import ttest_ind from statsmodels.sandbox.stats.multicomp import multipletests bs_a = bs.bootstrap(np.array(group_A), stat_func=bs_st.mean, num_iterations=10000, iteration_batch_size=300, return_distribution=True) bs_b = bs.bootstrap(np.array(group_B), stat_func=bs_st.mean, num_iterations=10000, iteration_batch_size=300, return_distribution=True) bs_c = bs.bootstrap(np.array(group_C), stat_func=bs_st.mean, num_iterations=10000, iteration_batch_size=300, return_distribution=True) stat_ab, p_ab = stats.ttest_ind(pd.DataFrame(bs_a), pd.DataFrame(bs_b)) stat_bc, p_bc = stats.ttest_ind(pd.DataFrame(bs_b), pd.DataFrame(bs_c)) stat_ac, p_ac = stats.ttest_ind(pd.DataFrame(bs_a), pd.DataFrame(bs_c)) print(sorted([p_ab, p_bc, p_ac])) print("FWER: " + str(multipletests(sorted([p_ab, p_bc, p_ac]), alpha=0.05, method='holm', is_sorted = True)))
Kontrol FDR
Kontrol
Fdr berarti kondisinya puas
FDR=E(V/R)< alpha . Pada saat bersamaan
FDR≤FWER , mis., probabilitas mendapatkan kesalahan urutan pertama dalam kendali
Fdr menurun.
Metode Benjamini-Hochberg
Prosedur bottom-up ini melibatkan perubahan berurutan.
p−value pra-disortir naik:
p1≤···≤pn.
Lalu sumber
α -tingkat disesuaikan dengan rumus:
alpha′i=i· alpha/n,
kemudian, seperti dalam metode Holm, kondisinya diperiksa
pi≥ alpha′i dan menyimpulkan apakah hipotesis utama itu benar
H0i dan semua selanjutnya
H0j,j>i .
Metode Benjamini-Hochberg, seperti metode Hill, dapat diimplementasikan menggunakan prosedur
multipletests() :
print("FDR: " + str(multipletests([p_ab, p_bc, p_ac], alpha=0.05, method='fdr_bh', is_sorted = False)))
Kesimpulan
Dalam artikel kami berbicara tentang metode utama untuk mengevaluasi hasil beberapa tes dan memberikan contoh kode program yang mengimplementasikan metode ini. Kami berharap Anda telah menghabiskan waktu dengan manfaat dan minat dan akan dapat menerapkan prosedur yang dijelaskan dalam praktik. Dan jika Anda memiliki pertanyaan, kami akan dengan senang hati menjawabnya.
Terima kasih atas perhatian anda!