Başlık Testlerinde Klasik A/B'yi Terk Etmek: Optimizely'nin Çok Kollu Haydut (MAB) Geçişi
Statik A/B testlerinde, 'kaybeden' varyasyonun getirdiği trafik ve dönüşüm kaybını sessizce kabullenmek zorunda değilsiniz.
Vaka Özeti: Klasik Testlerin Çıkmazı
Dijital optimizasyonun altın standardı olarak kabul edilen geleneksel A/B testleri, büyük dil modellerinin (LLM) hayatımıza girmesiyle birlikte ciddi bir ölçeklenebilirlik kriziyle karşı karşıya kaldı. Klasik t-testi ve p-değeri yaklaşımları, iki ya da üç varyasyonu test etmek için tasarlanmıştır. Ancak elinizde GPT-4 API'si ile saniyeler içinde üretilmiş 50 farklı başlık varyasyonu olduğunda, geleneksel hipotez testleri işlevsizleşir.
Optimizely, bu mühendislik çıkmazını aşmak için statik trafik dağıtımına dayanan klasik A/B testi modelinden, dinamik ve gerçek zamanlı bir optimizasyon tekniği olan Çok Kollu Haydut (Multi-Armed Bandit - MAB) algoritmasına geçiş kararı aldı. Bu karar, yalnızca istatistiksel bir tercih değil; aynı zamanda öğrenme sürecinde kaybedilen dönüşüm fırsatlarını (regret) minimize etmeyi hedefleyen finansal bir zorunluluktu.
Teknik Problem: 'Öğrenme Süreci Maliyeti' ve Varyasyon Bolluğu
Geleneksel A/B testlerinde, test süresi boyunca tüm varyasyonlara eşit oranda (örneğin 4 varyasyon için %25/%25/%25/%25) trafik gönderilir. İstatistiksel anlamlılığa (örneğin %95 güven aralığına) ulaşana kadar bu oranlar değiştirilmez. Bu durum, test tamamlanana kadar zayıf performans gösteren varyasyonlara da binlerce kullanıcının yönlendirilmesine, dolayısıyla doğrusal bir dönüşüm kaybına (linear regret, O(T)) yol açar.
İşin içine LLM'lerin ürettiği yüzlerce içerik varyasyonu girdiğinde ise istatistiksel bir felaket yaşanır: Çoklu Karşılaştırma Problemi (Multiple Testing Problem). Optimizely Stats Engine teknik dökümantasyonuna göre, %5 anlamlılık seviyesinde (alpha=0.05) 100 farklı LLM varyasyonunun aynı anda test edilmesi durumunda en az bir yalancı pozitif (Tip I hata) elde etme olasılığı %99.4'e fırlar. Bu hatayı engellemek için kullanılan Bonferroni düzeltmesi gibi yöntemler ise ihtiyaç duyulan örneklem boyutunu (sample size) o kadar devasa seviyelere çıkarır ki, testleri pratikte imkansız kılar.
MAB Nasıl Çalışır? Thompson Örneklemesinin Matematiksel Arka Planı
Multi-Armed Bandit algoritmaları, keşif (exploration) ve sömürü (exploitation) arasındaki dengeyi dinamik olarak yönetir. Algoritma, yüksek performans gösteren varyasyonların ağırlığını gerçek zamanlı olarak artırarak kümülatif kaybı logaritmik seviyeye (O(log T)) indirger.
Optimizely, bu süreçte Thompson Örneklemesi (Thompson Sampling) algoritmasını kullanır. Thompson Örneklemesi, Bayesyen bir yaklaşımdır ve olasılık dağılımlarını temel alır. Dönüşüm oranlarını tek bir statik değer olarak tahmin etmek yerine, her varyasyon için bir Beta Dağılımı (Beta Distribution) tanımlanır.
Beta dağılımı iki parametre ile yönetilir:
- $\alpha$ (başarı / dönüşüm sayısı)
- $\beta$ (başarısızlık sayısı)
Her yeni kullanıcı sisteme geldiğinde, her varyasyonun Beta dağılımından rastgele bir olasılık değeri örneklenir (sample edilir). En yüksek değeri alan varyasyon, o kullanıcıya gösterilir. Kullanıcının aksiyonuna göre (tıklama veya dönüşüm) ilgili varyasyonun $\alpha$ veya $\beta$ parametresi güncellenir. Böylece, başarılı varyasyonların dağılımı sağa (1'e doğru) kayarken, başarısız varyasyonlarınki sola (0'a doğru) kayar ve sonraki örneklemelerde seçilme şansları dinamik olarak azalır.
Uygulama Mimarisi: GPT-4 ve MAB Motoru Entegrasyonu
Sistem, şu adımlarla gerçek zamanlı bir döngü halinde çalışır:
- Varyasyon Üretimi: GPT-4 API'sine gönderilen bir prompt ile (örneğin:
"Abonelik sayfasındaki ana başlık için dönüşüm odaklı 50 farklı varyasyon üret.") zengin bir havuz oluşturulur. - Soğuk Başlangıç (Cold Start) Çözümü: Başlangıçta hiçbir varyasyon hakkında veri yoktur. Optimizely, bu problemi aşmak için her varyasyona başlangıç parametresi olarak Beta(1,1) atar. Bu, düzgün (uniform) bir dağılımdır; yani başlangıçta tüm varyasyonlar eşit şansla başlar.
- Gerçek Zamanlı CTR Takibi: Kullanıcı web sitesine girdiğinde MAB Motoru, Thompson Örneklemesi yaparak en uygun varyasyonu seçer ve kullanıcıya sunar. Tıklama gerçekleştiğinde (CTR) parametreler anlık güncellenir.
- Bağlamsal Kişiselleştirme (Contextual Bandits): Sistem yalnızca genel dönüşüm oranına bakmaz; kullanıcının coğrafi konumu, cihazı ve tarayıcı dili gibi bağlamsal verileri de Beta güncellemelerine dahil ederek kişiselleştirilmiş eşleşmeler sunar.
Sonuçlar ve Metrikler
Optimizely'nin klasik A/B testlerinden Thompson Sampling tabanlı MAB modeline geçişiyle elde edilen performans verileri şu şekildedir:
- Dönüşüm Artışı: Klasik A/B testlerine kıyasla kümülatif dönüşüm oranında (conversion rate) %24'lük net bir artış sağlandı.
- Test Süresi: İstatistiksel anlamlılık için haftalarca beklemek yerine, algoritma zayıf varyasyonları ilk birkaç saat içinde elediği için toplam test süresinde %40 oranında bir kısalma ölçüldü.
- Kayıp Minimizasyonu: Cornell University arXiv raporlarında belirtilen teorik $O(\log T)$ kümülatif dönüşüm kaybı (regret) eğrisi, pratik uygulamada da doğrulanarak zayıf varyasyonlara giden trafik maliyeti minimize edildi.
Transfer Edilebilir Ders: 'mabwiser' ile Kendi MAB Altyapınızı Kurun
Kendi içerik altyapınızda bu sistemi uygulamak için karmaşık SaaS araçlarına bağımlı değilsiniz. Fidelity tarafından açık kaynaklı olarak geliştirilen mabwiser Python kütüphanesi, Thompson Sampling ve Contextual Bandit algoritmalarını hızlıca hayata geçirmenizi sağlar.
İşte basit bir Thompson Örneklemesi uygulaması için kullanabileceğiniz Python şablonu:
from mabwiser.mab import MAB, LearningPolicy, NeighborhoodPolicy
# LLM tarafından üretilen 3 farklı başlık varyasyonu (kollar)
variations = ["baslik_1", "baslik_2", "baslik_3"]
# Thompson Sampling ile MAB modelinin başlatılması
mab = MAB(arms=variations,
learning_policy=LearningPolicy.ThompsonSampling())
# Soğuk başlangıç verileri (Geçmiş tıklama/tıklamama verileri)
# Her satır: [varyasyon, ödül (1=tıklandı, 0=tıklanmadı)]
historical_decisions = ["baslik_1", "baslik_2", "baslik_3", "baslik_1"]
historical_rewards = [1, 0, 1, 0]
# Modeli eğit
mab.fit(decisions=historical_decisions, rewards=historical_rewards)
# Bir sonraki kullanıcıya hangi başlığın gösterileceğini seç
next_best_variation = mab.predict()
print(f"Gösterilmesi gereken başlık: {next_best_variation}")
Önemli Risk Uyarısı: MAB algoritmaları dönüşümü maksimize etmek için mükemmeldir ancak nedensellik (causality) analizi için uygun değildir. Eğer amacınız akademik olarak "hangi kelimenin neden daha iyi performans gösterdiğini" kesin istatistiksel güven aralıklarıyla kanıtlamaksa, MAB kullanımı yanıltıcı olabilir. Çünkü sistem zayıf varyasyonlara giden trafiği hızla kestiğinden, o varyasyonlar hakkında yeterli veri toplanamaz ve uzun vadeli bilimsel çıkarımlar yapılamaz.
Sıkça sorulanlar
Çok Kollu Haydut (Multi-Armed Bandit - MAB) nedir?
MAB, geleneksel A/B testlerinin aksine, yüksek performans gösteren varyasyonların ağırlığını gerçek zamanlı olarak artıran ve test süresince kaybedilen dönüşüm fırsatlarını (regret) minimize eden dinamik bir optimizasyon algoritmasıdır.Thompson Örneklemesi (Thompson Sampling) nasıl çalışır?
Bayesyen bir yaklaşım olan Thompson Örneklemesi, her varyasyon için başarı ve başarısızlık sayılarına göre bir Beta Dağılımı tanımlar. Her yeni kullanıcıda bu dağılımlardan rastgele olasılık değerleri örneklenerek en yüksek skora sahip varyasyon dinamik olarak seçilir.MAB algoritmasının klasik A/B testine göre avantajı nedir?
Klasik A/B testleri istatistiksel anlamlılığa ulaşana kadar zayıf varyasyonlara eşit trafik göndererek dönüşüm kaybına yol açar. MAB ise kötü varyasyonları hızla eleyerek test süresini %40 oranında kısaltır ve dönüşümleri artırır.