Feature-Flag → Cost-Flag: Engineering-Level Measurement of A/B Test's Real $/User Impact
You want to show a new AI feature to 50% of users to measure impact. Conversion is easy to measure — but the cost difference? This lesson covers adding a cost-flag to each A/B variant, statistical significance, and decision-making with LTV.
Şükrü Yusuf KAYA
18 min read
Intermediate🎯 Yeni feature, yeni maliyet
AI feature'ları büyük çoğunlukla A/B test'le gönderiyorsun. "Convert rate %4 → %5" diyorsun ama her conversion sana ne kadara mal olduğunu bilmiyor olabilirsin. Bu derste o bilgi açığını kapatıyoruz.
Senaryo#
Bir e-ticaret sitesi yeni bir "AI Smart Search" feature'ı çıkarmak istiyor. Normal search yerine LLM-powered semantic search. A/B test:
- Control (50%): Normal Elasticsearch search
- Variant A (50%): GPT-5-mini ile reranked Smart Search
Klasik ölçüm#
| Metrik | Control | Variant A |
|---|---|---|
| Conversion rate | %2.8 | %3.6 |
| AOV (avg order value) | $45 | $48 |
| Revenue per session | $1.26 | $1.728 |
"Variant kazandı!" diyorsun. Ama bekle...
Maliyet katmanı#
| Metrik | Control | Variant A |
|---|---|---|
| LLM cost per search | $0 | $0.012 |
| Searches per session | 3 | 3 |
| LLM cost per session | $0 | $0.036 |
Net per-session ekonomi:
Control: +$1.26 Variant: +$1.728 - $0.036 = +$1.692
Variant net olarak kazandı (1.26), ama gross kazanç ($0.468) ile beklenenden farklı. Maliyet sürprizini tanı.
Cost-Flag Pattern'ı#
A/B testin tüm telemetry'sine etiketi ekle.
variantFeature flag kütüphanesi (GrowthBook, LaunchDarkly, custom)#
from growthbook import GrowthBook def get_search_variant(user_id: str) -> str: gb = GrowthBook(api_host="...", client_key="...") gb.set_attributes({"user_id": user_id}) if gb.is_on("smart_search_experiment"): return "variant_a" return "control" # LLM çağrısı def perform_search(query: str, user_id: str): variant = get_search_variant(user_id) if variant == "control": return elasticsearch_search(query) # Variant A — LLM-powered response = completion( model="gpt-5-mini", messages=[ {"role": "system", "content": "Rerank search results semantically..."}, {"role": "user", "content": query}, ], metadata={ "tenant_id": ..., "user_id": user_id, "feature": "smart_search", "variant": variant, # ← KEY "experiment_id": "smart_search_experiment", }, ) return llm_rerank(response, base_results)
Variant tag artık her LLM çağrısının metadata'sında.
Variant Dashboard#
ClickHouse / Langfuse'a şu sorgu:
SELECT JSONExtractString(raw_metadata, 'variant') AS variant, count() AS total_requests, sum(cost_total_usd) AS total_cost, avg(cost_total_usd) AS avg_cost_per_request, count(DISTINCT user_id) AS users FROM llm_telemetry.requests WHERE ts >= '2026-04-01' AND JSONExtractString(raw_metadata, 'experiment_id') = 'smart_search_experiment' GROUP BY variant
Bir hafta sonraki rapor#
| variant | requests | cost | $/request | users | $/user |
|---|---|---|---|---|---|
| control | 0 | $0 | $0 | 12.500 | $0 |
| variant_a | 84.000 | $1.008 | $0.012 | 12.300 | $0.082 |
Şimdi conversion ile çarp:
- Control conversions: 12.500 × %2.8 = 350 → $0/conversion
- Variant conversions: 12.300 × %3.6 = 443 → 2.28/extra-conversion**
Variant'ın maliyet-başına-conversion maliyeti 48 ise, gross margin (önceki maliyetler hariç) $45.72. Hâlâ değer var.
Statistical Significance — Cost Boyutu#
Conversion için iyi bildiğin t-test, ki-kare. Cost boyutu için biraz farklı:
Per-user cost dağılımı#
Variant A 12.300 kullanıcının her birinin LLM maliyeti: 90 percentile: $0.20 50 percentile: $0.04 10 percentile: $0.01 Mean: $0.082 Std dev: $0.18 ← yüksek (power user'lar var)
Cost dağılımı log-normal. Standart Welch t-test ucundan tutar.
Pratik yaklaşım#
- Median ve P90'ı karşılaştır (mean'in yanı sıra)
- Power user'ları ayrı analiz et (top %10)
- Multiple metrics aynı anda — conversion ↑ ve cost/user ↓ aynı anda?
- Confidence interval'lar ile karar ver, p-value'ya saplanma
Kullanışlı statsmodels örneği#
import scipy.stats as st control_revenue_per_user = ... # array variant_revenue_per_user = ... control_cost_per_user = ... variant_cost_per_user = ... # Net (revenue - cost) farkı için Welch test control_net = control_revenue_per_user - control_cost_per_user variant_net = variant_revenue_per_user - variant_cost_per_user t, p = st.ttest_ind(variant_net, control_net, equal_var=False) print(f"Net mean lift: {variant_net.mean() - control_net.mean():.2f}") print(f"p-value: {p:.4f}")
LTV-Aware Karar#
Sadece o anki maliyet/conversion bakma — LTV (lifetime value) hesaba kat.
Variant A: Extra revenue per user (lifetime): $48 × 1.2× LTV multiplier = $57.6 Extra cost per user (lifetime): $0.082 × 12 ay = $0.984 Net LTV impact: +$56.6 per user
Bir feature short-term'de pahalı görünürse de LTV uzun-dönemde pozitif olabilir. Aksine — short-term ucuz feature LTV'yi düşürürse uzun-dönemde kötü.
Modül 16'da unit economics çerçevesinde detaylı.
A/B Testte Abuse İzleme#
A/B test sırasında dikkat: %0.1 kullanıcı toplam variant maliyetinin %30-50'sini yapar. Power user'lar abuse'a yakın.
SELECT user_id, sum(cost_total_usd) AS user_cost, count() AS requests FROM llm_telemetry.requests WHERE JSONExtractString(raw_metadata, 'variant') = 'variant_a' AND ts >= '2026-04-01' GROUP BY user_id HAVING user_cost > 50 -- anormal harcayanları yakala ORDER BY user_cost DESC
Bu listenin başındaki kullanıcılar:
- Gerçek heavy user mı?
- Otomasyon (bot) mı?
- Prompt injection abuse mu?
Modül 4.5'te bu sorunu detaylı ele alıyoruz.
📋 A/B test karar checklist'i
Bir AI feature A/B testini "shipped" yapmadan önce: (1) Conversion lift istatistiksel anlamlı mı? (2) Cost per user dağılımı (P50, P90, P99) ne? (3) Net revenue per user (revenue - LLM cost) pozitif mi? (4) LTV projeksiyonu nedir? (5) Top 1% kullanıcı abuse'lu mu? Beş soruya beş 'EVET' = ship.
▶️ Sıradaki ders
4.3 — LiteLLM Virtual Keys. Cost attribution'ı altyapı seviyesinde otomatize et. Her tenant'a kendi virtual key'i, otomatik budget enforcement, model whitelist. Production-grade SaaS mimarisi.
Frequently Asked Questions
Yes, simple hash-based bucketing works: hash(user_id) % 100 < 50 ? 'control' : 'variant'. What matters is being deterministic and sticky. Feature flag tools add analytics and automation — not required for starting.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
Module 0: Why Cost, Why Now?
The AI Cost Explosion: Why Token Prices Fell 96% from 2022 to 2026 — Yet Bills Grew 40×
Start LearningModule 0: Why Cost, Why Now?
Unit Economics Vocabulary: COGS, Gross Margin, $/User, Contribution Margin — 9 Financial Concepts Every AI Engineer Must Know
Start LearningModule 0: Why Cost, Why Now?