A/B-ball hisoblash qoidalari testlari
Ochkolar har qanday geymifikatsiyaning yuragidir. O’yinchilarning xatti-harakati, ishtirok etish tuzilmasi va iqtisodiyoti (ARPPU, bonus-suyaklar) ochkolar aniq hisoblanishiga bog’liq. Quyida - ko’zoynakning yangi qoidasini sinab ko’rish va metrikaning o’sishi artefakt emas, balki haqiqiy ekanligiga ishonch hosil qilish uchun amaliy retsept.
1) Aynan nimani sinovdan o’tkazamiz
Qoidalar namunalari:- Stavkalar summasi bo’yicha: har bir €1 stavka uchun 1 ball.
- Multiplikator bo’yicha win/bet: ko’zoynak = × ko’paytirgich, har bir stavka uchun kapi bilan.
- Gibrid: aylanma uchun ochkolar + «seriya» uchun bust (ketma-ket N spin), bir daqiqa/soat bo’yicha kaplar.
- Missiyalar: murakkab vazifalar (T1...Tn) ni bajarish uchun fix-ochkolar.
Gipoteza (misol): «Model «multiplikator + kap» Net ARPPU (sovrinlar/bonuslardan keyin) yomonlashmasdan participation_net va completion rate oshiradi «.
2) Eksperimental birlik va randomizatsiya
Birlik: foydalanuvchi (seans emas, qurilma emas).
Taqsimoti: statik xesh (user_id → bucket) A/B/C. uchun 50/50 yoki 33/33/33 ulushlari
Stratifikatsiya (tavsiya etiladi): payer-status (yangi to’lovchilar/qayta to’lovchilar/to’lamaydiganlar), platforma, geo.
Sticky-assignment: foydalanuvchi har doim test davomida bir xil qoidani koʻradi.
SRM (Sample Ratio Mismatch) ni tekshirish: har kuni guruhlarning haqiqiy ulushlarini kutilgan (hi-kvadrat) bilan solishtiring. SRM - trafikning chiqib ketishi, noto’g’ri filtrlash, nuqsonlar.
3) Metrika va «ko’zoynak hunisi»
Faollik va ishtirok etish
Reach: tadbirni ko’rganlar ulushi.
Participation_gross :/eligible.
Participation_net: progress/eligible.
Completion: tugadi/boshladi.
Sifat va pul
ΔDAU/WAU и stickiness (DAU/WAU).
Avg Bets per Session, Avg Bet Size.
ARPPU (net) = ARPPU − (Prize + Bonus Cost per payer).
Avg Deposit, Paying Share.
Net Uplift: (qo’shimcha tushum) − (mukofotlar + bonuslar + operatsion + frod-oqishlar).
Gardereyllar
1 000 nafar foydalanuvchiga shikoyatlar/texnik qo’llab-quvvatlash, KYC bo’yicha rad etish, stavkalarning g’ayritabiiy patternlari, RG-bayroqlar (limitlar, o’z-o’zini istisno qilish).
4) Davomiyligi, mavsumiyligi va yangiligi
Kamida 2 ta to’liq biznes-sikl (masalan, dam olish kunlarini egallash uchun 2 hafta).
novelty-effect e’tiborga oling: birinchi 48-72 soatlardagi ko’tarilishni qayd eting va fazalar bilan tahlil qiling (D0-D2, D3-D7, D8 +).
Katta reklama bilan kesishmaslik yoki guruhlar bo’yicha «teng shovqin» ni rejalashtirish.
5) Namunaning quvvati va hajmi (hisob-kitob misoli)
Maqsad: foydalanuvchiga o’rtacha «ko’zoynak» (yoki Net ARPPU) bo’yicha Δ farqini aniqlash.
Ikki tanlovli t-test uchun formula (guruhlarda teng):[
n_{\text{na guruh}} =\frac {2, (z_{1-\alpha/2}+z_{1-\beta}) ^ 2 ,\sigma ^ 2} {\Delta ^ 2}
]
Masalan: Δ = 5 ball, σ = 120, α = 0,05 (ikki tomonlama), quvvati 80% (β = 0,2).
(z_{1-α/2}=1{,}96), (z_{1-β}=0{,}84) → jami 2,8 → kvadrat 7,84.
(\sigma^2 = 14,400).
(n =\frac {2\times 7 {,} 84\times 14,400} {25 }\approx\frac {225,792} {25 }\approx 9,032).
6) Dispersiyani kamaytirish: testni «arzonroq» qilamiz
CUPED: sinovdan oldingi kovariatlarga regression tuzatish (masalan, o’tgan hafta uchun ochkolar/stavkalar).
Kovariatlar: payer-bayroq, aylanma log-transformatlar, faollik, platforma, geo.
Xatolarni klasterlash: foydalanuvchi darajasida (ichidagi takroriy sessiyalar).
7) Interferensiya va "bo’g" ozlar "
Ko’zoynak qoidasi nafaqat test ishtirokchilariga ta’sir qilishi mumkin:- Ijtimoiy taqqoslash (umumiy liderbord) → «spillover».
- Umumiy jekpotlar/qo’shma missiyalar → kross-effekt.
- Guruhlar bo’yicha alohida peshqadamlar yoki ochkolarning yashirin normallashuvi.
- Trafik/geo klasterlari bo’yicha klaster randomizatsiyasi (qimmatroq, ammo toza).
- Per-protokol (ITT) + sezgir tahlillar.
8) Qoidalarning antifrod va kaplari
Ko’zoynaklarning har qanday o’zgarishi optimallashtirishni rag’batlantiradi: mikro stavkalar, bot etishtirish, «ko’zoynak fermasi».
Minimal himoya:- Bir daqiqa/soat/sutkada va bir stavka uchun ochkolar qopi.
- Stavkalarning minimal o’zgaruvchanligi («ideal» ketma-ketliklarni taqiqlash).
- headless/takrorlanuvchi fingerprints, proksi deteksiyasi.
- Yirik sovrinlarning kechiktirilgan verifikatsiyasi + KYC.
- Tahlillar: «ko’zoynak/stavkalar» va «ko’zoynak/min» taqsimotlarni solishtiring, dumlarni qidiring.
9) Voqealar va ma’lumotlar sxemasi (minimal)
Hodisalar:- `session_start {user_id, ts, platform}`
- `event_view {user_id, event_id, ts}`
- `event_join {user_id, event_id, ts}`
- `points_awarded {user_id, event_id, rule_id, amount, source, ts}`
- `mission_progress {user_id, mission_id, step, value, ts}`
- `mission_complete {user_id, mission_id, ts}`
- `bet {user_id, game_id, bet, win, ts}`
- `deposit {user_id, amount, ts}`
- `rules {rule_id, name, params, caps_minute, caps_hour, caps_day, version}`
- `assignments {user_id, test_id, group, assigned_at}`
10) Tahlil uchun SQL-eskizlar
SRM-tekshirish (guruhlar boʻyicha taqsimlash):sql
SELECT group, COUNT() AS users
FROM assignments
WHERE test_id =:test
GROUP BY group;
-- keyingi o’rinlarda kutilayotgan ulushlarga nisbatan x-kvadrat
Participation/Completion guruhlar boʻyicha:
sql
WITH eligible AS (
SELECT user_id FROM users
WHERE last_active_at >=:start - INTERVAL '14 day'
), joined AS (
SELECT DISTINCT user_id FROM event_join
WHERE event_id =:event AND ts BETWEEN:start AND:end
), started AS (
SELECT DISTINCT user_id FROM mission_progress
WHERE ts BETWEEN:start AND:end AND mission_id IN (:missions)
), completed AS (
SELECT DISTINCT user_id FROM mission_complete
WHERE ts BETWEEN:start AND:end AND mission_id IN (:missions)
)
SELECT a. group, COUNT(DISTINCT j. user_id)::float/COUNT(DISTINCT e. user_id) AS participation_gross, COUNT(DISTINCT s. user_id)::float/COUNT(DISTINCT e. user_id) AS participation_net, COUNT(DISTINCT c. user_id)::float/NULLIF(COUNT(DISTINCT s. user_id),0) AS completion
FROM eligible e
JOIN assignments a USING (user_id)
LEFT JOIN joined j USING (user_id)
LEFT JOIN started s USING (user_id)
LEFT JOIN completed c USING (user_id)
WHERE a. test_id =:test
GROUP BY a. group;
Net ARPPU va sovrinlar/bonuslar qiymati:
sql
WITH payors AS (
SELECT DISTINCT user_id FROM payments
WHERE ts BETWEEN:start AND:end
), rev AS (
SELECT user_id, SUM(ggr) AS ggr
FROM revenue
WHERE ts BETWEEN:start AND:end
GROUP BY user_id
), costs AS (
SELECT user_id, SUM(prize + bonus) AS cost
FROM promo_costs
WHERE ts BETWEEN:start AND:end
GROUP BY user_id
)
SELECT a. group, AVG(COALESCE(r. ggr,0) - COALESCE(c. cost,0)) FILTER (WHERE p. user_id IS NOT NULL) AS net_arppu
FROM assignments a
LEFT JOIN payors p USING (user_id)
LEFT JOIN rev r USING (user_id)
LEFT JOIN costs c USING (user_id)
WHERE a. test_id =:test
GROUP BY a. group;
CUPED (misol):
sql
-- pre_value: ko’zoynak/testdan oldingi tushum; value: test paytida
SELECT group, AVG(value - theta pre_value) AS cuped_mean
FROM (
SELECT a. group, x.user_id, x.value, x.pre_value, (SELECT COVAR_SAMP(value, pre_value)/VAR_SAMP(pre_value)
FROM x) AS theta
FROM assignments a
JOIN x ON x.user_id = a. user_id
WHERE a. test_id =:test
) t
GROUP BY group;
11) Xususiy effektlar va geterogenlik
HET effektlarini tekshiring:- Yangi boshlanuvchilar vs core, low-value vs high-value, turli platformalar/geo.
- Ba’zan ko’zoynakning yangi formulasi kitlarni o’zgartirmasdan mid-core-ni yoqadi - bu to’g’ri natija.
- «p-hacking» ni tutmaslik uchun segmentlarni oldindan roʻyxatdan oʻtkazing.
12) Tez-tez tuzoq
1. Barcha guruhlar uchun umumiy liderbord → interferensiya.
2. Sinov paytida sovrinlarning tuzilishini o’zgartirish → beqiyoslik.
3. Ko’zoynak farmi mikroskopik → nolid uplift.
4. SRM va ETL’dagi «suzuvchi filtrlar»
5. Sovrin/bonuslarni chegirmasdan «iflos» ARPPUga tayanish.
6. To’g "ri izchil statistikaga ega bo’lmagan flyuktuatsiyalar tufayli erta to’xtash.
13) Bayes vs chastota va izchil yechimlar
Fraymvork: Bayes yondashuvidan foydalanish mumkin (metrikadan keyingi farq, «B yaxshiroq A» ehtimoli), ayniqsa vaqt monitoringida.
Ehtiyot bo’ling: ko’zoynak qoidalari uchun banditlar tasdiqlangan uplift - foydalanish bosqichida, birlamchi validatsiyada emas.
14) Mas’uliyatli o’yin va komplayens
Shaffof qoidalar va ochkolar: o’yinchi ochkolarni qanday topishini tushunishi kerak.
Faollik va depozitlar limitlari, «pauzalar» va RG-maslahatlar.
O’yin uslubi uchun hech qanday yashirin «jarima» yo’q.
15) Mini-keys (sintetik)
Kontekst: haftalik event, A = «1 yevro stavka uchun ochkolar», V = «win/bet multiplikator bo’yicha ochkolar, kapp = 50/stavka».
O’lchami: 2 × 10 000 foydalanuvchi, payer maqomi bo’yicha tabaqalanish. SRM - taxminan.
Natijalar:- Participation_net: A 17,3% → B 22,1% (+4,8 п.п.).
- Completion: A 38,9% → B 44,0% (+5,1 п.п.).
- Net ARPPU: A €41,2 → B €43,5 (+ €2,3) Prize + Bonus per payer ≈ €6,4 (o’zgarmadi).
- Shikoyatlar/1k: o’zgarishsiz; frod bayroqlari kaplar hisobiga ↓ 0,3 p.p.
- Xulosa: B qoidasi - g’olib; sovrinlarning «uzun dumi» bilan kattalashtiramiz va qopqoqlarni saqlaymiz.
16) A/B ni ochkolar bo’yicha ishga tushirish chek-varaqasi
- Birlik = foydalanuvchi, sticky-assignment, stratifikatsiya.
- Interferensiyani olib tashlash uchun alohida etakchi taxtalar/normallashtirish.
- Ko’zoynak, antibot signallari, yirik sovrindorlar uchun KYC.
- Gipotezalar va metrikalarni qayta ro’yxatdan o’tkazish (primary/secondary/guardrails).
- Quvvat va davomiylik rejasi, mavsumiylik hisobga olingan.
- CUPED/kovariatlar ulangan, SRM-alertlarning payplayni.
- Дашборд «Reach → Participation → Progress → Completion → Value».
- Hisobot: sovrinlar/bonuslardan keyin pul bilan inkrement, post-effect.
Ochkolarni hisoblash qoidasi xatti-harakatlarning dastagidir. To’g "ri loyihalashtirilgan A/B-test (SRMsiz, antifrod va fitna bilan) o’yinchilarning ishonchini va kampaniyalar iqtisodiyotini saqlab qolgan holda ishtirokni, completion va Net ARPPUni xavfsiz oshirish imkonini beradi.