Ballary hasaplamagyň kadalarynyň A/B-synaglary
Ballaryň hasaplanylmagy - islendik oýnamagyň ýüregi. Oýunçylaryň özüni alyp barşy, gatnaşmagyň gurluşy we ykdysadyýeti (ARPPU, bonus-süňkler) ballaryň takyk hasaplanmagyna baglydyr. Aşakda - äýnegiň täze düzgünini barlamak we metrikanyň ösüşiniň artefakt däl-de, hakykydygyna göz ýetirmek üçin amaly resept.
1) Nämäni barlaýarys
Düzgünleriň mysallary:- Jedelleriň jemi boýunça: her €1 stawka üçin 1 bal.
- Win/bet multiplikatoryna görä: äýnek = × köpeldiji, her stawka üçin gaply.
- Gibrid: aýlanyş üçin äýnek + "seriýa" (yzly-yzyna N spin), minutda/sagatda kaplar.
- Missiýalar: barha artýan çylşyrymlylyk bilen wezipeleri (T1...Tn) ýerine ýetirmek üçin fix-bal.
Gipoteza (mysal): "Model "multiplikator + kapa", Net ARPPU-ny ýaramazlaşdyrmazdan (baýraklardan/bonuslardan soň) participation_net we completion rate ýokarlandyrar ".
2) Synag birligi we randomizasiýa
Birlik: ulanyjy (sessiýa däl, enjam däl).
Paýlanyş: sabit duzlar bilen statiki heş (user_id → bucket); A/B/C üçin 50/50 ýa-da 33/33/33 paýlar.
Stratifikasiýa (maslahat berilýär): payer-status (täze töleýänler/gaýtadan töleýänler/tölemeýänler), platforma, geo.
Sticky-assignment: ulanyjy synag wagtynda hemişe şol bir düzgüni görýär.
SRM (Sample Ratio Mismatch) barlagy: her gün toparlaryň hakyky paýlaryny garaşylýan (hi-kwadrat) bilen deňeşdiriň. SRM - traffigiň syzmagy, nädogry süzülmek, bökdençlikler.
3) Metrikler we "äýnek hunisi"
Işjeňlik we gatnaşmak
Reach: çäräni gören paý.
Participation_gross: girdi/eligible.
Participation_net :/eligible.
Completion: tamamlandy/başlandy.
Hil we 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: (goşmaça girdeji) − (baýraklar + bonuslar + amallar + frod-syzmak).
Şkaflar
1000 ulanyjy üçin şikaýatlar/tehniki goldaw, KYC boýunça şowsuzlyklar, nyrhlaryň anomal patternleri, RG-baýdaklar (çäklendirmeler, öz-özüni aýyrmak).
4) Dowamlylygy, möwsümliligi we täzeligi
Iň azyndan 2 sany doly iş aýlawy (mysal üçin, dynç günleri almak üçin 2 hepde).
Nowelty-effect-i göz öňünde tutuň: ilkinji 48-72 sagatlap ýokarlanyň. Tapgyrlary ýazga alyň we seljeriň (D0-D2, D3-D7, D8).
Uly mahabat bilen kesişmezlik ýa-da "deň sesleri" toparlara bölmek.
5) Nusganyň kuwwaty we möçberi (hasaplamanyň mysaly)
Maksat: Ulanyjy üçin ortaça "äýnek" (ýa-da Net ARPPU) boýunça Δ tapawudyny ýüze çykarmak.
Iki saýlama t-synag üçin formula (toparlarda deň):[
n_{\text{na}} =\frac {2, (z_{1-\alpha/2}+z_{1-\beta}) ^ 2 ,\sigma ^ 2} {\Delta ^ 2}
]
Mysal: Δ = 5 bal tutmak isleýäris, σ = 120, α = 0,05 (iki taraplaýyn), kuwwaty 80% (β = 0,2).
(z_{1-α/2}=1{,}96), (z_{1-β}=0{,}84) → jemi 2,8 → inedördül 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) Dispersiýany azaltmak: synagy "arzan" edýäris
CUPED: synagdan öňki kowariatlar üçin regression düzediş (mysal üçin, geçen hepde üçin äýnek/nyrhlar).
Kowariatlar: payer-baýdak, dolanyşyk, işjeňlik, platforma, geo.
Hatalary toparlaşdyrmak: ulanyjy derejesinde (içindäki gaýtalanýan sessiýalar).
7) Interferensiýa we "bogazlar"
Äýnek düzgüni diňe bir synaga gatnaşyjylara täsir edip bilmez:- Sosial deňeşdirme (umumy liderbord) → "spillover".
- Umumy jekpotlar/bilelikdäki missiýalar → cross effekt.
- Toparlara bölünen liderbordlar ýa-da ballaryň gizlin kadalaşmagy.
- Trafik/geo klasterleri boýunça klaster randomizasiýasy (has gymmat, ýöne has arassa).
- Per-protokol (ITT) + duýgur derňewler.
8) Antifrod we düzgünleriň gaplary
Äýnegiň islendik üýtgemegi optimizasiýany höweslendirýär: mikroskop, taýak, "äýnek fermasy".
Iň az gorag:- Bir minutda/sagatda/günde we bir stawka üçin äýnek örtügi.
- Nyrhlaryň iň az üýtgewsizligi ("ideal" yzygiderliligiň gadagan edilmegi).
- Headless/gaýtalanýan fingerprints, proxy deteksiýasy.
- Uly baýraklaryň yza süýşürilen barlagy + KYC.
- Analitika: "äýnek/jedeller" we "äýnek/minut" paýlanyşyny deňeşdiriň, guýruklary gözläň.
9) Wakalar we maglumatlar shemasy (iň az)
Wakalar:- `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) SQL-derňew eskizleri
SRM barlagy (toparlara bölünişi):sql
SELECT group, COUNT() AS users
FROM assignments
WHERE test_id =:test
GROUP BY group;
-- garaşylýan paýlara garşy hi-kwadrat
Participation/Completion toparlar boýunça:
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 we baýraklaryň/bonuslaryň bahasy:
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 (mysal):
sql
-- pre_value: äýnek/synagdan öňki girdeji; value: synag wagtynda
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) Hususy täsirler we geterogenlik
HET effektlerini barlaň:- Täze gelenler vs core, low-value vs high-value, dürli platformalar/geo.
- Käwagt täze äýnek formulasy kitleri üýtgetmezden mid-core "ýakýar" - bu dogry netije.
- "p-hacking" tutmazlyk üçin segmentleri öňünden hasaba alyň.
12) Ýygy-ýygydan duzaklar
1. Ähli toparlar üçin umumy liderbord → interferensiýa.
2. Synag wagtynda baýraklaryň gurluşynyň üýtgemegi → deňeşdirilmezlik.
3. Mikro äýnek fermasy → galyp däl uplift.
4. SRM we ETL-de "ýüzýän süzgüçler" → göçürilen bahalar.
5. Baýraklary/bonuslary aýyrmazdan "hapa" ARPPU-a bil baglamak.
6. Dogry yzygiderli statistikasyz fluktuasiýa sebäpli irki aýak.
13) Baýes vs ýygylyk we yzygiderli çözgütler
Freýmwork: Baýes çemeleşmesini ulanyp bolýar (metriklerden soňky tapawut, ähtimallyk "B A-dan gowy"), esasanam wagt gözegçiliginde.
Seresap boluň: äýnek düzgünleri üçin benditler tassyklanan upliftden soň - başlangyç tassyklamada däl-de, iş döwründe ýerliklidir.
14) Jogapkär oýun we komplayens
Aç-açan düzgünler we gaplar: oýunçy ballary nädip gazanýandygyna düşünmeli.
Işjeňligiň we goýumlaryň çäkleri, "arakesmeler" we RG-maslahatlar.
Oýun stili üçin gizlin "jerimeler" ýok.
15) Kiçi keýs (sintetik)
Kontekst: hepdelik waka, A = "€1 stawka üçin äýnek", B = "win/bet multiplikatory boýunça äýnek, kaps = 50/stawka".
Ölçegi: 2 × 10 000 ulanyjy, payer statusy boýunça gatlaklaşdyrma. SRM - ok.
Netijeleri:- 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 (üýtgemedi).
- Şikaýatlar/1k: üýtgemez; frod-baýdaklar kaplaryň hasabyna ↓ 0,3 p.p.
- Netije: B düzgüni - ýeňiji; baýraklaryň "uzyn guýrugy" bilen ulaldýarys we gapaklary saklaýarys.
16) Ballar boýunça A/B uçurylyşynyň çek-sanawy
- Birlik = ulanyjy, sticky-assignment, stratifikasiýa.
- Interferensiýany aýyrmak üçin aýratyn liderlik tagtalary/kadalaşma.
- Äýnek, antibot signallary, KYC-iň esasy ýeňijileri üçin aç-açan gapaklar.
- Gipotezalary we metrikleri gaýtadan hasaba almak (primary/secondary/guardrails).
- Kuwwat we dowamlylyk meýilnamasy, möwsümliligi göz öňünde tutulandyr.
- CUPED/kowariatlar birikdirildi, SRM-alertleriň paýy.
- Дашборд «Reach → Participation → Progress → Completion → Value».
- Hasabat: baýraklardan/bonuslardan soň pul inkrementi, post-effect guýrugy.
Ballary hasaplamagyň düzgüni özüni alyp baryş güýjüdür. A/B synagy (SRM-siz, antifrod we galplyklar bilen), oýunçylaryň ynamyny we kampaniýalaryň ykdysadyýetini saklamak bilen, gatnaşygy, completion we Net ARPPU-ny howpsuz ýokarlandyrmaga mümkinçilik berýär.