如何将md5哈希的输出转换为0到1之间的浮点数

时间:2018-05-08 23:57:27

标签: ruby

在A / B测试中,基于模数关节术进行拆分相当常见,但这通常会导致重叠实验,即如果您使用id%2 == 0作为拆分标准,则一组用户会一直进入控制或实验。

我听说过的解决方案是使用散列。我想将user_id与实验名称连接起来,哈希,然后将其转换为0到1之间的浮点数。我知道如何进行哈希(Digest::MD5::hexdigest('test').to_i(16))但我是混淆了下一步转换为0到1之间的浮点数。

步骤是什么?

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

基本思想是创建摘要,然后取前六个字母,然后除以最大的六位十六进制字符串。

引用的博客文章用于验证此解决方案的随机性。