因为一直在做推荐系统和点击率预估排序相关工作,所以一直想用一种粗糙但直观的方式来做一个推荐系统的示例,如果能有一定的工程实现价值就更好。最近突然有了这样一个基于 Beta 分布的想法,所以记录下来。当然,这个想法可能不是我的专利,可能已经有人想到过了。
Beta 分布的直观理解
Beta 分布 是一组定义在
在理解 Beta 分布之前,我们先回顾一下二项分布。
二项分布说的是
这时候,Beta 分布就该出场了。Beta 分布可以看做是二项分布概率的概率分布。怎么理解呢?我们来继续看抛硬币的例子。
我们知道,虽然每一枚硬币都多少有些不均匀,但是总体上,硬币落下呈现正面的概率是
于是我们说,这枚多少有些不均匀的硬币在二项伯努利试验中得到正面的概率是
总结一下,Beta 分布可以看做是二项分布概率的概率分布。当我们对二项分布概率已经有一个相对比较靠谱的先验知识的时候,我们可以据此设定 Beta 的参数,然后在后续 i.i.d 的二项伯努利试验过程中,依赖 Beta 分布共轭先验的特性,对 Beta 分布的参数进行更新,最后以 Beta 分布均值作为二项分布概率的估计。
基于 Beta 分布的用户画像
推荐系统的一侧是用户,描述用户的方法是用户画像。我们可以用 Beta 用户来做基于 Tag 的用户画像。在这里,对于某个用户来说:
- Beta 分布中的
是用户在编号为 的 Tag 下的点击次数的反映; - 相应地,
则是用户在编号为 的 Tag 下展示未点击次数的反应。
于是,用户画像的策略可以简单叙述如下:
- 对于某个用户,使用先验知识(比如,全体用户的平均兴趣),对
序列进行初始化。 - 根据用户的行为(展示和点击),更新该序列
- 用户点击了具有编号为
, , Tag 的物品进行了点击,则对 , , 分别自增 1; - 用户展示未点击具有编号为
, , Tag 的物品进行了点击,则对 , , 分别自增 1。
- 用户点击了具有编号为
基于 Beta 分布的点击率预估
对于具有画像
而后,我们可以根据各个物品的预估点击率对物品进行排序,然后推荐给用户。
总结
这是一个近乎「儿戏」的推荐方案,但在实践上并非完全无用。说它儿戏,是因为它只考虑了单个用户的历史行为,而没有考虑其他所有对推荐有帮助的因素——比如其他用户的行为(可做协同过滤),比如推荐结果多样性。但是,在没有这些其他因素的情况下,这种方案可以起到过渡方案的作用。对,我说的就是在新用户、新物品冷启动的时候,这种方案简单易实现,值得一试。
Gitalk 加载中 ...