在A / B测试中,基于模数关节术进行拆分相当常见,但这通常会导致重叠实验,即如果您使用id%2 == 0作为拆分标准,则一组用户会一直进入控制或实验。
我听说过的解决方案是使用散列。我想将user_id
与实验名称连接起来,哈希,然后将其转换为0到1之间的浮点数。我知道如何进行哈希(Digest::MD5::hexdigest('test').to_i(16)
)但我是混淆了下一步转换为0到1之间的浮点数。
步骤是什么?
答案 0 :(得分:1)
我通过移植此处列出的代码来找出解决方案:http://blog.richardweiss.org/2016/12/25/hash-splits.html
test_id_digest = Digest::MD5::hexdigest(user_id + experiment_name)
test_id_first_digits = test_id_digest[0..5]
test_id_final_int = test_id_final_int = test_id_first_digits.to_i(16)
ab_split = test_id_final_int.to_f/0xFFFFFF
基本思想是创建摘要,然后取前六个字母,然后除以最大的六位十六进制字符串。
引用的博客文章用于验证此解决方案的随机性。