Kılavuzlar
Çevrim içi deneyler (A/B testleri)
Çevrim dışı karşılaştırmanız yeni sürümün daha iyi olduğunu söyledi. Üretimdeki bir A/B testi aynı soruyu gerçek kullanıcılara sorar. Kendi yönlendiriciniz birimleri (kullanıcılar veya oturumlar) iki kol arasında rastgele dağıtır; oloproof experiment onun günlüklerini okur ve diğer her kural gibi aynı dört durumla yanıt verir. Yöntem, belirtilen koşullarla bağımsız bir denetimce kabul edildi: observed_until, sonuç günlüğünün ne zaman çıkarıldığına dair sizin beyanınızdır, birimler bağımsız olarak rastgele atandı, hiçbir birimin sonucu başka birimin koluna bağlı değildir, bölüşüm değişirken sonuçlar kaymadı ve her bakış günlüğün tamamını okur. Bu koşulların dışında yanıt kapsanmaz.
Günlükler ve bildirim
İki dosya, CSV veya JSONL: birim başına bir satır içeren bir atama günlüğü (bildirdiğiniz birim sütunu ve arm) ve birimi ile onun value değerini içeren bir sonuç günlüğü.
experiment:
name: checkout-v2
unit: user
allocation: {control: 0.5, treatment: 0.5}
control: control
treatment: treatment
assignments: logs/assignments.csv
outcomes: logs/outcomes.csv
kind: rate
rules:
- {id: lift, kind: superiority}
- {id: no-harm, kind: non_inferiority, margin: 0.01}oloproof experiment experiment.yaml --policy release.yaml --jsonkind: mean bildirilmiş bir range: [low, high] alır; direction: max düşük olanı daha iyi okur. Sonuç satırı olmayan atanmış bir birim eksiktir ve her iki tarafta en kötü değeriyle sınırlanır; missing_outcome: zero satır yoksa sıfır demek olduğunu söylemedikçe. Sıfırlar dahil her birim için bir satır kaydedin: yalnızca dönüşüm yapanları tutan bir dönüşüm günlüğü diğer her birimi eksik okur ve yanıt INSUFFICIENT_EVIDENCE olarak kalır. Sıfırla doldurma, sayılan her birimin sonuç penceresinin kapandığını varsayar; bir saat önce atanmış bir birim henüz dönüşüm yapmamıştır ve onu sıfır saymak daha hızlı dönüşen kolu kayırır. Atama günlüğünde bir assigned_at sütunuyla birlikte outcome_window_hours, as_of ve observed_until (sonuç günlüğünün çıkarıldığı an) bildirin; yalnızca penceresi as_of itibarıyla kapanmış birimler sayılır; missing_outcome: zero, izleme ne olursa olsun bunlar olmadan reddedilir. Her zamanı bir ofsetle veya Z ile yazın (2026-10-11T00:00:00Z); ikisi de olmayan bir zaman reddedilir. as_of, observed_until değerinden sonra olamaz ve ikisi de gelecekte olamaz: çıkarmadan sonraki bir sonuç günlükte yoktur. Pencere soruyu seçer: 48 saatlik bir pencere "48 saat içinde dönüştü" sorusunu yanıtlar, bu yüzden kastettiğiniz sonucun gecikmesini kapsamalıdır. Birim kimlikleri boşluklar kırpıldıktan sonra metin olarak karşılaştırılır ve 42.0, 42 olarak okunur. Çıkış kodu en kötü kuralınkidir: 0 PASS, 1 FAIL, 3 INSUFFICIENT_EVIDENCE, 4 MANUAL_REVIEW.
İlk olarak neyi kontrol eder
- Örnek oranı. Kolların birim sayıları bildirilen dağılıma karşı test edilir (iki kol için kesin binom testi, daha fazlası için ki-kare, eşik 0,001). Bir uyumsuzluk her kuralı MANUAL_REVIEW yapar: bozuk bir bölünme kolların artık karşılaştırılabilir olmadığı anlamına gelir ve aynı türden daha fazla veri bunu onarmaz. Herhangi bir farkı okumadan önce nedeni bulun (kullanıcı kaybettiren bir yönlendirme, yalnızca bir kola uygulanan bir bot filtresi).
- İki kolda bir birim. Atama sızdı; her kural MANUAL_REVIEW okunur.
- Bir birim için birden çok sonuç satırı. Reddedilir, çünkü bir kullanıcının olayları bağımsız değildir. Her birimin kendi ortalamasını sonucu yapmak için aggregate: unit_mean bildirin: yanıt bu durumda ortalama olay hakkında değil, ortalama kullanıcı hakkındadır.
- Boş bir kol. Sonuçları olana kadar INSUFFICIENT_EVIDENCE.
- missing_outcome: zero altında, atanmış hiçbir birimle eşleşmeyen sonuç satırları. Sıfırlar birleştirmeye dayanır, bu yüzden bozuk bir birleştirme gerçek birimleri sıfır olarak okur; kimlikler uyuşana kadar her kural MANUAL_REVIEW okur. Varsayılanda sayılır ve dışarıda bırakılırlar.
Nasıl karar verir
Her kolun ortalaması, Oloproof'un tek bir çalıştırma için zaten kullandığı aralığı alır (bir oran için kesin Clopper-Pearson, aksi halde bahis tabanlı sınırlı ortalama), her biri hata bütçesinin yarısıyla; fark ise ikisinin karşıt uçlarıyla sınırlanır. Her örneklem büyüklüğünde geçerlidir ve ders kitabındaki normal aralıktan daha geniştir. Bir üstünlük kuralı, aralığın tamamı sıfırın üzerinde olduğunda geçer; bir eşdeğerden aşağı olmama kuralı, alt ucu eksi marjda veya üzerinde olduğunda geçer.
monitoring: anytime her iki kol için bahis aralığını kullanır; bu aralık ne sıklıkla bakarsanız bakın ve ne zaman durursanız durun geçerlidir. Bu, her bakışta o ana kadarki günlüğün tamamı verildiği sürece geçerlidir: okuduktan sonra satırları döneme göre asla atmayın veya filtrelemeyin. Varsayılan olan fixed, planladığınız örneklem büyüklüğünde bir kez okunur.
Birden çok tedavi
treatment: yerine treatments: [b, c] bildirin ve her kurala karşılaştırdığı tedaviyi verin (treatment: b). Her kolun aralığı m kol için 1 - alpha/m düzeyinde alınır; böylece her tedavi eksi kontrol farkı birleşim sınırıyla aynı anda kapsanır: tedavi başına bir kural, her biri için bir iddia, ve aile bir arada geçerlidir. Her aralık iki kolla olduğundan daha geniştir, çünkü her kol diğerlerinin bedelini öder. Birden çok tedavide rapor, kendilerini adlandıran her kuralı geçenler arasından en iyisini adlandırır ve onun geçen diğer her tedaviden ayrılıp ayrılmadığını söyler: aynı eşzamanlı aralıklarla sınırlanan her fark sıfırı dışlar. Eşitlikler bildirilen sırayı korur ve asla ayrılmaz. Örnek oranı kontrolü zaten her kolu okur. Ortak güvence tek bir deney dosyasının kollarını kapsar: tedavileri birkaç dosyaya bölmek bu güvenceden vazgeçmektir.
Oran metrikleri
Tıklama oranı, tıklamaların oturumlara bölümüdür ve çok oturumu olan bir kullanıcı çok sayıda bağımsız kullanıcı değildir. Oranı birim başına bir satır üzerinden, her birimin değerlerinin içinde kaldığı aralıklarla bildirin:
ratio: {numerator: clicks, denominator: sessions, numerator_range: [0, 50], denominator_range: [1, 50]}
aggregate: unit_sum # only if a unit has several rows: they are addedTahmin edilen nicelik, her kolun ortalama payının ortalama paydasına bölümüdür. İki ortalama da kabul edilmiş aralıkla, her biri hata bütçesindeki payıyla sınırlanır; oran ise uçları bölünerek sınırlanır, böylece normal yaklaşım olmadan her örneklem büyüklüğünde geçerlidir. Aralığı sıfıra ulaşan bir payda aralık vermez. Kendi aralığı dışındaki bir değer, birimi adlandıran bir yapılandırma hatasıdır, asla kırpılmaz. Delta yönteminin genellikle daha dar olan aralığı yanında gösterilir ve asla karar vermez.
Testten önceki bir ortak değişken
Testten önce ölçülen bir şeyi (geçen ayın harcaması, geçen haftanın oturumları) izleyen bir sonuç, o etki çıkarıldığında daha az değişir. Her birimin testten önceki değerini ve bu testin sonuçları okunmadan önce sabitlenmiş bir katsayıyı getirin:
covariate: {values: logs/pre_period.csv, range: [0, 500], theta_from: logs/history.csv}Karar verilen sonuç Y - theta (X - c) olur. theta bildirilir (theta:, isteğe bağlı bir center: ile; varsayılan olarak aralığın ortası) ya da testten önceki bir döneme ait bir geçmiş dosyasında (covariate ve outcome sütunları) uydurulur, asla bu testin kendi sonuçlarında değil. X atamadan önce ölçüldüğü ve hangi birimlerin bir X'i olduğu da atamadan önce belirlendiği için düzeltilmiş farkın tahmin edilen niceliği aynıdır. Dosyada değeri olmayan bir birim düzeltilmez. Geçerli bir düzeltme yine de düzeltmesizden geniş olabilir, çünkü düzeltilmiş sonucun aralığı daha geniştir; bu yüzden rapor iki aralığı da gösterir ve hangisinin daha dar olduğunu söyler; hiçbir tasarruf iddia etmez.
Yenilik ve etkileşim, gösterilir
novelty: {exposure_column: exposed_at, time_column: at, days: 7} her birimin ilk maruz kalışını atama günlüğünden ve her sonuç satırının zamanını okur ve farkı maruz kalışın ilk days gününde ve sonrasında gösterir. Karara bağlanmış bir erken fark ile karara bağlanmamış ya da ters bir sonraki fark "possibly a novelty effect" olarak adlandırılır. Bölme asla bir kurala karar vermez: bir dilimde satırı olmayan birimler en kötü haliyle sınırlanmaz, o dilimin dışında bırakılır. Satır başına bir sonuç alır, oran ya da ortak değişken almaz.
cluster_column: team birden çok kolun birimlerini barındıran ekipleri sayar ve bir birimin sonucunun başka bir birimin koluna bağlı olup olamayacağını sorar. Olabiliyorsa ekibe göre rastgeleleştirin ve onu birim olarak bildirin.
Birden çok tedavi, oranlar ve ortak değişkenler, 3 Kasım 2026'da bağımsız bir denetim ve onun teyidiyle, iki kolla aynı koşullarda kabul edildi.
Çevrim dışı ve çevrim içi
Çevrim dışı karşılaştırmayı ve metriğini adlandırın (offline_comparison: <id>, offline_metric: pass_rate); yanıt, karar verilen iki yönün uyuşup uyuşmadığını bildirir. Bu raporlanır ve hiçbir şeye karar vermez: bir uyuşmazlık sete bakmak için bir nedendir, sürüm hakkında bir hüküm değildir.
Tuzaklar
- Erken bakmak. Sabit ufuklu bir testi her gün okuyup iyi bir günde durmak sahte kazançları şişirir. Örneklem büyüklüğünü planlayın veya monitoring: anytime bildirin.
- Yenilik ve öğrenme. Kullanıcılar yeni olan her şeye tepki verir, sonra durulur. İlk haftadaki bir artış sönebilir; kullanıcılarınızın döngülerini kapsayacak kadar uzun çalıştırın ve bölmeyi görmek için novelty: bildirin.
- Etkileşim. Aralık, bir birimin sonucunun başka bir birimin koluna bağlı olmadığını varsayar. Paylaşılan stok, pazar yerleri, sosyal özellikler veya bir kolun ısıttığı bir önbellek bunu bozar; bu durumda daha büyük bir birimle (bir bölge, bir ekip) rastgeleleştirin ve kümelerin ne kadar karışık olduğunu görmek için cluster_column: bildirin.
- Değişen bölünme altında kayma. Aralık, dağılımın test boyunca sabit kaldığını ya da değişirken sonuçların kaymadığını varsayar. %10'dan %50'ye bir kademeli artış ya da bir hafta içi günü ve bir hafta sonu boyunca önce 90/10 sonra 10/90, dönemleri her kolda farklı ağırlıklandırır ve farka bir zaman etkisi karıştırır; örnek oranı kontrolü toplu sayıları okur ve bunu görmez. Bölünmeyi sabit tutun ya da yalnızca kademeli artıştan sonraki döneme göre karar verin.
- Birimi değiştirmek. Aynı birimle rastgeleleştirin ve analiz edin. Kullanıcıları rastgeleleştirip oturumları bağımsız saymak aralığı yanlış biçimde daraltır.
Bunun size söyleyemeyecekleri
- Sonucun testin zaman penceresi, bölgesi veya trafiği dışındaki kullanıcılar için geçerli olup olmadığı.
- Testten önce bildirmediğiniz bir metrik hakkında herhangi bir şey; sonradan seçilen bir metrik bir betimlemedir.
- Yönlendiricinizin gerçekten rastgeleleştirip rastgeleleştirmediği: örnek oranı kontrolü büyük hataları yakalar, ince olanları değil.
- Geçmeyenler arasında hangi tedavinin en iyi olduğu: yalnızca geçen tedaviler sıralanır. Tabakalı dağıtım ve switchback tasarımları yapılmadı.