Giriş: Geleneksel A/B Testinin Gizli Maliyeti
Dijital dünyada büyüme ve dönüşüm optimizasyonu denildiğinde akla gelen ilk araç klasik A/B testidir. Trafiği ikiye böleriz (%50 Varyasyon A, %50 Varyasyon B), sistemi bir iki hafta boyunca kendi haline bırakırız ve yeterli istatistiksel anlamlılığa ulaştığımızda (genellikle %95 güven aralığı ile p-değeri hesaplayarak) kazananı ilan ederiz. Kulağa son derece bilimsel ve güvenli gelen bu yöntem, aslında arkasında devasa bir finansal sızıntı barındırır: Fırsat Maliyeti (Regret).
Klasik bir A/B testinde, test süresi boyunca trafiğinizin yarısını daha düşük performans gösteren varyasyona feda edersiniz. Eğer Varyasyon A'nın dönüşüm oranı %5, Varyasyon B'nin ise %2 ise, testin tamamlanması için gereken binlerce oturum boyunca kullanıcılarınızın yarısına göz göre göre kötü performans gösteren deneyimi sunmaya devam edersiniz. Google Analytics Help dokümantasyonuna göre, bu süreçte oluşan trafik ve dönüşüm kaybı işletmeler için ciddi bir mali yük oluşturur.
Peki, test süreci boyunca verileri gerçek zamanlı analiz edip, daha iyi performans gösteren varyasyona giden trafiği dinamik olarak artırsaydık ve kötü olanı yavaşça elerken hiçbir kullanıcıyı kaybetmeseydik nasıl olurdu? İşte bu noktada sahneye Multi-Armed Bandit (MAB - Çok Kollu Haydut) algoritmaları ve bu algoritmalara sınırsız yakıt sağlayan Büyük Dil Modelleri (LLM'ler) giriyor. Trafiğinizi feda etmeden binlerce varyasyonu aynı anda yarıştırmak mümkün mü? Gelin, bu yeni nesil optimizasyon mimarisinin nasıl çalıştığını adım adım inceleyelim.
Multi-Armed Bandit (MAB) Nedir?
Ne?
Multi-Armed Bandit (MAB), adını kumarhanelerdeki tek kollu haydut (slot makinesi) benzetmesinden alır. Elinizde belirli bir miktar jeton olduğunu ve karşınızda her biri farklı ödeme oranlarına sahip yan yana dizilmiş slot makineleri bulunduğunu hayal edin. Amacınız, en çok kazandıran makineyi (en yüksek dönüşüm oranına sahip başlığı veya görseli) bulup tüm paranızı oraya yatırmak, ancak bunu yaparken hangi makinenin ne kadar kazandırdığını keşfetmek için de bir miktar jeton harcamaktır.
Nasıl Çalışır?
MAB, istatistikteki "Keşif ve Sömürü" (Exploration vs. Exploitation) dengesini yönetir. Sistem, yeni veya performansı henüz netleşmemiş varyasyonları test etmek için trafiğin küçük bir kısmını feda eder (Keşif). Geri kalan büyük trafik payını ise o ana kadar en yüksek dönüşümü getirdiği kesinleşen varyasyona yönlendirir (Sömürü). Geleneksel A/B testinin aksine trafik dağılımı statik değil, saniyeler içinde değişen dinamik bir yapıya sahiptir.
Ne Zaman İşe Yarar?
- Kısa Ömürlü Kampanyalar: Hafta sonu indirimleri veya anlık haber portalları gibi 2-3 hafta sürecek klasik bir testi bekleyecek vakti olmayan dinamik içeriklerde.
- Çok Varyasyonlu Durumlar: LLM'ler tarafından üretilen 50 farklı başlık varyasyonunun aynı anda yarıştırılması gerektiğinde.
- Kişiselleştirme: Kullanıcının coğrafyası, cihazı veya saati gibi bağlamsal (Contextual) verilerin karara etki ettiği senaryolarda.
LLM ile Varyasyon Üretim Altyapısı: Prompt Mühendisliği ve Sıcaklık Ayarı
Bandit algoritmasının başarılı olabilmesi için kaliteli girdilere, yani dönüşüm potansiyeli yüksek içerik varyasyonlarına ihtiyacı vardır. Bu varyasyonları manuel olarak yazmak operasyonel bir darboğaz yaratır. Çözüm, OpenAI API gibi gelişmiş LLM servislerini dinamik birer içerik fabrikası olarak kullanmaktır.
Ancak, bir yazılım mimarisinde LLM'lerden gelen ham metinleri doğrudan kullanamayız. Kodumuzun gelen yanıtı hatasız ayrıştırabilmesi (parse) gerekir. OpenAI Developer Blog verilerine göre, Structured Outputs (JSON Schema) kullanımı ile elde edilen JSON şemasına tam uyumluluk ve sıfır formatlama hatası oranı (%100 başarı) elde etmek mümkündür.
İçerik üretiminde yaratıcılık ile teknik tutarlılık arasındaki dengeyi kurmak için temperature (sıcaklık) parametresini 0.2 ile 0.5 arasında tutmalıyız. Çok yüksek bir değer (örneğin 0.9) dil modelinin saçmalamasına ve JSON formatını bozmasına neden olabilir; çok düşük bir değer (örneğin 0.0) ise birbirinin neredeyse aynısı, yaratıcılıktan uzak başlıklar üretir.
Örnek Python Yapılandırması ve Prompt
from pydantic import BaseModel
from openai import OpenAI
client = OpenAI()
class HeadlineVariations(BaseModel):
variations: list[str]
# OpenAI Structured Outputs kullanımı
completion = client.beta.chat.completions.parse(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Sen dönüşüm odaklı bir metin yazarısın. Verilen ürün için dikkat çekici, tıklama oranı yüksek 5 farklı alternatif başlık üret."},
{