Berbagai Eksperimen: Teori dan Praktek

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:

  1. 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.
  2. 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.
  3. 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:

H0i tidak ditolakH0i ditolakTotal

H0i benar

UVn0
H0i salahTSn1
TotalkRRn


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 pvalue untuk semua hipotesis yang diuji menggunakan metode Bonferroni;

2) penyesuaian berurutan, iteratif pvalue 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 pi5103 untuk mengatakan bahwa perbedaannya signifikan. Untuk meratakan kekurangan ini, Anda dapat memilih metode Hill.

2. Metode Bukit


Ini adalah prosedur perubahan berurutan ke bawah. pvalue . Pada langkah pertama algoritma metode, nyata pvalue diurutkan naik:

p1···pn,


lalu yang asli  alpha -level:

 alphai= alpha/(ni+1),


setelah itu kondisinya diperiksa pi alphai 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 FDRFWER , mis., probabilitas mendapatkan kesalahan urutan pertama dalam kendali Fdr menurun.

Metode Benjamini-Hochberg


Prosedur bottom-up ini melibatkan perubahan berurutan. pvalue pra-disortir naik:

p1···pn.


Lalu sumber α -tingkat disesuaikan dengan rumus:

 alphai=i· alpha/n,


kemudian, seperti dalam metode Holm, kondisinya diperiksa pi alphai 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!

Source: https://habr.com/ru/post/id476826/


All Articles