如何使用BigQuery Standard SQL实现用户多次随机分配至对照/实验组
BigQuery 实现多轮独立随机实验分组的方案
完全可以实现,针对不同场景有两种成熟的实现方式:
方案1:实验维度固定随机分组(正式实验推荐)
你之前用FARM_FINGERPRINT+MOD的方法本身是稳定分组的逻辑,同一个用户ID每次计算得到的分组结果固定,只需要额外加入实验唯一盐值就能实现不同实验之间完全独立的重新分组,不会和之前的实验分组结果有关联。
代码示例:
SELECT user_id, -- 拼接用户ID和当前实验的唯一标识作为哈希输入,取模得到0/1两组 MOD(FARM_FINGERPRINT(CONCAT(user_id, 'exp_20240601_order_page_test')), 2) AS experiment_group FROM `your_project.your_dataset.user_table`
优势:
- 同一实验的分组结果可复现:同一个用户在同一个实验里的分组结果永远固定,不会出现实验期间用户跳组的问题,满足实验统计要求
- 不同实验分组完全独立:每次新实验只需要替换
CONCAT里的实验唯一盐值(比如用实验ID、实验上线日期、实验名称这类不会重复的内容即可),就能得到全新的随机分组结果 - 计算性能高:都是BigQuery内置函数,没有额外开销,适合亿级以上用户量的大表计算
方案2:每次查询动态随机分组(临时抽样适用)
如果你不需要固定实验分组,只需要每次运行查询都得到全新的随机分组结果,可以直接用内置的RAND()函数实现:
代码示例:
SELECT user_id, IF(RAND() < 0.5, 0, 1) AS experiment_group FROM `your_project.your_dataset.user_table`
注意事项:
这个方法每次运行的分组结果都会变化,无法复现历史分组,仅适合临时随机抽样场景,不建议用于正式在线实验。
内容的提问来源于stack exchange,提问作者Adam B
相关产品推荐
相关产品推荐

