A/B支付方案測試
1)為什麼要測試支付方案
增加批準(AR)和減少故障(DR)。
降低成本:收費(交換/計劃/標記/固定)和按成本計算。
降低風險:在相同的批準下,charjback/frod更少。
可持續性:根據特定的GEO/BIN/方法選擇提供商/3DS策略/漫遊。
2)實驗設計
2.1.Unit隨機化
User-level(推薦):所有單個用戶的嘗試都進入一個分支,→沒有3 DS/令牌的「混合」。
BIN-level:當測試是關於按發行人路由時;跨用戶混合的風險。
命令/引導級別:對於小型UI實驗是允許的(例如,錯誤副本),不需要漫遊/3 DS。
2.2.分層(在隨機化之前)
按以下方式進行分層:玩家的GEO,issuer country/BIN6,付款方法,通道(web/app),總和段,風險範圍。這將減少SRM的分散和風險。
2.3.我們測試什麼
路由/級聯:PSP_A vs PSP_B,sticky BIN,限量版。
3 DS政策:BIN/geo的強制性3 DS frictionless→challenge。
UX flow:步驟序列,錯誤/重復文本。
參數是復古的:窗口和軟編碼。
定價:提供IC++vs寬松的提供商,並影響所有成本。
3)度量標準: 目標,次要,guardrails
3.1.主要內容
AR (Approval Rate) = approved/attempted.
Cost-per-Approval = (auth+decline fees)/approved.
Take-rate% (all-in)=fees/volume(以報告貨幣)。
3DS pass-rate;liability shift %.
Latency p95/p99付款流。
3.2.風險指標
Chargeback ratio (CBR), refund rate, fraud alerts/1000 trx.
FX slippage (bps) = effective vs reference FX.
3.3.Guardrails(停止條件)
AR> Y bps下降或CBR/Refunds上升超過閾值。
SRM (Sample Ratio Mismatch)-流量與預期的不平衡。
Spikes: 潛伏期,軟衰減,3 DS anomaly.
4)統計和功率
4.1.樣本大小(分數的近似值)
n_per_group ≈ 2 (Z_{1-α/2} + Z_{1-β})^2 p(1-p) / δ^2
其中「p」是基本的AR,「δ」是AR中預期的uplift,α是重要程度,β是II類錯誤。
4.2.順序分析(提前停止)
Alpha spending (O'Brien-Fleming/Pocock):記錄檢查時間表並按階段花費α。
SPRT/Bayes-用於操作解決方案,但要捕獲協議。
4.3.Varians編輯
CUPED:「Y=Y − θ(X − μ_X)」,其中X是實驗前協變量(AR/DR/風險斜率),θ是協變系數。
分層估計數,群集混亂錯誤(用戶/BIN群集)。
用於收取/成本指標(重尾巴)的引導。
4.4.多變量測試和樂隊
MAB(UCB/Thompson):當重要的是即時學習,不要失去營業額。
對於合規性臨界度量(CBR, liability)-更喜歡帶有護欄的經典A/B。
5)實驗平臺架構
1.調度服務:確定性哈希(user_id,experiment_id,鹽分)→ bucket。
2.功能標誌/規則引擎:路由激活/3 DS/沿分支復古。
3.事件:嘗試/結果(authorize/capture/refund/cb)→總線(Kafka/PubSub)。
4.相似性:每個級聯的通用「idempotency_key」。
5.DWH/店面:歸一化狀態,功能,FX,風險標誌。
6.監測:在線SLI(AR/3 DS/latency),Alerta,SRM支票。
7.協議:預註冊假設,最終標準,數據帶。
6)數據模型(最小值)
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模板
7.1.SRM支票(流量比例)
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.手頭的主要指標
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的CUPED(示例)
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檢查(示例)
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)測試過程(和)
1.預註冊:假設,度量,設計,尺寸,停止規則。
2.SRM/AA測試「空白」效果(幾天)。
3.啟動:調配自由度,規則引擎/ficheflags中的邏輯。
4.在線監控:AR/3DS/latency/health+guardrails。
5.alpha-spending的中間檢查(如果已計劃)。
6.完成和數據剝離:僅在考慮了資金/儲備/晚期CB/refunds之後。
7.分析:通過GEO/BIN/方法/通道進行 CUPED/分層,靈敏度,異質性。
8.解決方案:滾出,滾回或倒退測試;更新規則/漫遊。
9.文檔和回顧:課程,閾值/權重更新。
9)反模式和陷阱
沒有協議的Peeking/pere觀看→虛假的勝利。
路由測試中的順序級別隨機化→雙手之間的泄漏。
多重遊戲(許多度量/切片)沒有α校正。
不完整成本(忘記了FX/儲備/回收功能)→錯誤的收費率。
沒有SRM支票→偏移的結論。
非偶數回火→ 雙授權/AR失真。
10)安全、合規和道德
Same-method/return-to-source不應被測試打破。
制裁/許可/GEO政策-在實驗之外。
RG/負責任的遊戲:不要為了AR而惡化防禦機制。
PCI/GDPR:代幣代替PAN,最大限度地減少個人數據,DPA/SOC2。
11) KPI dashboard實驗
AR/DR,手臂和關鍵分層的置信間隔(GEO/BIN/方法)。
Cost-per-Approval, take-rate %, FX slippage (bps).
3DS pass/liability shift, soft-decline share.
Latency p95/p99,錯誤/時間戳。
CB/Refunds (lag-aware), SRM,流量覆蓋,持續時間。
12)最佳實踐(簡稱)
1.在用戶級別隨機分層。
2.使用guardrails和SRM支票;捕獲協議。
3.計算全部成本(fees+FX+reserve)和按成本計算。
4.將CUPED、群集故障和引導程序應用於成本指標。
5.對於關鍵風險-經典A/B;bandits-主要用於價格/AR任務。
6.在最終退出之前考慮資金/儲備/晚期CB。
7.記錄和驗證規則;做後遺癥。
13)發射支票清單
- 假設,度量,效果,設計,樣本大小,時限。
- Unit randomization and strates, assignment service, ficheflagi.
- Guardrails/閾值,SRM/AA-precheck,Alertes。
- 標誌/事件,等效性,狀態正常化。
- Fees/FX/Reserve店面;報告貨幣。
- 停止計劃(alpha-spending)和數據帶。
- 花花公子滾出/滾回;成果文件。
總結
A/B支付方案測試是工程和統計學學科:正確的隨機化和分層,完整的成本和風險指標,guardrails和SRM,整潔的分析(CUPED/clust-robastity/串行分析)和「戰鬥力」基礎設施(相似性,遙測,恢復性)。遵循這種技術,你提高AR,降低所有收款率,同時不支付充電器和監管風險增加的「虛假勝利」。