GH GambleHub

Ödəniş ssenarilərinin A/B testləri

1) Ödəniş ssenarilərini niyə sınaqdan keçirmək lazımdır

Təsdiq artırın (AR) və uğursuzluqları azaltın (DR).
Xərcləri azaltın: take-rate (interchange/scheme/markup/fixed) və cost-per-approval.
Riskləri azaltın: eyni razılıqla daha az Çarjbek/Frod.
Stabillik: xüsusi GEO/BIN/metodları altında bir provayder/3DS strategiyası/routing seçin.

💡 Vacib: ödəniş testləri pul və real vaxt risklərinə təsir edir. Guardrails və etika tələb olunur.

2) Təcrübə dizaynı

2. 1. Randomizasiya vahidi

User-level (tövsiyə olunur): bir istifadəçinin bütün cəhdləri bir filiala düşür → 3DS/tokenlərin «qarışdırılması» yoxdur.
BIN-level: test - emitent marşrutu haqqında olduqda; xüsusi qarışdırma riski.
Order/Attempt-level: Kiçik UI təcrübələri üçün icazə verilir (məsələn, səhv surəti), routing/3DS üçün arzuolunmazdır.

2. 2. Stratifikasiya (randomizasiyadan əvvəl)

Stratifikasiya: oyunçu GEO, issuer country/BIN6, ödəniş metodu, kanal (web/app), məbləğ-seqment, risk-skor. Bu, dispersiyanı və SRM riskini azaldacaq.

2. 3. Nə test

Routing/kaskad: PSP_A vs PSP_B, sticky BIN, limit-aware.
3DS siyasəti: frictionless → challenge, BIN/geo üçün məcburi 3DS.
UX flow: addım ardıcıllığı, səhv mətnləri/təkrar.
relay parametrləri: Windows və soft-decline kodları.
Qiymət: IC++ vs blended ilə provayder və bütün-in dəyəri təsir.

3) Metrik: hədəf, ikincil, guardrails

3. 1. Əsas

AR (Approval Rate) = approved/attempted.
Cost-per-Approval = (auth+decline fees)/approved.
Take-rate% (all-in) = fees/volume (hesabat valyutasında).
3DS pass-rate; liability shift %.
Latency p95/p99 ödəniş flow.

3. 2. Risk metrikası

Chargeback ratio (CBR), refund rate, fraud alerts/1000 trx.
FX slippage (bps) = effective vs reference FX.

3. 3. Guardrails (stop şərtləri)

AR> Y bps düşməsi və ya CBR/Refunds artımı həddindən yüksəkdir.
SRM (Sample Ratio Mismatch) - gözlənilənə qarşı trafik balanssızlığı.
Spikes: gizli, soft-decline surge, 3DS anomaly.

4) Statistika və güc

4. 1. Nümunə ölçüsü (paylar üçün yaxınlıq)


n_per_group ≈ 2 (Z_{1-α/2} + Z_{1-β})^2 p(1-p) / δ^2

burada 'p' - əsas AR, 'δ' - AR-da gözlənilən uplift, α - əhəmiyyət səviyyəsi, β - II növ səhvdir.

4. 2. Ardıcıl analiz (erkən dayanma)

Alpha-spending (O'Brien-Fleming/Pocock): Yoxlama cədvəlini təyin edirik və α mərhələlərlə xərcləyirik.
SPRT/Bayes - operativ həllər üçün, lakin protokolu qeyd edin.

4. 3. Variant-redaktə

CUPED: 'Y = Y − θ (X − μ_X)', burada X - eksperimental kovariat (AR/DR/risk-skor), θ - kovariant əmsalıdır.
Stratifikasiya edilmiş qiymətləndirmələr, klaster səhvləri (user/BIN-klasterlər).
take-rate/dəyər metrləri (ağır quyruqlar) üçün Bootstrap.

4. 4. Multivariant testlər və bandits

MAB (UCB/Thompson): uçarkən «öyrənmək» və fırlanmamaq vacib olduqda.
Uyğunluq-kritik metriklər üçün (CBR, liability) - guardrails ilə klassik A/B-yə üstünlük verin.

5) Eksperiment platformasının arxitekturası

1. Assignment-xidmət: determinated hash '(user_id, experiment_id, salt)' → bucket.
2. Feature-bayraqlar/Rules-engine: marşrutun aktivləşdirilməsi/3DS/budaq boyunca retraia.
3. Hadisələr: cəhdlər/nəticələr (authorize/capture/refund/cb) → şin (Kafka/PubSub).
4. İdempotentlik: ümumi 'idempotency _ key' cascade.
5. DWH/Vitrinlər: normallaşdırılmış statuslar, fees, FX, risk bayraqları.
6. Monitorinq: online-SLI (AR/3DS/latency), alertlər, SRM-çek.
7. Protokollar: pre-register hipotezi, son meyarlar, data-friz.

6) Məlumat modeli (minimum)

sql ref. experiments (
exp_id PK, name, hypothesis, owner, start_at, end_at,
unit -- USER      BIN      ORDER,
target_metric, guardrails JSONB, design JSONB, alpha NUMERIC, power NUMERIC, meta JSONB
);

ref. experiment_arms (
exp_id FK, arm_id, name, traffic_share NUMERIC, params JSONB, enabled BOOLEAN
);

assignments. buckets (
exp_id, user_id, assigned_arm, assigned_at, salt, hash_key, PRIMARY KEY (exp_id, user_id)
);

events. payments (
attempt_id PK, user_id, exp_id, arm_id,
provider, method, bin, iso2, risk_score,
status, decline_code, three_ds_used BOOLEAN, liability_shift BOOLEAN,
amount_minor BIGINT, currency, latency_ms INT,
authorized_at, captured_at, settled_at, meta JSONB
);

finance. fees (
attempt_id FK, interchange_amt NUMERIC, scheme_amt NUMERIC, markup_amt NUMERIC,
auth_amt NUMERIC, refund_amt NUMERIC, cb_amt NUMERIC, gateway_amt NUMERIC,
fx_slippage_amt NUMERIC, reporting_currency TEXT
);

risk. outcomes (
attempt_id FK, is_refund BOOLEAN, is_chargeback BOOLEAN, fraud_alert BOOLEAN
);

7) SQL şablonları

7. 1. SRM-çek (əl trafikinin payı)

sql
SELECT arm_id,
COUNT() AS n,
ROUND(100. 0 COUNT() / SUM(COUNT()) OVER (), 2) AS share_pct
FROM assignments. buckets
WHERE exp_id =:exp
GROUP BY 1;

7. 2. Əsas əl metrikası

sql
WITH base AS (
SELECT e. arm_id,
COUNT()                  AS attempts,
COUNT() FILTER (WHERE status='APPROVED') AS approvals,
AVG(latency_ms)              AS latency_avg_ms,
AVG((three_ds_used)::int)         AS three_ds_share
FROM events. payments e
WHERE e. exp_id=:exp AND e. authorized_at BETWEEN:from AND:to
GROUP BY 1
),
cost AS (
SELECT e. arm_id,
SUM(f. interchange_amt + f. scheme_amt + f. markup_amt +
f. auth_amt + f. refund_amt + f. cb_amt + f. gateway_amt + f. fx_slippage_amt) AS fees_rep,
SUM(e. amount_minor)/100. 0 AS volume_rep
FROM events. payments e
JOIN finance. fees f USING (attempt_id)
WHERE e. exp_id=:exp AND e. settled_at BETWEEN:from AND:to
GROUP BY 1
)
SELECT b. arm_id,
approvals::numeric/NULLIF(attempts,0)             AS ar,
fees_rep/NULLIF(volume_rep,0)                 AS take_rate,
(SELECT COUNT() FROM risk. outcomes r
JOIN events. payments e2 USING (attempt_id)
WHERE e2. exp_id=:exp AND e2. arm_id=b. arm_id AND r. is_chargeback)=0
AS cb_zero_flag,
latency_avg_ms, three_ds_share
FROM base b LEFT JOIN cost c ON c. arm_id=b. arm_id;

7. 3. AR üçün CUPED (nümunə)

sql
WITH pre AS (
SELECT user_id, AVG((status='APPROVED')::int) AS ar_pre
FROM events. payments
WHERE authorized_at <:pre_from_end
GROUP BY 1
),
cur AS (
SELECT e. user_id, e. arm_id, (e. status='APPROVED')::int AS ar_flag
FROM events. payments e
WHERE e. exp_id=:exp AND e. authorized_at BETWEEN:from AND:to
)
SELECT arm_id,
AVG(ar_flag - theta (ar_pre - mu_pre)) AS ar_cuped
FROM cur
LEFT JOIN pre USING (user_id),
LATERAL (SELECT AVG(ar_pre) AS mu_pre FROM pre) mu,
LATERAL (SELECT COVAR_SAMP(ar_flag, ar_pre)/VAR_SAMP(ar_pre) AS theta FROM cur LEFT JOIN pre USING(user_id)) t
GROUP BY arm_id;

7. 4. guardrails yoxlama (nümunə)

sql
SELECT arm_id,
100. 0 SUM(is_chargeback::int)::numeric / NULLIF(COUNT(),0) AS cbr_pct,
100. 0 SUM(is_refund::int)::numeric  / NULLIF(COUNT(),0) AS refund_pct
FROM risk. outcomes r
JOIN events. payments e USING (attempt_id)
WHERE e. exp_id=:exp AND e. settled_at BETWEEN:from AND:to
GROUP BY 1
HAVING 100. 0 SUM(is_chargeback::int)::numeric / NULLIF(COUNT(),0) >:cbr_threshold
OR 100. 0 SUM(is_refund::int)::numeric  / NULLIF(COUNT(),0) >:refund_threshold;

8) Test prosesi (end-tu-end)

1. Pre-registration: hipotez, metrika, dizayn, ölçüləri, stop qaydaları.
2. SRM/AA-test «boş» effekti (bir neçə gün).
3. Start: assignment freeze, rules-engine/ficheflags məntiq.
4. Onlayn monitorinq: AR/3DS/latency/health + guardrails.
5. alpha spending aralıq yoxlamalar (planlaşdırılırsa).
6. Finiş və data-friz: yalnız funding/ehtiyat/gec CB/refunds hesablandıqdan sonra.
7. Analitika: GEO/BIN/metodu/kanalı ilə CUPED/stratifikasiya, həssaslıq, heterogenlik.
8. Həll: roll-out, roll-back, və ya follow-up test; qaydaları/routing yeniləmə.
9. Sənədləşmə və retrospektiv: dərslər, eşik/tərəzi yenilənməsi.

9) Anti-nümunələr və tələlər

Peeking/protokol olmadan yenidən baxış → saxta qələbələr.
Marşrut testlərində Order-level randomization → əllər arasında sızma.
α korreksiyası olmadan çox (çox metrik/kəsik) oyun.
Natamam dəyəri (FX/rezerv/refund fees unudulmuş) → səhv take-rate.
No SRM çek → ofset nəticələr.
Qeyri-idempotent retrajlar → İkiqat avtorizasiyalar/AR təhrifləri.

10) Təhlükəsizlik, uyğunluq və etika

Same-method/return-to-source sındırılmamalıdır.
Sanksiyalar/lisenziyalar/GEO siyasətləri - təcrübədən kənar.
RG/məsuliyyətli oyun: AR üçün müdafiə mexanizmlərini pisləşdirməyin.
PCI/GDPR: PAN əvəzinə tokenlər, şəxsi məlumatların minimuma endirilməsi, DPA/SOC2.

11) KPI dashboard eksperiment

AR/DR, uplift və əl və əsas stratifikasiyaların etibarlı intervalları (GEO/BIN/metodu).
Cost-per-Approval, take-rate %, FX slippage (bps).
3DS pass/liability shift, soft-decline share.
Latency p95/p99, səhvlər/vaxtlar.
CB/Refunds (lag-aware), SRM, trafikin əhatə dairəsi, müddəti.

12) Best practices (qısa)

1. İstifadəçi səviyyəsində randomize edin və stratifikasiya edin.
2. guardrails və SRM çeki istifadə edin; protokolu qeyd edin.
3. Tam dəyəri (fees + FX + reserve) və cost-per-approval hesab edin.
4. Dəyər metrləri üçün CUPED, klaster səhvləri və bootstrap tətbiq edin.
5. Kritik risklər üçün - klassik A/B; bandits - əsasən qiymət/AR tapşırıqları üçün.
6. Son çıxarılmadan əvvəl funding/ehtiyat/gec CB nəzərə alın.
7. Qaydaları sənədləşdirin və versiya edin; post-mortem edin.

13) Başlanğıc çek siyahısı

  • Hipotez, metrika, effekt, dizayn, nümunə ölçüsü, müddət.
  • Randomizasiya və stratalar birliyi, assignment xidməti, fitzeflages.
  • Guardrails/eşik, SRM/AA-precheck, risk.
  • Log/hadisələr, idempotentlik, status normallaşması.
  • Vitrinlər fees/FX/reserve; hesabat valyutası.
  • Dayanma planı (alpha-spending) və data-friz.
  • Playbook roll-out/roll-back; nəticələrin sənədləşdirilməsi.

Xülasə

A/B ödəniş ssenarisi testləri mühəndis-statistik intizamdır: düzgün randomizasiya və stratifikasiya, tam dəyər və risk metrikası, guardrails və SRM, səliqəli analitika (CUPED/klaster-sərtlik/ardıcıl analiz) və «döyüşə hazır» infrastruktur (idempotentlik, telemetriya, reconciliation). Bu metodologiyaya əməl edərək, siz AR-ı artırırsınız, bütün-in take-rate-i aşağı salırsınız və eyni zamanda Çarjbeklər və tənzimləyici risklərin artması ilə «saxta qələbələr» üçün pul ödəmirsiniz.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.