A/B评分规则测试
得分是任何游戏化的核心。玩家行为,参与结构和经济学取决于积分的确切价值(ARPPU,奖金)。下面是一个实际的配方,如何有效测试新的眼镜规则,并确保指标的生长是真实的,而不是人工制品。
1)我们到底要测试什么
规则示例:- 根据投注总额:每1欧元投注1分。
- 按乘数win/bet:分数=⌊乘数× k ⌋,每个出价。
- 混合动力车:"系列"(连续N旋转)的营业额得分+嘘声,每分钟/每小时的帽子。
- 任务:执行任务的虚构点(T1...Tn),具有越来越大的复杂性。
假设(示例): ""乘数+cap"模型将提高participation_net和完整率而不会降低Net ARPPU(奖金/奖金之后)。"
2)实验单位和随机化
单位:用户(不是会话,不是设备)。
分布:固定盐分的静态哈希(user_id → bucket);A/B/C所占比例50/50或33/33/33。
分层(建议):payer-status(新支付/重新支付/不支付)、平台、地理位置。
调整:用户在测试过程中总是看到相同的规则。
SRM (Sample Ratio Mismatch)检查:每天检查预期组的实际比例(卡方)。SRM是流量泄漏,过滤错误,错误的信号。
3)度量标准和"眼镜漏斗"
活动和参与
Reach:看到活动者的份额。
Participation_gross:介入/eligible。
Participation_net:开始进步/eligible。
完成:完成/开始。
质量和金钱
Δ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:(额外收入)−(奖品+奖金+运营+流失)。
花园花园
投诉/技术支持1,000 user,KYC豁免,异常投注模式,RG标志(限制,自我体验)。
4)持续时间、季节性和新颖性
至少有2个完整的业务周期(例如2个星期的时间来捕捉周末)。
考虑新颖效应:前48-72小时的激增。捕获和分析阶段(D0-D2,D3-D7,D8+)。
不要与大型促销相交,或者计划按组进行"等噪音"。
5)采样功率和量(计算示例)
目的:检测平均每位用户眼镜(或Net ARPPU)的Δ差异。
两次t测试的公式(分组均等):[
n_{\text{na组}}=\frac {2, (z_{1-\alpha/2}+z_{1-\beta})^2,\sigma^2} {\Delta^2}
]
示例:我们要抓住Δ=5分,σ=120,α=0.05(双向),功率为80%(β=0.2)。
(z_{1-α/2}=1{,}96)、(z_{1-β}=0{,}84) →总计2.8 → 平方7.84。
(\sigma^2 = 14,400).
(n =\frac {2\times 7{,}84\times 14400} {25}\approx\frac {225.792} {25}\approx 9.032)。
6)减少方差: 使测试"便宜"
CUPED:对测试前协变量的回归调整(例如,过去一周的积分/利率)。
协变量:付费标志,营业额的日志转换,活动,平台,地质。
错误聚类:在用户级别(内部重复会话)。
7)干扰和"海峡"
积分规则不仅会影响测试参与者:- 社会比较(leadbord通用)→ "spillover"。
- 通用头奖/联合任务→交叉效果。
- 按组划分的领导板或隐藏的积分正常化。
- 按流量/地理群集进行群集随机化(更贵但更清洁)。
- Per协议(ITT)+敏感分析。
8)Antifrod和Caps统治
眼镜的任何变化都会刺激优化:微观投注,博达和"眼镜场"。
最低限度保护:- 每分钟/每小时/每小时和一次下注。
- 最低利率波动(禁止"理想"序列)。
- 无头/重复指纹检测,代理。
- 推迟验证+KYC大奖。
- 分析:比较"积分/投注"和"积分/分钟"分布,寻找尾巴。
9)事件和数据模式(最低限度)
事件:- `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草图
SRM验证(按组分布):sql
SELECT group, COUNT() AS users
FROM assignments
WHERE test_id =:test
GROUP BY group;
-进一步的卡方与预期份额
分组Participation/Completion:
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和奖金/奖金成本:
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(示例):
sql
-pre_value:面试前的分数/收入;value:在测试期间
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)私人效应和异质性
检查HET效果:- 初学者vs核心,低价值vs高价值,不同的平台/地质。
- 有时,新的眼镜配方"点燃"中核心而不改变鲸鱼是正确的结果。
- 进行分段注册以避免捕获"p-hacking"。
12)频繁陷阱
1.所有群体的共同领导层→干涉。
2.在测试期间更改奖品结构→不可比性。
3.微量投注眼镜的农场→不有效的uplift。
4.ETL中的SRM和"浮动滤波器"→偏移分数。
5.依靠"陷入困境"的ARPPU而不扣除奖金/奖金。
6.由于没有正确的一致统计数据的流动而导致的早期停止。
13)Bayes vs频率和顺序解决方案
框架:可以使用贝叶斯方法(后周期度量差,概率"B优于A"),尤其是在时间监控中。
小心:眼镜规则的bandites在确认的uplift之后是合适的--在操作阶段,在初级验证中。
14)负责任的游戏和合规性
透明规则和帽子:玩家必须了解如何获得积分。
活动和存款限制,"暂停"和RG线索。
没有隐藏的游戏风格的"罚款"。
15)迷你桉例(合成)
上下文:每周活动,A="每1个投注的积分",B="乘数分数win/bet, cap=50/投注"。
规模:2 × 10 000个用户,按支付状态分层。SRM-c。
结果是:- Participation_net: A 17,3% → B 22,1% (+4,8 п.п.).
- Completion: A 38,9% → B 44,0% (+5,1 п.п.).
- Net ARPPU:Prize+Bonus per payer的41.2 → B欧元43.5(+2.3欧元)≈ 6.4欧元(未变)。
- 投诉/1k:不变;frod-flag ↓0,3 p.p.以牺牲帽子为代价。
- 结论:规则B是获胜者;我们使用奖品的"长尾巴"进行缩放,并保留帽子。
16) A/B按积分排列的发射清单
- 单位=用户,粘贴分配,分层。
- 分开的领导板/正常化以消除干扰。
- 清晰的帽子在眼镜,反机器人信号,KYC主要奖牌获得者。
- 假设和指标的预记录(初级/次级/guardrails)。
- 电力和持续时间计划,季节性考虑在内。
- CUPED/协变量连接,引导线SRM-alert。
[] Дашборд «Reach → Participation → Progress → Completion → Value».
- 报告:奖金/奖金后的现金内化,后效应的尾巴。
计分规则是一种行为杠杆。通过正确设计的A/B测试(没有SRM,带有防冻剂和协变量),可以安全地增加参与,完善和Net ARPPU,同时保持玩家信心和战役经济性。