基于hash的AB测试
AB测试
为同一个目标,设计两种方案,将两种方案随机投放市场中,让组成成分相同(相似)用户去随机体验两种方案之一,根据观测结果,判断哪个方案效果更好。
基于hash的AB测试
具体的实现方法为:
在AB测试中需要将用户随机的分成两组,通过对每个用户唯一id做hash运算,并对hash值对2取模,便可以将用户分成0,1两组(分桶测试便是hahs对n取模)。
每组采用不同的策略,并定义一个策略Id,跟随不同的策略埋点,在最后回收策略Id,最后通过策略id分析ab两种策略的好坏。
golang中的hash
在golang中的标准库中实现了fnv、sha1、sha256、sha512四种哈希函数。其中fnv是简单的非加密hash函数。
golang中提供了同一的hash接口:
- type Hash
type Hash interface {
// 通过嵌入的匿名io.Writer接口的Write方法向hash中添加更多数据,永远不返回错误
io.Writer
// 返回添加b到当前的hash值后的新切片,不会改变底层的hash状态
Sum(b []byte) []byte
// 重设hash为无数据输入的状态
Reset()
// 返回Sum会返回的切片的长度
Size() int
// 返回hash底层的块大小;Write方法可以接受任何大小的数据,
// 但提供的数据是块大小的倍数时效率更高
BlockSize() int
}
- **type Hash32 **
type Hash32 interface {
Hash
Sum32() uint32
}
- type Hash64
type Hash64 interface {
Hash
Sum64() uint64
}
以上四种hash运算便是实现了这个接口。
以fnv为例:
h := fnv.New64()
h.Write([]byte(userId))
i := h.Sum64()
if i%2 != 0{
Strategy a ...
}else{
Strategy b ...
}