Ders 22 / 24
Dönüşüm Hunisi
Ödünç alma akışının adım adım terk çözümlemesi, en yüksek terk oranı ile en çok kullanıcı kaybının farklı adımlarda olması ve topluluştırılmış huninin kesim farklarını gizlemesi.
İçindekiler
Önceki ders bir görevin bütününü ölçtü: tamamlandı mı, ne kadar sürdü, kaç hata yapıldı. On dört oturumun üçü görevi tamamlayamamıştı. Ölçülmeyen şey, o üç oturumun nerede kaldığı.
Bu soru küçük örneklemli testle değil, tüm kullanıcıların davranış kaydıyla yanıtlanır. Dönüşüm hunisi (conversion funnel), bir görevi sıralı adımlara bölüp her adımı kaç kullanıcının geçtiğini sayan çözümlemedir. Katalog arayüzünde huninin adımları ödünç alma akışıdır: arama, sonuç listesi, kayıt ayrıntısı, nüsha seçimi, ödünç onayı, tamamlanma.
Huninin Üç Sütunu
Her adım için üç ayrı sayı vardır ve karıştırılırlar.
Adım dönüşümü (step conversion), bir adıma girenlerin sonrakine geçme oranıdır.
Terk oranı (drop-off rate), aynı adımda ayrılanların oranıdır; adım dönüşümünün tümleyenidir.
Kümülatif dönüşüm, ilk adıma girenlerin o adıma kadar ulaşma oranıdır. Genel dönüşüm, adım dönüşümlerinin çarpımıdır — huninin en önemli yapısal özelliği budur.
// huni.mjs — odunc alma akisinin adim adim terk cozumlemesi const HUNI = [ ["arama yapildi", 10000], ["sonuc listesi goruldu", 8200], ["kayit ayrintisi acildi", 5330], ["nusha secildi", 4530], ["odunc onayi acildi", 2500], ["odunc tamamlandi", 2350], ]; function wilson(k, N, z = 1.96) { const p = k / N, d = 1 + z * z / N; const m = (p + z * z / (2 * N)) / d; const y = (z * Math.sqrt(p * (1 - p) / N + z * z / (4 * N * N))) / d; return [m - y, m + y]; } console.log("adim giren cikan adim donusumu terk orani kaybedilen kumulatif"); for (let i = 1; i < HUNI.length; i++) { const giren = HUNI[i - 1][1], cikan = HUNI[i][1]; const oran = cikan / giren; const [a, u] = wilson(cikan, giren); console.log( `${HUNI[i][0].padEnd(24)} ${String(giren).padStart(6)} ${String(cikan).padStart(6)}` + ` ${((oran * 100).toFixed(1) + " %").padStart(14)} ${(((1 - oran) * 100).toFixed(1) + " %").padStart(11)}` + ` ${String(giren - cikan).padStart(11)} ${((cikan / HUNI[0][1] * 100).toFixed(1) + " %").padStart(10)}` + ` [${(a * 100).toFixed(1)}, ${(u * 100).toFixed(1)}]` ); } const genel = HUNI[HUNI.length - 1][1] / HUNI[0][1]; console.log(`genel donusum: ${(genel * 100).toFixed(2)} %`); // En buyuk terk orani ile en buyuk kullanici kaybi ayni adim mi let enYuksekOran = 1, enYuksekOranAdim = "", enCokKayip = 0, enCokKayipAdim = ""; for (let i = 1; i < HUNI.length; i++) { const oran = HUNI[i][1] / HUNI[i - 1][1], kayip = HUNI[i - 1][1] - HUNI[i][1]; if (oran < enYuksekOran) { enYuksekOran = oran; enYuksekOranAdim = HUNI[i][0]; } if (kayip > enCokKayip) { enCokKayip = kayip; enCokKayipAdim = HUNI[i][0]; } } console.log(`\nen yuksek terk orani: ${enYuksekOranAdim} (${((1 - enYuksekOran) * 100).toFixed(1)} %)`); console.log(`en cok kullanici kaybi: ${enCokKayipAdim} (${enCokKayip} kullanici)`); // Her adimi 0.98'e cikarmanin genel donusume etkisi (huni carpimsaldir) console.log("\nadim simdiki oran 0.98'e cikarsa genel donusum bagil kazanc"); for (let i = 1; i < HUNI.length; i++) { const oran = HUNI[i][1] / HUNI[i - 1][1]; const yeni = genel * (0.98 / oran); console.log( `${HUNI[i][0].padEnd(24)} ${((oran * 100).toFixed(1) + " %").padStart(13)}` + ` ${((yeni * 100).toFixed(2) + " %").padStart(28)} ${("x" + (yeni / genel).toFixed(2)).padStart(13)}` ); } // Toplulastirilmis huni iki kesimi gizleyebilir const KESIMLER = { "ilk kez gelen": [6000, 4800, 2900, 2400, 900, 820], "kayitli kullanici": [4000, 3400, 2430, 2130, 1600, 1530], }; console.log("\nkesim n adim donusumleri genel"); for (const [ad, v] of Object.entries(KESIMLER)) { const oranlar = []; for (let i = 1; i < v.length; i++) oranlar.push((v[i] / v[i - 1] * 100).toFixed(1) + "%"); console.log(`${ad.padEnd(19)} ${String(v[0]).padStart(5)} ${oranlar.join(" ").padEnd(40)} ${(v[v.length - 1] / v[0] * 100).toFixed(2)} %`); } const toplam = HUNI.map((_, i) => Object.values(KESIMLER).reduce((a, v) => a + v[i], 0)); const toplamOran = []; for (let i = 1; i < toplam.length; i++) toplamOran.push((toplam[i] / toplam[i - 1] * 100).toFixed(1) + "%"); console.log(`${"toplulastirilmis".padEnd(19)} ${String(toplam[0]).padStart(5)} ${toplamOran.join(" ").padEnd(40)} ${(toplam[5] / toplam[0] * 100).toFixed(2)} %`); // Dorduncu adimda iki kesimin farki gercek mi const [a1, u1] = wilson(KESIMLER["ilk kez gelen"][4], KESIMLER["ilk kez gelen"][3]); const [a2, u2] = wilson(KESIMLER["kayitli kullanici"][4], KESIMLER["kayitli kullanici"][3]); console.log(`\nodunc onayina gecis ilk kez gelen [${(a1 * 100).toFixed(1)}, ${(u1 * 100).toFixed(1)}] kayitli [${(a2 * 100).toFixed(1)}, ${(u2 * 100).toFixed(1)}] araliklar ${u1 < a2 || u2 < a1 ? "ayrik" : "ortusuyor"}`);
adim giren cikan adim donusumu terk orani kaybedilen kumulatif sonuc listesi goruldu 10000 8200 82.0 % 18.0 % 1800 82.0 % [81.2, 82.7] kayit ayrintisi acildi 8200 5330 65.0 % 35.0 % 2870 53.3 % [64.0, 66.0] nusha secildi 5330 4530 85.0 % 15.0 % 800 45.3 % [84.0, 85.9] odunc onayi acildi 4530 2500 55.2 % 44.8 % 2030 25.0 % [53.7, 56.6] odunc tamamlandi 2500 2350 94.0 % 6.0 % 150 23.5 % [93.0, 94.9] genel donusum: 23.50 % en yuksek terk orani: odunc onayi acildi (44.8 %) en cok kullanici kaybi: kayit ayrintisi acildi (2870 kullanici) adim simdiki oran 0.98'e cikarsa genel donusum bagil kazanc sonuc listesi goruldu 82.0 % 28.09 % x1.20 kayit ayrintisi acildi 65.0 % 35.43 % x1.51 nusha secildi 85.0 % 27.10 % x1.15 odunc onayi acildi 55.2 % 41.73 % x1.78 odunc tamamlandi 94.0 % 24.50 % x1.04 kesim n adim donusumleri genel ilk kez gelen 6000 80.0% 60.4% 82.8% 37.5% 91.1% 13.67 % kayitli kullanici 4000 85.0% 71.5% 87.7% 75.1% 95.6% 38.25 % toplulastirilmis 10000 82.0% 65.0% 85.0% 55.2% 94.0% 23.50 % odunc onayina gecis ilk kez gelen [35.6, 39.5] kayitli [73.2, 76.9] araliklar ayrik
En Yüksek Terk Oranı ile En Büyük Kayıp Aynı Adım Değildir
İlk tablo iki farklı “en kötü adım” veriyor. Terk oranı en yüksek adım ödünç onayına geçiş: yüzde 44.8. En çok kullanıcı kaybeden adım ise kayıt ayrıntısının açılması: 2870 kullanıcı.
Fark, adımların farklı büyüklükteki kitlelerle çalışmasından gelir. Kayıt ayrıntısı adımına 8200 kullanıcı giriyor; yüzde 35’lik terk 2870 kişi ediyor. Ödünç onayı adımına 4530 kullanıcı giriyor; daha yüksek olan yüzde 44.8’lik terk 2030 kişi ediyor.
İki sayı iki farklı soruya yanıt verir. Terk oranı adımın kendisinin ne kadar kötü olduğunu söyler; kaybedilen kullanıcı sayısı o adımın toplam kayba katkısını söyler. Bir rapor yalnız birini yazarsa, okuyan kişi diğerini varsayar.
Çarpımsal Huni ve İyileştirme Payı
İkinci tablo hangi adıma müdahale edileceğini belirliyor ve yanıt üçüncü bir sıralama veriyor.
Genel dönüşüm adım oranlarının çarpımı olduğu için, bir adımın oranını ’den ’ye çıkarmak genel dönüşümü katına çıkarır. Bu oran yalnızca o adımın mevcut oranına bağlıdır; adıma kaç kullanıcının girdiğine bağlı değildir.
Tabloda her adımın oranı 0.98’e çıkarılırsa ne olacağı hesaplanmış. En büyük bağıl kazanç ödünç onayı adımından geliyor: x1.78, yani genel dönüşüm yüzde 23.50’den 41.73’e. Kayıt ayrıntısı adımı — en çok kullanıcı kaybeden adım — x1.51 veriyor. Tamamlanma adımı, oranı zaten yüzde 94 olduğu için yalnızca x1.04.
Kural: iyileştirme payı en düşük oranlı adımdadır, en çok kullanıcı kaybeden adımda değil. Sezgi ters yönde çalışır; en çok kişinin ayrıldığı yer en acil sorun gibi görünür.
Hesabın iki varsayımı yazılmalıdır. Birincisi, adımlar birbirinden bağımsız sayılmıştır: bir adımın iyileştirilmesi sonraki adımların oranını değiştirmez. Gerçekte değiştirebilir — daha çok kararsız kullanıcıyı bir sonraki adıma taşımak o adımın oranını düşürebilir. İkincisi, 0.98 hedefi ulaşılabilirlik hesabı değil, ortak bir tavan olarak seçilmiştir; her adım oraya çıkarılamaz. Tablo bir öncelik sıralaması verir, bir vaat değil.
Topluluştırılmış Huni Kesimleri Gizler
Üçüncü tablo huninin en yaygın hatasını gösteriyor. Ödünç onayına geçiş adımının topluluştırılmış oranı yüzde 55.2. Aynı adım, ilk kez gelen kullanıcılarda yüzde 37.5, kayıtlı kullanıcılarda yüzde 75.1.
Yüzde 55.2 hiçbir kullanıcı kesimini tarif etmiyor; iki farklı davranışın karışım oranından doğan bir sayı. Bu adıma yapılacak müdahale ilk kez gelen kullanıcıya göre tasarlanmalı; topluluştırılmış sayıya bakan biri sorunun büyüklüğünü yarı yarıya küçümser.
Son satır farkın gerçek olup olmadığını sınıyor. İlk kez gelen kesimin yüzde 95 güven aralığı [35.6, 39.5], kayıtlı kesimin [73.2, 76.9]. Aralıklar ayrık; fark örneklem dalgalanmasıyla açıklanamaz.
Bu ayrım, davranış tasarımı konusundaki çerçeveye doğrudan bağlanır. İlk kez gelen kullanıcı ödünç onayı ekranında üye kaydı, teslim şubesi ve süre kararlarıyla karşılaşır; kayıtlı kullanıcının bu kararları zaten verilmiştir. Yetenek farkı bir motivasyon farkı değildir ve motivasyon artırmaya çalışan bir müdahale bu adımda işe yaramaz.
Huniyi Kurmanın Kuralları
Adımlar kullanıcının görevine göre tanımlanır. “Sayfa görüntülendi” bir adım değildir; “nüsha seçildi” adımdır. Arayüzün iç olaylarına göre kurulan huni, kullanıcının nerede takıldığını değil sistemin ne kaydettiğini gösterir.
Terk oranı ile kayıp sayısı birlikte yazılır. Biri adımın kalitesini, diğeri katkısını verir.
Her adım oranı güven aralığıyla verilir. Onbinlik bir huninin son adımlarında kullanıcı sayısı hızla azalır; son adımlardaki oranlar daha belirsizdir.
Huni en az bir boyutta ayrıştırılır. İlk kez gelen ile kayıtlı kullanıcı, dar ekran ile geniş ekran, arama ile gezinmeyle gelen. Ayrıştırma yapılmadan bulunan “en kötü adım” çoğu zaman bir karışım etkisidir.
Huni nedeni söylemez. Ödünç onayı adımında ilk kez gelenlerin yüzde 62.5’i çıkıyor; niçin çıktıkları bu tabloda yok. Huni, hangi adıma bakılacağını söyler.
Özet
- Dönüşüm hunisi görevi sıralı adımlara böler; genel dönüşüm adım oranlarının çarpımıdır.
- En yüksek terk oranı ile en çok kullanıcı kaybı farklı adımlarda olabilir: hesapta ödünç onayı adımı yüzde 44.8 terkle en kötü oran, kayıt ayrıntısı adımı 2870 kullanıcıyla en büyük kayıp.
- İyileştirme payı adımın mevcut oranına bağlıdır, kullanıcı sayısına değil; en düşük oranlı adımı 0.98’e çıkarmak genel dönüşümü x1.78, en çok kayıp veren adımı çıkarmak x1.51 katına taşıyor.
- Hesap adımları bağımsız varsayar ve 0.98’i ortak tavan alır; çıktısı bir öncelik sıralamasıdır, ulaşılabilir bir hedef değil.
- Topluluştırılmış huni kesimleri gizler: yüzde 55.2’lik adım oranı, yüzde 37.5 ile 75.1 arasında iki ayrı davranışın karışımıdır ve güven aralıkları ayrıktır.
- Huni hangi adıma bakılacağını söyler, o adımda ne olduğunu söylemez.
Sonraki Adım
Huni bir adımın kötü olduğunu gösterdiğinde sıradaki iş bir değişiklik denemektir. Ama değişiklikten sonra ölçülen sayının farklı çıkması, değişikliğin işe yaradığı anlamına gelmez; huni oranları haftadan haftaya kendiliğinden oynar. Sonraki ders bu ayrımı kurar: bir değişikliği denemek için kaç kullanıcı gerekir, ölçülen fark ne zaman gerçektir, deneyi erken durdurmak yanlış sonucu niçin şişirir ve aynı anda birkaç değişikliği sınamak hangi düzeltmeyi gerektirir?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.